From ae6c39c8e9758172c92136128c811f2387531228 Mon Sep 17 00:00:00 2001 From: Jan Tuomi Date: Tue, 2 Feb 2021 21:28:12 +0200 Subject: Rename to kanji_info_fetcher --- attain_vocab_to_anki_py/jisho_client.py | 92 --------------------------------- 1 file changed, 92 deletions(-) delete mode 100644 attain_vocab_to_anki_py/jisho_client.py (limited to 'attain_vocab_to_anki_py/jisho_client.py') diff --git a/attain_vocab_to_anki_py/jisho_client.py b/attain_vocab_to_anki_py/jisho_client.py deleted file mode 100644 index d2c0e4f..0000000 --- a/attain_vocab_to_anki_py/jisho_client.py +++ /dev/null @@ -1,92 +0,0 @@ -from bs4 import BeautifulSoup -import requests -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 - - 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}" - resp = requests.get(url) - resp.raise_for_status() - - soup = BeautifulSoup(resp.text, "html.parser") - container = soup.select_one("div#page_container") - - meanings = container.select(".kanji-details__main-meanings") - kanji_meaning_texts = map(lambda e: e.text.strip(), meanings) - - kanji_characters = container.select(".character") - kanji_character_texts = map(lambda e: e.text.strip(), kanji_characters) - - result_tuples = zip(kanji_character_texts, kanji_meaning_texts) - result_strs = map(lambda t: " ".join(t), result_tuples) - result = "
".join(result_strs) - - entry.meanings = result - entries_with_meanings.append(entry) - - 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 -- cgit v1.3