Create a gist now

Instantly share code, notes, and snippets.

Embed
What would you like to do?
从有道单词本导出单词到anki
#!/bin/python
# -*- coding:utf-8 -*-
# a script sync. wordbook from youdao dict to anki
import sys
import hashlib,time
import httplib, urllib2, cookielib
from xml.dom.minidom import parse, parseString
class Youdao:
"""init login for Youdao"""
def __init__(self, username,password):
self.username = username
self.password = hashlib.md5(password.encode('utf-8')).hexdigest()
status = {'LOGIN_SUCCESS':'201'}
loginHost = 'reg.163.com'
loginPath = '/services/userlogin?username=%s&password=%s&type=1&product=search' \
% (self.username, self.password)
self.headers = {
'User-Agent':'YoudaoDictPro/3.1.0 CFNetwork/548.1.4 Darwin/11.0.0'
}
conn = httplib.HTTPConnection(loginHost)
conn.request('GET', loginPath,None, self.headers)
response = conn.getresponse()
txt = response.read().splitlines()
if txt[0] == '201':
self.cookies = response.getheader('Set-Cookie')
print 'Login Success!'
else:
self.cookies = ''
print '[ERROR]', [i for i in txt]
response.close()
def syncDict(self, output):
dictHost = 'dict.youdao.com'
dictPath = '/wordbook/api?appVer=mdict.3.1.0.iphonepro&id=961aaaebd8fb1d8c65385561e32bf244&model=iPod%20touch&deviceid=49b0d44f517212e77c74d5c67d30d932e6cae827&mid=5.1'
nowtimestamp = repr(time.time() * 1000).split('.')[0]
'''
FORMAT like:
<actionlist>
<type>words</type>
<localtimestamp>1337502741787</localtimestamp>
<remlocaltimestamp>1337502741778</remlocaltimestamp>
<action type="refresh">
<localtimestamp>1337517090.037</localtimestamp>
<remlocaltimestamp>0</remlocaltimestamp>
</action>
</actionlist>
'''
#expected lastest timestamp
remlocaltimestamp = nowtimestamp
#local last updated time
localtimestamp = '1117217156809' #Sat May 28 2005 02:05:56 GMT+0800 that is OLD enough!;) @TODO :cached
data='data=%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%20%3F%3E%3Cactionlist%3E%3Ctype%3Ewords%3C%2Ftype%3E%3Clocaltimestamp%3E' + localtimestamp \
+ '%3C%2Flocaltimestamp%3E%3Cremlocaltimestamp%3E' + remlocaltimestamp \
+ '%3C%2Fremlocaltimestamp%3E%3Caction%20type%3D%22refresh%22%3E%3Clocaltimestamp%3E' + localtimestamp \
+ '%3C%2Flocaltimestamp%3E%3Cremlocaltimestamp%3E' + remlocaltimestamp \
+ '%3C%2Fremlocaltimestamp%3E%3C%2Faction%3E%3C%2Factionlist%3E'
self.headers['Cookie'] = self.cookies
self.headers['Content-Type'] = 'application/x-www-form-urlencoded'
self.headers['User-Agent'] = 'iphonepro'
conn = httplib.HTTPConnection(dictHost)
conn.request('POST',dictPath,data,self.headers)
response = conn.getresponse()
status,reason = response.status, response.reason
if status == 200:
self.dictXML = response.read()
f = open('dict.xml', 'w')
f.write(self.dictXML)
f.close()
else:
print '[ERROR]',status, reason
response.close()
dom = parseString(self.dictXML)
f = open(output, 'w')
for item in dom.getElementsByTagName('alter'):
word = item.getElementsByTagName('word')[0].firstChild.wholeText
try:
trans = item.getElementsByTagName('trans')[0].firstChild.wholeText
except:
trans = ''
word = word.strip().encode('utf-8')
trans = trans.strip().encode('utf-8')
f.write(word + ' , ' + trans)
f.write('\r\n')
f.close()
print 'Fetch Success! check out wordbook.txt'
def main(args):
if len(args) < 3 or \
args[1] in ['-u', '--usage', '-h', '--help', '/h', '/help']:
print 'Usage:\n\t python', args[0], 'your@email.com your_password\n'
sys.exit(0)
youdao = Youdao(args[1],args[2])
youdao.syncDict('wordbook.txt')
if __name__ == '__main__':
main(sys.argv)
@hairuo

This comment has been minimized.

Show comment
Hide comment
@hairuo

hairuo Jul 20, 2013

hello, could u give more detail on how to use this .py in order to import wordbook of youdao to anki?
I run it under windows 7 and it seems no response.
thanks!

hairuo commented Jul 20, 2013

hello, could u give more detail on how to use this .py in order to import wordbook of youdao to anki?
I run it under windows 7 and it seems no response.
thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment