summaryrefslogtreecommitdiffstats
path: root/attain_vocab_to_anki_py/jisho_client.py
blob: 0ca21472a86d27c411369ee516c8ede04cd6619c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
from bs4 import BeautifulSoup
import requests
import urllib.parse

JISHO_BASE_URL = "https://jisho.org/search"

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}")

    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 = "<br>".join(result_strs)

    entry.meanings = result
    entries_with_meanings.append(entry)

  return entries_with_meanings