anki-word-query/addons/fastwq/service/dict/baicizhan.py
2018-07-30 17:42:14 +08:00

98 lines
2.9 KiB
Python

#-*- coding:utf-8 -*-
import json
import os
from collections import defaultdict
from ..base import *
@register([u'百词斩', u'Baicizhan'])
class Baicizhan(WebService):
bcz_download_mp3 = True
bcz_download_img = True
def __init__(self):
super(Baicizhan, self).__init__()
def _get_from_api(self):
url = u"http://mall.baicizhan.com/ws/search?w={}".format(self.quote_word)
result = {
"accent": u"",
"img": u"",
"mean_cn": u"",
"st": u"",
"sttr": u"",
"tv": u"",
"word": u"",
"df": u'',
}
try:
html = self.get_response(url, timeout=5)#urllib2.urlopen(url, timeout=5).read()
result.update(json.loads(html))
except:
pass
return self.cache_this(result)
@export('PRON')
def fld_phonetic(self):
url = u'http://baicizhan.qiniucdn.com/word_audios/{}.mp3'.format(self.quote_word)
audio_name = 'bcz_%s.mp3' % self.word
audio_name = get_hex_name(self.unique.lower(), audio_name, 'mp3')
if self.bcz_download_mp3:
if os.path.exists(audio_name) or self.download(url, audio_name, 5):
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
@export('PHON')
def fld_phon(self):
return self._get_field('accent')
@export('IMAGE')
def fld_img(self):
url = self._get_field('img')
if url and self.bcz_download_img:
filename = url[url.rindex('/') + 1:]
if os.path.exists(filename) or self.download(url, filename):
return self.get_anki_label(filename, 'img')
#return self.get_anki_label(url, 'img')
return ''
@export([u'象形', u'Pictogram'])
def fld_df(self):
url = self._get_field('df')
if url and self.bcz_download_img:
filename = url[url.rindex('/') + 1:]
if os.path.exists(filename) or self.download(url, filename):
return self.get_anki_label(filename, 'img')
#return self.get_anki_label(url, 'img')
return ''
@export(u'DEF')
def fld_mean(self):
return self._get_field('mean_cn')
@export(u'EXAMPLE')
def fld_st(self):
return self._get_field('st')
@export('TRANS')
def fld_sttr(self):
return self._get_field('sttr')
@export([u'单词tv', u'TV'])
def fld_tv_url(self):
video = self._get_field('tv')
if video:
return self.get_anki_label(video, 'video')
return ''