#仕様
- 入力した単語を翻訳サイトからスクレイピングし、翻訳結果を表示する
- 翻訳と同時にに音声ファイルも出力する
- 音声ファイルを単語名.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()
#感想
なんとか形にできました。他の方が作ったQiitaの記事がとても参考になりました。あとはデスクトップにbatファイルを作れば気軽に立ち上げることができると思います。また、ダウンロードしたmp3ファイルから単語のリスニングテストなんかも作れるかもしれません。