这个页面已经不再维护更新了,你可以从这里了解最新的进展
一个练手的小脚本,暂时只是实现了签到,还没有很完备的错误处理,而且在实现“全自动签到”上还没有想出什么合理的方案,先把代码贴上现丑了……
使用方法很简单
|
1 |
python xiami_auto_checkin.py email password |
即把用户名(email)和密码作为参数传进去即可
如果你只是签固定的一个帐号,也可以直接将代码中的读参数改成赋值
这个代码只是最初的版本,你可以在这里看到最新的进展
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
#!/usr/bin/python
# encoding:utf-8
import re
import sys
import urllib
import urllib2
import cookielib
def check(response):
"""
docstring for check
"""
pattern = re.compile(r'<div class="idh">(已连续签到\d+天)</div>')
result = pattern.search(response)
if result: return result.group(1)
return False
pass
def main():
"""
docstring for main
"""
# Get email and password
if len(sys.argv) != 3:
print '[Error] Please input email & password as sys.argv!'
return
email = sys.argv[1]
password = sys.argv[2]
# Init
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookielib.CookieJar()))
urllib2.install_opener(opener)
# Login
login_url = 'http://www.xiami.com/web/login'
login_data = urllib.urlencode({'email':email, 'password':password, 'LoginButton':'登陆',})
login_headers = {'Referer':'http://www.xiami.com/web/login', 'User-Agent':'Opera/9.60',}
login_request = urllib2.Request(login_url, login_data, login_headers)
login_response = urllib2.urlopen(login_request).read()
# Checkin
checkin_pattern = re.compile(r'<a class="check_in" href="(.*?)">')
checkin_result = checkin_pattern.search(login_response)
if not checkin_result:
# Checkin Already | Login Failed
result = check(login_response)
if result :
print '[Succeed] Checkin Already!', email, result
else:
print '[Error] Login Failed!'
return
checkin_url = 'http://www.xiami.com' + checkin_result.group(1)
checkin_headers = {'Referer':'http://www.xiami.com/web', 'User-Agent':'Opera/9.60',}
checkin_request = urllib2.Request(checkin_url, None, checkin_headers)
checkin_response = urllib2.urlopen(checkin_request).read()
# Result
result = check(checkin_response)
if result:
print '[Succeed] Checkin Succeed!', email, result
else:
print '[Error] Checkin Failed!'
pass
if __name__=='__main__':
main() |
有任何问题,欢迎批评指正,更多更新信息,请参见这里