98 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			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 ''
 |