summaryrefslogtreecommitdiffstats
path: root/attain_vocab_to_anki_py/jisho_client.py
diff options
context:
space:
mode:
Diffstat (limited to 'attain_vocab_to_anki_py/jisho_client.py')
-rw-r--r--attain_vocab_to_anki_py/jisho_client.py61
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