done is better than perfect

自分が学んだことや、作成したプログラムの記事を書きます。すべての記載は他に定める場合を除き個人的なものです。

端末(Terminal)からWeblioで検索できるPythonスクリプト書いた(改訂版)

前回の記事で書いたPythonスクリプトが半端過ぎたので、 少しだけアップデートしました。

オプションで動詞だけ出すとか、過去形の単語で引いても意味が出てくるとかまだまだ改良したい部分はありますが、 これ以上改良するなら多分自分のGitHubアカウント上にでも上げてやります。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys
import urllib.request
import urllib.parse
from html.parser import HTMLParser
from collections import Counter

WEBLIO_URL = "http://ejje.weblio.jp/content/"

class MyHTMLParser(HTMLParser):
    def __init__(self):
        HTMLParser.__init__(self)
        self._is_kiji = False
        self._is_translated_word = False
        self._translated_words = Counter()

    def handle_starttag(self, tag, attrs):
        if tag == "div":
            attrs_dict = {t[0]:t[1] for t in attrs}
            if attrs_dict.get("class", None) == "kiji":
                self._is_kiji = True
        if tag == "a":
            attrs_dict = {t[0]:t[1] for t in attrs}
            if attrs_dict.get("class", None) == "crosslink" and self._is_kiji:
                self._is_translated_word= True

    def handle_endtag(self, tag):
        if tag == "div" and self._is_kiji:
            self._is_kiji = False

    def handle_data(self, data):
        if self._is_translated_word:
            self._translated_words[data] += 1
            self._is_translated_word = False

    @property
    def translated_words(self):
        return self._translated_words.most_common(10)


def parse_weblio(raw_ret):
    parser = MyHTMLParser()
    parser.feed(raw_ret)
    print(parser.translated_words)


def main():
    word = urllib.parse.quote_plus(sys.argv[1])
    filename, headers = urllib.request.urlretrieve(WEBLIO_URL + word)
    with open(filename) as f:
        parse_weblio(f.read())



if __name__ == "__main__":
    main()