PythonProject(1)vim的Hustoj插件
打算写一个vim的插件,或者emacs的插件。可以在编辑器里打比赛,看rank,交代码。总之相当于一个桌面版的hustoj
这是上学期就有的一个脑洞产物,昨天学了Python的爬虫,发现这个东西很有实现的可能嘛!
不知道能坚持多久,我这个三分钟热度。。。
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
第一天
用fairfox+httpfox弄明白了hustoj的登陆,提交过程。//没有学过各种网络协议只能说一知半解吧,主要是参考文章写的 http://www.jb51.net/article/57161.htm
hustoj的登陆过程
先post一组数据到login.action,伪装成浏览器就会返回succes了
1 postdata = urllib.urlencode({ 2 'username':'helica', 3 'password':'' #当然要插入你的密码! 4 })
hustoj的提交过程
post一组数据的sumit.action(这里提交的代码是用base64加密的),保持登陆的cookie(?没有测试不保持)
提交之后再给fetchstatus post一组数据,就可以返回你交的题的提交id了
再之后就是定时访问getResult 获得提交题的状态
当然,hustoj是开源的,我这样自己看数据包是不是太蛋疼了。。。
1 # -*- coding: utf-8 -*- 2 # 3 #--------------------------------------------------- 4 # 爬虫:hustoj_spider 5 # 作者: helica 6 # 日期: 2015-8-12 7 # 语言: py2 8 # 9 # 10 #--------------------------------------------------- 11 12 import urllib 13 import urllib2 14 import re 15 import cookielib 16 17 global cookie 18 cookie = cookielib.CookieJar() 19 20 def login(): 21 global cookie 22 opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie)) 23 24 postdata = urllib.urlencode({ 25 'username':'helica', 26 'password':'' 27 }) 28 29 headers = ('User-Agent','Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11') 30 31 opener.addheaders = [headers] 32 33 req = urllib2.Request( 34 url = 'http://acm.hust.edu.cn/vjudge/user/login.action', 35 data = postdata 36 ) 37 38 result = opener.open(req) 39 40 41 return result.read() 42 43 def getInfo(): 44 global cookie 45 opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie)) 46 headers = ('User-Agent','Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11') 47 opener.addheaders = [headers] 48 49 req = urllib2.Request(url = 'http://acm.hust.edu.cn/vjudge/contest/view.action?cid=66989#overview') 50 51 result = opener.open(req) 52 return result.read() 53 54 def SubCode(): 55 global cookie 56 opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie)) 57 headers = ('User-Agent','Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11') 58 opener.addheaders = [headers] 59 60 submitdata = urllib.urlencode({ 61 'cid':'79121', 62 'num':'C', 63 'language':'3', 64 'isOpen':'0', 65 'source':'Ly9sZXQgbWUgZG8gYSB0ZXN0IHRvIGZpbmQgdGhlIHVybCBvZiB0aGUgYWRkIGkgc3ViIG15IGNvZGUKLy9pIHdhbnQgbWFrZSBhIHNwaWRlciBmb3IgbXkgdmltCi8vc28gdGhhdCBpIGNhbiBzdWJtaXQgY29kZSB2aWEgbXkgZWRpdG9yIFhE' 66 }) 67 68 req = urllib2.Request( 69 url = 'http://acm.hust.edu.cn/vjudge/contest/submit.action', 70 data = submitdata 71 ) 72 73 result = opener.open(req) 74 75 return result.read() 76 77 def getStatus(): 78 global cookie 79 opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie)) 80 headers = ('User-Agent','Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11') 81 opener.addheaders = [headers] 82 83 84 85 print login() 86 #print getInfo() 87 print SubCode()