2018-07-01 10:55:30 +08:00
|
|
|
#-*- coding:utf-8 -*-
|
|
|
|
|
import base64
|
|
|
|
|
import re
|
|
|
|
|
import urllib
|
|
|
|
|
import urllib2
|
|
|
|
|
|
|
|
|
|
from aqt.utils import showInfo
|
|
|
|
|
from BeautifulSoup import BeautifulSoup
|
|
|
|
|
|
2018-07-14 21:21:31 +08:00
|
|
|
from ..base import WebService, export, with_styles, register
|
2018-07-01 10:55:30 +08:00
|
|
|
|
|
|
|
|
# Anki buit-in BeautifulSoup is bs3 not bs4
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
css = ''
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@register(u'法语助手')
|
|
|
|
|
class Frdic(WebService):
|
|
|
|
|
|
|
|
|
|
def __init__(self):
|
|
|
|
|
super(Frdic, self).__init__()
|
|
|
|
|
|
|
|
|
|
def _get_content(self):
|
|
|
|
|
url = 'https://frdic.com/mdicts/fr/{word}'.format(
|
|
|
|
|
word=urllib.quote(self.word.encode('utf-8')))
|
|
|
|
|
try:
|
|
|
|
|
result = {}
|
|
|
|
|
html = urllib2.urlopen(url, timeout=5).read()
|
|
|
|
|
soup = BeautifulSoup(html)
|
|
|
|
|
|
|
|
|
|
def _get_from_element(dict, key, soup, tag, id=None, class_=None):
|
|
|
|
|
baseURL = 'https://frdic.com/'
|
|
|
|
|
# element = soup.find(tag, id=id, class_=class_) # bs4
|
|
|
|
|
if id:
|
|
|
|
|
element = soup.find(tag, {"id": id})
|
|
|
|
|
if class_:
|
|
|
|
|
element = soup.find(tag, {"class": class_})
|
|
|
|
|
if element:
|
|
|
|
|
dict[key] = str(element)
|
|
|
|
|
dict[key] = re.sub(
|
|
|
|
|
r'href="/', 'href="' + baseURL, dict[key])
|
|
|
|
|
dict[key] = re.sub(r'声明:.*。', '', dict[key])
|
|
|
|
|
dict[key] = dict[key].decode('utf-8')
|
|
|
|
|
return dict
|
|
|
|
|
|
|
|
|
|
# '<span class="Phonitic">[bɔ̃ʒur]</span>'
|
|
|
|
|
result = _get_from_element(
|
|
|
|
|
result, 'phonitic', soup, 'span', class_='Phonitic')
|
|
|
|
|
# '<div id='FCChild' class='expDiv'>'
|
|
|
|
|
result = _get_from_element(
|
|
|
|
|
result, 'fccf', soup, 'div', id='FCChild') # 法汉-汉法词典
|
|
|
|
|
result = _get_from_element(
|
|
|
|
|
result, 'example', soup, 'div', id='LJChild') # 法语例句库
|
|
|
|
|
result = _get_from_element(
|
|
|
|
|
result, 'syn', soup, 'div', id='SYNChild') # 近义、反义、派生词典
|
|
|
|
|
result = _get_from_element(
|
|
|
|
|
result, 'ff', soup, 'div', id='FFChild') # 法法词典
|
|
|
|
|
result = _get_from_element(
|
|
|
|
|
result, 'fe', soup, 'div', id='FEChild') # 法英词典
|
|
|
|
|
|
|
|
|
|
return self.cache_this(result)
|
|
|
|
|
except Exception as e:
|
|
|
|
|
return {}
|
|
|
|
|
|
2018-07-13 22:08:35 +08:00
|
|
|
@export(u'真人发音')
|
2018-07-01 10:55:30 +08:00
|
|
|
def fld_sound(self):
|
|
|
|
|
# base64.b64encode('bonjour') == 'Ym9uam91cg=='
|
|
|
|
|
# https://api.frdic.com/api/v2/speech/speakweb?langid=fr&txt=QYNYm9uam91cg%3d%3d
|
|
|
|
|
url = 'https://api.frdic.com/api/v2/speech/speakweb?langid=fr&txt=QYN{word}'.format(
|
|
|
|
|
word=urllib.quote(base64.b64encode(self.word.encode('utf-8'))))
|
|
|
|
|
audio_name = u'frdic_{word}.mp3'.format(word=self.word)
|
|
|
|
|
try:
|
|
|
|
|
urllib.urlretrieve(url, audio_name)
|
|
|
|
|
return self.get_anki_label(audio_name, 'audio')
|
|
|
|
|
except Exception as e:
|
|
|
|
|
return ''
|
|
|
|
|
|
|
|
|
|
def _get_field(self, key, default=u''):
|
|
|
|
|
return self.cache_result(key) if self.cached(key) else self._get_content().get(key, default)
|
|
|
|
|
|
2018-07-13 22:08:35 +08:00
|
|
|
@export(u'音标')
|
2018-07-01 10:55:30 +08:00
|
|
|
def fld_phonetic(self):
|
|
|
|
|
return self._get_field('phonitic')
|
|
|
|
|
|
2018-07-13 22:08:35 +08:00
|
|
|
@export(u'法汉-汉法词典')
|
2018-07-01 10:55:30 +08:00
|
|
|
def fld_fccf(self):
|
|
|
|
|
return self._get_field('fccf')
|
|
|
|
|
|
2018-07-13 22:08:35 +08:00
|
|
|
@export(u'法语例句库')
|
2018-07-01 10:55:30 +08:00
|
|
|
@with_styles(css=css)
|
|
|
|
|
def fld_example(self):
|
|
|
|
|
return self._get_field('example')
|
|
|
|
|
|
2018-07-13 22:08:35 +08:00
|
|
|
@export(u'近义、反义、派生词典')
|
2018-07-01 10:55:30 +08:00
|
|
|
@with_styles(css=css)
|
|
|
|
|
def fld_syn(self):
|
|
|
|
|
return self._get_field('syn')
|
|
|
|
|
|
2018-07-13 22:08:35 +08:00
|
|
|
@export(u'法法词典')
|
2018-07-01 10:55:30 +08:00
|
|
|
@with_styles(css=css)
|
|
|
|
|
def fld_ff(self):
|
|
|
|
|
return self._get_field('ff')
|
|
|
|
|
|
2018-07-13 22:08:35 +08:00
|
|
|
@export(u'法英词典')
|
2018-07-01 10:55:30 +08:00
|
|
|
@with_styles(css=css)
|
|
|
|
|
def fld_fe(self):
|
|
|
|
|
return self._get_field('fe')
|