diff options
Diffstat (limited to 'attain_vocab_to_anki_py/jisho_client.py')
| -rw-r--r-- | attain_vocab_to_anki_py/jisho_client.py | 61 |
1 files changed, 59 insertions, 2 deletions
diff --git a/attain_vocab_to_anki_py/jisho_client.py b/attain_vocab_to_anki_py/jisho_client.py index 0ca2147..d2c0e4f 100644 --- a/attain_vocab_to_anki_py/jisho_client.py +++ b/attain_vocab_to_anki_py/jisho_client.py @@ -4,12 +4,29 @@ import urllib.parse JISHO_BASE_URL = "https://jisho.org/search" +def _meaning_tag_to_abbrev(tag: str) -> str: + if "Godan" in tag: return "G1" + if "Ichidan" in tag: return "G2" + if "Suru" in tag: return "G3" + if "Noun" in tag: return "N." + if "I-adjective" in tag: return "い-adj." + if "Na-adjective" in tag: return "な-adj." + if "No-adjective" in tag: return "の-adj." + if "Adverb" in tag: return "adv." + return tag + def inject_kanji_meanings(entries: list) -> list: entries_with_meanings = [] for index, entry in enumerate(entries): kanji = entry.kanji - print(f"Fetching data for #{index}: {kanji}") + + if len(entry.meanings) > 0: + print(f"Meaning data exists for #{index}: {kanji}. Skipping...") + entries_with_meanings.append(entry) + continue + + print(f"Fetching meaning data from Jisho for #{index}: {kanji}") resource_part = urllib.parse.quote_plus(f"{kanji}#kanji") url = f"{JISHO_BASE_URL}/{resource_part}" @@ -32,4 +49,44 @@ def inject_kanji_meanings(entries: list) -> list: entry.meanings = result entries_with_meanings.append(entry) - return entries_with_meanings
\ No newline at end of file + return entries_with_meanings + +def inject_english_translation(entries: list) -> list: + entries_with_translations = [] + + for index, entry in enumerate(entries): + kanji = entry.kanji + + if len(entry.english) > 0: + print(f"English translation exists for #{index}: {kanji}. Skipping...") + entries_with_translations.append(entry) + continue + + print(f"Fetching translation from Jisho for #{index}: {kanji}") + + resource_part = urllib.parse.quote_plus(f"{kanji}") + url = f"{JISHO_BASE_URL}/{resource_part}" + resp = requests.get(url) + resp.raise_for_status() + + soup = BeautifulSoup(resp.text, "html.parser") + container = soup.select_one("div#page_container") + + meaning_wrapper = container.select(".meanings-wrapper")[0] + + meaning_tags = meaning_wrapper.select(".meaning-tags") + meaning_tags_texts = map(lambda e: e.text.strip(), meaning_tags) + meaning_tag_abbrevs = map(_meaning_tag_to_abbrev, meaning_tags_texts) + + meaning_translations = meaning_wrapper.select(".meaning-wrapper .meaning-meaning") + meaning_translations_texts = map(lambda e: e.text.strip(), meaning_translations) + + meanings_zipped = zip(meaning_tag_abbrevs, meaning_translations_texts) + + first_translation_pair = list(meanings_zipped)[0] + result = f"{first_translation_pair[0]} {first_translation_pair[1]}" + + entry.english = result + entries_with_translations.append(entry) + + return entries_with_translations |
