woxi-cli/woxi.py

61 lines
1.8 KiB
Python
Executable File

#!/usr/bin/env python3
import re
import os
import sys
import json
import requests
from bs4 import BeautifulSoup
from pygments import highlight
from pygments.lexers import JsonLexer
from pygments.formatters import TerminalFormatter
def main(query='hallo'):
template_url = 'https://synonyme.woxikon.de/synonyme/%s.php'
url = template_url % query
resp = requests.get(url)
soup = BeautifulSoup(resp.text, 'html.parser')
os.system('')
def formatMeaning(text):
text = text.strip()
text = re.sub(r'\s+', ' ', text)
text = text.replace(' Bedeutung', '. Bedeutung')
return text
card_list = []
for card in soup.select('li.synonyms-list-item.clear-content:not(.text-center)'):
synonym_group = card.select_one('div.synonyms-list-header').text
synonym_group = formatMeaning(synonym_group)
upper_synonyms = card.select_one('div.upper-synonyms')
lower_synonyms = card.select_one('div.lower-synonyms')
card_list.append({
'synonymGroup': synonym_group,
'upperSynonyms': [],
'lowerSynonyms': []
})
if upper_synonyms is not None:
for syn in upper_synonyms.find_all('a'):
syn = syn.text
card_list[-1]['upperSynonyms'].append(syn)
if lower_synonyms is not None:
for syn in lower_synonyms.find_all('a'):
syn = syn.text
card_list[-1]['lowerSynonyms'].append(syn)
card_list = card_list[::-1]
out = json.dumps(card_list, indent=2, ensure_ascii=False)
print(highlight(out, JsonLexer(), TerminalFormatter(style='monokai')))
if __name__ == '__main__':
if len(sys.argv) == 1:
main()
else:
main("%20".join(sys.argv[1:]))