anki-word-query/src/fastwq/service/baicizhan.py

92 lines
2.8 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
from .base import WebService, export, register
@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):
word = self.word.replace(' ', '_')
url = u"http://mall.baicizhan.com/ws/search?w={}".format(word)
try:
html = self.get_response(url, timeout=5)#urllib2.urlopen(url, timeout=5).read()
2018-07-01 10:55:30 +08:00
return self.cache_this(json.loads(html))
except:
return defaultdict(str)
@export('PRON', 0)
2018-07-01 10:55:30 +08:00
def fld_phonetic(self):
word = self.word.replace(' ', '_')
url = u'http://baicizhan.qiniucdn.com/word_audios/{}.mp3'.format(word)
audio_name = 'bcz_%s.mp3' % self.word
if self.bcz_download_mp3:
2018-07-01 10:55:30 +08:00
if self.download(url, audio_name):
# urllib.urlretrieve(url, audio_name)
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
def _get_field(self, key, default=u''):
return self.cache_result(key) if self.cached(key) else self._get_from_api().get(key, default)
@export('PHON', 1)
2018-07-01 10:55:30 +08:00
def fld_explains(self):
return self._get_field('accent')
@export('IMAGE', 2)
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:]
if self.download(url, filename):
return self.get_anki_label(filename, 'img')
#return self.get_anki_label(url, 'img')
return ''
@export([u'象形', u'Pictogram'], 3)
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:]
if self.download(url, filename):
return self.get_anki_label(filename, 'img')
#return self.get_anki_label(url, 'img')
return ''
@export(u'DEF', 6)
2018-07-01 10:55:30 +08:00
def fld_mean(self):
return self._get_field('mean_cn')
@export(u'EXAMPLE', 4)
2018-07-01 10:55:30 +08:00
def fld_st(self):
return self._get_field('st')
@export('TRANS', 5)
2018-07-01 10:55:30 +08:00
def fld_sttr(self):
return self._get_field('sttr')
@export([u'单词tv', u'TV'], 7)
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 ''