获取个人AC的题目代码

来源:互联网 发布:chrome的json插件 编辑:程序博客网 时间:2024/06/16 08:57

一直都想写这么个东西,用户登录后,输入题号,找到代码链接,打印,就这么轻松,不过有的代码是在比赛里提交的,必须要到比赛里去找,所以若一下子找不到代码就要提供比赛id

一开始我是直接在Submissions里挨个搜索所找的题目和代码,感觉贼慢,特别是你如果提交的题目很多的话,后来观察了下网址,想到直接跳到那道题你提交的页面,然后搜索AC代码,这样就快多了

#!/usr/bin/env python  #-*-coding:utf-8-*-        import sys, re  import  urllib, urllib2  import cookielib  import getpass  from bs4 import BeautifulSoup   #处理编码问题reload(sys)sys.setdefaultencoding( "utf-8" )home_url = 'http://acm.sdut.edu.cn/onlinejudge2/index.php/Home'  login_url = 'http://acm.sdut.edu.cn/onlinejudge2/index.php/Home/Login/login'            #安装cookie处理  cookie_support = urllib2.HTTPCookieProcessor(cookielib.CookieJar())  opener = urllib2.build_opener(cookie_support)  urllib2.install_opener(opener)        #初始化cookie  home_temp = urllib2.urlopen(home_url)        #伪装成浏览器,以免服务器拒绝访问  headers = {'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36'}        uername = raw_input('请输入用户名:\n')  key = getpass.getpass('请输入登录密码:\n') #密码不可见        values = {'user_name': uername, 'password': key}        #login  post = urllib.urlencode(values)  request = urllib2.Request(login_url, post, headers)  response = urllib2.urlopen(request)  html = response.read()        #解析登录后的页面并判断是否登录成功  soup = BeautifulSoup(html)  if soup.find(text = 'Logout') != None:      print '登录成功:)\n'  else:      print '登录失败:(\n'      sys.exit(0) #直接退出            #在problem或contest里查找代码def FindCode(url, pid):    t = 0      while t == 0:          sub = BeautifulSoup(urllib2.urlopen(url))          table = sub.find_all('tr')          for tr in table:              try:                  tr = tr.find_all('td')                  if tr[3].text == 'Accepted' and tr[2].a['href'][-9:-5]  == pid:                      code = 'http://acm.sdut.edu.cn/onlinejudge2/index.php/Home/Viewcode/view/sid/' + tr[0].text                      res = BeautifulSoup(urllib2.urlopen(code))                       print res.find(class_ = 'brush:cpp;').text                       return True            except:                  pass          try:              url = 'http://acm.sdut.edu.cn' + sub.find(class_ = 'next')['href']         except:                return False         #输入题号,获取AC代码  while True:      pid = raw_input('输入你要找的代码题号:\n')      url = 'http://acm.sdut.edu.cn/onlinejudge2/index.php/Home/Solution/status?runid=&username=' + uername + '&pid=' + pid + '&lang=&result='    if FindCode(url, pid) == False:        cid = raw_input('没有找到代码,输入pid在比赛里找找吧\n')        url = 'http://acm.sdut.edu.cn/onlinejudge2/index.php/Home/Contest/conteststatus/cid/' + cid + '/uid/23897.html'        FindCode(url, pid)


运行截图:


原创粉丝点击