免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1994 | 回复: 0

Python实现360账号登录 [复制链接]

论坛徽章:
2
操作系统版块每日发帖之星
日期:2015-06-26 22:20:00每日论坛发贴之星
日期:2015-06-26 22:20:00
发表于 2015-07-08 14:14 |显示全部楼层
Python实现360云盘登陆(360域下都可以登陆),获取云盘文件并下载
使用登陆类,可以实现360域名下的账号登陆,方便抓取登陆后的数据。

代码引用:
https://github.com/logbird/360yunpan

云盘登陆
  1. # -*- coding: utf8 -*-
  2. """
  3. 云盘登陆,该类可以登录所有使用360账号登录的网站
  4. @Example
  5.     login = loginYunPan()
  6.     userinfo = login.run('user', 'pwd')
  7.     print userinfo

  8. @Author logbird@126.com
  9. """
  10. import sys
  11. import urllib
  12. import urllib2
  13. import cookielib
  14. import time
  15. import random
  16. import hashlib
  17. import json
  18. import re
  19. import os

  20. class loginYunPan():

  21.     cookieFile = None
  22.     cookie_jar = None
  23.     serverAddr = None
  24.     userFile = None

  25.     def __init__(self):
  26.         self.envInit()
  27.         self.loginInit()

  28.     def envInit(self):
  29.         base = sys.path[0] + "/tmp"
  30.         self.userFile = base + '/user.dat'
  31.         self.cookieFile = base + '/cookie.dat'
  32.         if not os.path.isdir(base):
  33.             os.mkdir(base)
  34.         if not os.path.exists(self.userFile):
  35.             open(self.userFile, 'w').close()
  36.         if not  os.path.exists(self.cookieFile):
  37.             open(self.cookieFile, 'w').close()

  38.     def loginInit(self):      
  39.         self.cookie_jar  = cookielib.LWPCookieJar(self.cookieFile)
  40.         try:
  41.             self.cookie_jar.load(ignore_discard=True, ignore_expires=True)
  42.         except Exception:
  43.             self.cookie_jar.save(self.cookieFile, ignore_discard=True, ignore_expires=True)
  44.         cookie_support = urllib2.HTTPCookieProcessor(self.cookie_jar)
  45.         opener = urllib2.build_opener(cookie_support, urllib2.HTTPHandler)
  46.         urllib2.install_opener(opener)

  47.     def getToken(self, username):
  48.         '''根据用户名等信息获得登陆的token值
  49.             
  50.             username String 用户名
  51.             return 返回Token 值
  52.         '''
  53.         login = {
  54.             'callback' : 'QiUserJsonP1377767974691',
  55.             'func' : 'test',
  56.             'm' : 'getToken',
  57.             'o' : 'sso',
  58.             'rand' : str(random.random()),
  59.             'userName' : username
  60.         }

  61.         url = "https://login.360.cn/?"
  62.         queryString = urllib.urlencode(login)
  63.         url += queryString
  64.         result = urllib2.urlopen(url).read()
  65.         result = result.strip(' ')
  66.         result = json.loads(result[5:-1])
  67.         token = ''
  68.         if result['errno'] == 0:
  69.             print 'getToken Success'
  70.             token = result['token']
  71.             self.cookie_jar.save(self.cookieFile, ignore_discard=True, ignore_expires=True)
  72.         else:
  73.             print 'getToken Failed, Errno:' + result['errno']
  74.             sys.exit()
  75.         return token


  76.     def doLogin(self, username, password, token):
  77.         '''开始执行登陆操作
  78.             
  79.             username String 用户名
  80.             password String 密码
  81.             token String 根据getToken获得
  82.         '''
  83.         login = {
  84.             'callback' : 'QiUserJsonP1377767974692',
  85.             'captFlag' : '',
  86.             'from' : 'pcw_cloud',
  87.             'func' : 'test',
  88.             'isKeepAlive' : '0',
  89.             'm' : 'login',
  90.             'o' : 'sso',
  91.             'password' : self.pwdHash(password),
  92.             'pwdmethod' : '1',
  93.             'r' : str((long)(time.time()*100)),
  94.             'rtype' : 'data',
  95.             'token' : token,
  96.             'userName' : username
  97.         }
  98.         url = "https://login.360.cn/?"
  99.         queryString = urllib.urlencode(login)
  100.         url += queryString
  101.         result = urllib2.urlopen(url).read()
  102.         result = result.replace("\n", '').strip(' ')
  103.         result = json.loads(result[5:-1])
  104.         userinfo = {}
  105.         if result['errno'] == 0:
  106.             print 'Login Success'
  107.             userinfo = result['userinfo']
  108.             open(self.userFile, 'w').write(json.dumps(userinfo))
  109.             self.cookie_jar.save(self.cookieFile, ignore_discard=True, ignore_expires=True)
  110.         else:
  111.             print 'Login Failed, Errno:' + result['errno']
  112.             sys.exit()
  113.         return userinfo


  114.     def getServer(self):
  115.         '''获得分布式服务器的地址
  116.             
  117.             return True 已登录 False 未登录
  118.         '''
  119.         url = 'http://yunpan.360.cn/user/login?st=163'
  120.         result = urllib2.urlopen(url).read()
  121.         regx = "web : '([^']*)'"
  122.         server = re.findall(regx, result)
  123.         if len(server) and server[0] != '' > 0:
  124.             print "Get Server Success, Server Address:" + server[0]
  125.             self.serverAddr = server[0]
  126.             return True
  127.         else:
  128.             print "Logining!"
  129.             return False


  130.     def run(self, username, password):
  131.         '''开始执行登陆流程
  132.             
  133.             username String 用户名
  134.             password String 密码
  135.         '''
  136.         userinfo = None
  137.         if self.getServer():
  138.             print 'Login Success!'
  139.             userinfo = open(self.userFile).read()
  140.             userinfo = json.loads(userinfo)
  141.             return userinfo
  142.         else:
  143.             # 获取token
  144.             token = self.getToken(username)
  145.             # 登陆
  146.             userinfo = self.doLogin(username, password, token);
  147.             # 获得分布式服务器
  148.             self.getServer()
  149.         return userinfo


  150.     def pwdHash(self, password):
  151.         '''md5操作函数用于密码加密

  152.             password String 需要加密的密码
  153.             return 加密后的密码
  154.         '''
  155.         md5 = hashlib.md5()
  156.         md5.update(password)
  157.         return md5.hexdigest()



  158. if __name__ == '__main__':
  159.     login = loginYunPan()
  160.     userinfo = login.run('user', 'pwd')
  161.     print userinfo

  162.      

  163. '''
  164. {"errno":0,
  165. "errmsg":"",
  166. "s":"e4x7a%27FD%7EtNm%3AF%29To.%20ocV%40%3CUC7Z3%2F%7Ce%3C%2Aw%40CsRMK%3FE8FUD5.m%27%3F%5D%2C%25p4tqp7%22%40%3Fs%7ETzr%2C%3D%21CE-%3C%5Be%3E%26j%28s%2C%25U%7DPP%5C%5E_4%28arVSU%28%3ECa%5Cr_o%2CS%28%2BJ%2FA%21.%2CWZRAwptNdB4%7D%3BeY3XP-WR3%24%24%29pt%3Ey%25ia%23D%24%3E%7D8%3A%28nH2G0C%23%2Cg%5D09Y%40jF%5EF4h%23",
  167. "userinfo":
  168.     {"qid":"15747194",
  169.     "userName":"logbird",
  170.     "nickName":"",
  171.     "realName":"",
  172.     "imageId":"1c03c17q97c61",
  173.     "theme":"quc",
  174.     "src":"quanzi",
  175.     "type":"formal",
  176.     "loginEmail":"",
  177.     "loginTime":"1377767983",
  178.     "lm":"",
  179.     "unSafeLogin":"0",
  180.     "isKeepAlive":"0",
  181.     "crumb":"020c3d",
  182.     "imageUrl":"http:\/\/u.qhimg.com\/qhimg\/quc\/48_48\/1c\/03\/c1\/1c03c17q97c61.892c07.jpg"
  183.     }
  184. }
  185. '''
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP