Files
to-hen/rilke.py

48 lines
1.5 KiB
Python
Raw Normal View History

2018-05-16 16:21:39 +02:00
from argparse import ArgumentParser
2018-05-15 21:57:54 +02:00
from bs4 import BeautifulSoup
import re
import requests
from typing import Iterator
2018-05-15 21:57:54 +02:00
DEFAULT_LANG = "de"
def cook_soup(url):
return BeautifulSoup(requests.get(url).text, "lxml")
def base_url(lang=DEFAULT_LANG):
return "https://{}.wiktionary.org".format(lang)
def entry_url(word, lang=DEFAULT_LANG):
return base_url(lang) + "/wiki/" + word
2018-05-16 16:21:39 +02:00
def rhymes_url(entry_url, lang=DEFAULT_LANG):
soup = cook_soup(entry_url)
2018-05-15 21:57:54 +02:00
result_url = base_url(lang)
try:
if lang == "de":
result_url += soup.find("a", href=re.compile(r"/wiki/Reim:Deutsch:.*"))["href"]
elif lang == "en":
result_url += soup.find("a", href=re.compile(r"/wiki/Rhymes:English/.*"))["href"]
return result_url
except:
raise ValueError("Entry at {} not found.".format(entry_url))
def find_rhymes(rhymes_url: str) -> Iterator[str]:
soup = cook_soup(rhymes_url)
2018-05-15 21:57:54 +02:00
for li in soup.select("div#content ul > li > a"):
try:
yield li.text
except KeyError:
continue
if __name__ == "__main__":
2018-05-16 16:21:39 +02:00
parser = ArgumentParser(description="Find your rhyme in no time")
parser.add_argument("entry", metavar="WORD", type=str, help="the word to rhyme")
parser.add_argument("-l", "--lang", help="the language", choices=["de", "en"], nargs="?", default="de")
args = parser.parse_args()
entry_url = entry_url(args.entry, lang=args.lang)
rhymes_url = rhymes_url(entry_url, lang=args.lang)
2018-05-15 21:57:54 +02:00
for rhyme in find_rhymes(rhymes_url):
print(rhyme)