anki-word-query/addons/fastwq/service/dict/baicizhan.py

98 lines
2.9 KiB
Python
Raw Normal View History

2018-07-01 10:55:30 +08:00
#-*- coding:utf-8 -*-
import json
import os
from collections import defaultdict
2018-07-30 17:42:14 +08:00
from ..base import *
2018-07-01 10:55:30 +08:00
@register([u'百词斩', u'Baicizhan'])
2018-07-01 10:55:30 +08:00
class Baicizhan(WebService):
bcz_download_mp3 = True
bcz_download_img = True
2018-07-01 10:55:30 +08:00
def __init__(self):
super(Baicizhan, self).__init__()
def _get_from_api(self):
2018-07-30 17:42:14 +08:00
url = u"http://mall.baicizhan.com/ws/search?w={}".format(self.quote_word)
2018-07-09 14:12:54 +08:00
result = {
"accent": u"",
"img": u"",
"mean_cn": u"",
"st": u"",
"sttr": u"",
"tv": u"",
"word": u"",
"df": u'',
}
2018-07-01 10:55:30 +08:00
try:
html = self.get_response(url, timeout=5)#urllib2.urlopen(url, timeout=5).read()
2018-07-09 14:12:54 +08:00
result.update(json.loads(html))
2018-07-01 10:55:30 +08:00
except:
2018-07-09 14:12:54 +08:00
pass
return self.cache_this(result)
2018-07-01 10:55:30 +08:00
2018-07-13 22:08:35 +08:00
@export('PRON')
2018-07-01 10:55:30 +08:00
def fld_phonetic(self):
2018-07-30 17:42:14 +08:00
url = u'http://baicizhan.qiniucdn.com/word_audios/{}.mp3'.format(self.quote_word)
2018-07-01 10:55:30 +08:00
audio_name = 'bcz_%s.mp3' % self.word
2018-07-30 17:42:14 +08:00
audio_name = get_hex_name(self.unique.lower(), audio_name, 'mp3')
if self.bcz_download_mp3:
2018-07-09 14:12:54 +08:00
if os.path.exists(audio_name) or self.download(url, audio_name, 5):
2018-07-01 10:55:30 +08:00
with open(audio_name, 'rb') as f:
if f.read().strip() == '{"error":"Document not found"}':
res = ''
else:
res = self.get_anki_label(audio_name, 'audio')
if not res:
os.remove(audio_name)
else:
res = ''
return res
else:
return url
2018-07-13 22:08:35 +08:00
@export('PHON')
2018-07-09 14:12:54 +08:00
def fld_phon(self):
2018-07-01 10:55:30 +08:00
return self._get_field('accent')
2018-07-13 22:08:35 +08:00
@export('IMAGE')
2018-07-01 10:55:30 +08:00
def fld_img(self):
url = self._get_field('img')
if url and self.bcz_download_img:
2018-07-01 10:55:30 +08:00
filename = url[url.rindex('/') + 1:]
2018-07-09 14:12:54 +08:00
if os.path.exists(filename) or self.download(url, filename):
2018-07-01 10:55:30 +08:00
return self.get_anki_label(filename, 'img')
#return self.get_anki_label(url, 'img')
return ''
2018-07-13 22:08:35 +08:00
@export([u'象形', u'Pictogram'])
2018-07-01 10:55:30 +08:00
def fld_df(self):
url = self._get_field('df')
if url and self.bcz_download_img:
2018-07-01 10:55:30 +08:00
filename = url[url.rindex('/') + 1:]
2018-07-09 14:12:54 +08:00
if os.path.exists(filename) or self.download(url, filename):
2018-07-01 10:55:30 +08:00
return self.get_anki_label(filename, 'img')
#return self.get_anki_label(url, 'img')
return ''
2018-07-13 22:08:35 +08:00
@export(u'DEF')
2018-07-01 10:55:30 +08:00
def fld_mean(self):
return self._get_field('mean_cn')
2018-07-13 22:08:35 +08:00
@export(u'EXAMPLE')
2018-07-01 10:55:30 +08:00
def fld_st(self):
return self._get_field('st')
2018-07-13 22:08:35 +08:00
@export('TRANS')
2018-07-01 10:55:30 +08:00
def fld_sttr(self):
return self._get_field('sttr')
2018-07-13 22:08:35 +08:00
@export([u'单词tv', u'TV'])
2018-07-01 10:55:30 +08:00
def fld_tv_url(self):
2018-07-02 15:51:10 +08:00
video = self._get_field('tv')
if video:
return self.get_anki_label(video, 'video')
return ''