LoginSignup
5
7

More than 3 years have passed since last update.

pythonで英単語アプリを作成

Last updated at Posted at 2020-11-24

仕様

  • 入力した単語を翻訳サイトからスクレイピングし、翻訳結果を表示する
  • 翻訳と同時にに音声ファイルも出力する
  • 音声ファイルを単語名.mp3で保存する

ライブラリ

使用したライブラリは以下の通りです。

ライブラリ 用途
os パスの確認
requests htmlの入手、mp3のダウンロード
bs4 htmlの解析
tkinter GUIの作成
pygame mp3の再生
random 例外処理

コード

import os
import random
import tkinter
import requests
from bs4 import BeautifulSoup
from pygame import mixer


class Translation:
    def __init__(self):
        self.root = tkinter.Tk()
        self.root.title('Translation')
        self.root.geometry('500x200')
        self.root.attributes('-topmost', True)
        self.text_box = tkinter.Entry(width=20, font=('', 20), justify='center')
        self.text_box.focus_set()
        self.text_box.pack()
        self.root.bind('<Return>', self.scraping)
        self.root.bind('<space>', self.delete)
        self.answer = tkinter.Message(self.root, text='', font=('', 20), width=450)
        self.answer.pack(anchor='center', expand=1)
        self.root.mainloop()

    def scraping(self, event): #スクレイピング
        try:
            res = requests.get('https://ejje.weblio.jp/content/' + self.text_box.get())
            soup = BeautifulSoup(res.content, 'html.parser')
            txt = soup.find('td', {'class': 'content-explanation ej'})
            self.answer['text'] = txt.text
            self.sound(soup)
        except:
            self.answer['text'] = random.choice(('(^^;)?', '(・ω・)?', "('Д')?", '(; ・`д・´)?'))

    def sound(self, soup): #mp3をダウンロードし再生する
        mp3_directory_path = 'd:/python/Application/mp3/' #mp3の保存先
        if not os.path.exists(mp3_directory_path):
            os.mkdir(mp3_directory_path)

        if os.path.exists(mp3_directory_path + self.text_box.get() + '.mp3'):
            pass
        else:
            audio = soup.find('audio', {'class': 'contentAudio'})
            src = audio.find('source')['src']
            res = requests.get(src, stream=True)

            with open(mp3_directory_path + self.text_box.get() + '.mp3', 'wb') as f:
                f.write(res.content)

        mixer.init()
        mixer.music.load(mp3_directory_path + self.text_box.get() + '.mp3')
        mixer.music.play()

    def delete(self, event): #スペースキーで入力欄の文字を全て削除する
        self.text_box.delete(0, tkinter.END)


Translation()

実行結果

result1.PNG

result2.PNG

感想

 なんとか形にできました。他の方が作ったQiitaの記事がとても参考になりました。あとはデスクトップにbatファイルを作れば気軽に立ち上げることができると思います。また、ダウンロードしたmp3ファイルから単語のリスニングテストなんかも作れるかもしれません。

5
7
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
7