anki-word-query/addons21/fastwq/service/dict/baidu_chinese.py

155 lines
4.8 KiB
Python
Raw Normal View History

2018-07-07 22:51:01 +08:00
#-*- coding:utf-8 -*-
2018-07-30 16:00:47 +08:00
import os
from ..base import *
2018-07-07 22:51:01 +08:00
baidu_download_mp3 = True
2018-07-14 01:18:03 +08:00
@register([u'百度汉语', u'Baidu-Hanyu'])
2018-07-07 22:51:01 +08:00
class Baidu_Chinese(WebService):
def __init__(self):
super(Baidu_Chinese, self).__init__()
2018-08-10 00:46:14 +08:00
def _get_from_api(self):
url = u"http://dict.baidu.com/s?wd={}&ptype=zici#basicmean".format(self.quote_word)
try:
html = self.get_response(url, timeout=10)
soup = parse_html(html)
except:
pass
2018-07-07 22:51:01 +08:00
result = {
'pinyin': '',
'basicmean': '',
'detailmean': '',
'source': '',
'example': '',
'synonym': '',
'antonym': '',
2018-07-07 22:51:01 +08:00
'fanyi': '',
'audio_url': '',
}
#拼音
element = soup.find('div', id='pinyin')
if element:
tag = element.find_all('b')
if tag:
result['pinyin'] = u' '.join(x.get_text() for x in tag)
if tag:
tag = element.find('a')
if tag:
result['audio_url'] = tag.get('url')
2018-07-07 22:51:01 +08:00
#基本释义
element = soup.find('div', id='basicmean-wrapper')
if element:
2018-07-08 17:39:21 +08:00
tag = element.find_all('div', {'class': 'tab-content'})
2018-07-07 22:51:01 +08:00
if tag:
2018-07-30 16:00:47 +08:00
result['basicmean'] = u''.join(str(x) for x in tag)
#详细释义
element = soup.find('div', id='detailmean-wrapper')
if element:
2018-07-08 17:39:21 +08:00
tag = element.find_all('div', {'class': 'tab-content'})
if tag:
2018-07-30 16:00:47 +08:00
result['detailmean'] = u''.join(str(x) for x in tag)
#出处
element = soup.find('div', id='source-wrapper')
if element:
tag = element.find('div', {'class': 'tab-content'})
if tag:
result['source'] = u''.join(str(x) for x in tag)
#例句
element = soup.find('div', id='liju-wrapper')
if element:
tag = element.find('div', {'class': 'tab-content'})
if tag:
result['example'] = u''.join(str(x) for x in tag)
#近义词
element = soup.find('div', id='synonym')
if element:
tag = element.find('div', {'class': 'block'})
if tag:
element = tag.find_all('a')
result['synonym'] = u' '.join(x.get_text() for x in element)
#反义词
element = soup.find('div', id='antonym')
if element:
tag = element.find('div', {'class': 'block'})
if tag:
element = tag.find_all('a')
result['antonym'] = u' '.join(x.get_text() for x in element)
2018-07-07 22:51:01 +08:00
#英文翻译
element = soup.find('div', id='fanyi-wrapper')
if element:
tag = element.find_all('dt')
if tag:
result['fanyi'] = u'<br>'.join(x.get_text().strip() for x in tag)
return self.cache_this(result)
2018-07-08 17:39:21 +08:00
@with_styles(need_wrap_css=True, cssfile='_baidu.css')
def _css(self, val):
return val
2018-07-13 22:08:35 +08:00
@export([u'拼音', u'Phoneticize'])
2018-07-07 22:51:01 +08:00
def fld_pinyin(self):
return self._get_field('pinyin')
2018-07-13 22:08:35 +08:00
@export('PRON')
2018-07-07 22:51:01 +08:00
def fld_pron(self):
audio_url = self._get_field('audio_url')
if baidu_download_mp3 and audio_url:
2018-07-31 11:53:18 +08:00
filename = get_hex_name(self.unique.lower(), audio_url, 'mp3')
2018-08-10 00:46:14 +08:00
if os.path.exists(filename) or self.download(audio_url, filename):
return self.get_anki_label(filename, 'audio')
2018-07-07 22:51:01 +08:00
return ''
2018-07-13 22:08:35 +08:00
@export([u'基本释义', u'Basic Definitions'])
2018-07-07 22:51:01 +08:00
def fld_basic(self):
2018-07-08 17:39:21 +08:00
val = self._get_field('basicmean')
if val is None or val == '':
return ''
return self._css(val)
2018-07-07 22:51:01 +08:00
2018-07-13 22:08:35 +08:00
@export([u'详细释义', u'Detail Definitions'])
def fld_detail(self):
2018-07-08 17:39:21 +08:00
val = self._get_field('detailmean')
if val is None or val == '':
return ''
return self._css(val)
@export([u'出处', u'Source Definitions'])
def fld_source(self):
val = self._get_field('source')
if val is None or val == '':
return ''
return self._css(val)
@export([u'例句', u'Example Definitions'])
def fld_example(self):
val = self._get_field('example')
if val is None or val == '':
return ''
return self._css(val)
@export([u'近义词', u'Synonym'])
def fld_synonym(self):
val = self._get_field('synonym')
if val is None or val == '':
return ''
return self._css(val)
@export([u'反义词', u'Antonym'])
def fld_antonym(self):
val = self._get_field('antonym')
if val is None or val == '':
return ''
return self._css(val)
2018-07-13 22:08:35 +08:00
@export([u'英文翻译', u'Translation[En]'])
2018-07-07 22:51:01 +08:00
def fld_fanyi(self):
return self._get_field('fanyi')