最近项目需要有一个博客搬家功能,需要能够导出用户的qq空间日志,试了多种方法未果,最终又找了网上很多qq空间算法的文章,最终搞定。有兴趣的同学一起学习。。。

先说下思路:

  1. 检查登录是否需要验证码,获取验证码校验值
  2. 通过验证码校验值、密码计算出登录校验值
  3. 模拟登录
  4. 计算qq空间获取日志的key
  5. 获取日志列表和每篇日志信息
简述实现步骤和请求地址:
  1. 检查是否需要验证码:

    • URL:http://check.ptlogin2.qq.com/check?uin=QQ号码&appid=549000912&ptlang=2052&js_type=2&js_ver=10009&r=0.12028346643338428
    • 参数说明:
      • uin:QQ号
      • r:随机数
    • 返回结果:
      • 不需要验证码:ptui_checkVC('0','!UYE','\x00\x00\x00\x00\x09\x15\xa9\x78')
      • 需要验证码:ptui_checkVC('1','a549914029222a94ee04501b02be85959c48245e930257d4','\x00\x00\x00\x00\x22\xc3\x37\x60');
    • 服务器会生成COOKIE,记得写入文件
    • 如果需要验证码,可以获取QQ验证码保存到本地,让用户手动输入
      • 拉取验证码url:http://captcha.qq.com/getimage?aid=549000912&r=随机数&uin=QQ号码
      • 注意:需要发送上面生产的COOKIE
  2. 计算校验值:
    • $uin = uin2bin($skey);
      $localstr = hexchar2bin($password);
      $localstr2= strtoupper(md5($localstr.$uin));
      $pwd = strtoupper(md5($localstr2 . strtoupper($code)));
    • 参数说明:
      • $sky:ptui_checkVC函数中的第三个参数
      • $password:QQ密码
      • $code:不需要验证码时,ptui_checkVC的第二个参数;需要验证码时,用户手动输入的验证码
  3. 模拟登录:
    • URL:http://ptlogin2.qq.com/login?ptlang=2052&u=QQ号码&p=上面加密后的$pwd&verifycode=验证码$code&css=http://imgcache.qq.com/p
      tcss/b2/sjpt/549000912/qzonelogin_ptlogin.css&mibao_css=m_qzone&aid=549000912&u1=http%3A%2F%2Fqzs.qq.com%2Fqzone%2Fv5%2Flogin
      succ.html%3Fpara%3Dizone&ptredirect=1&h=1&from_ui=1&dumy=&fp=loginerroralert&action=4-16-29103&g=1&t=1&dummy=&js_type=2&js_ve
      r=10009
    • 要发送COOKIE,并记录新生产的COOKIE
    • 成功后返回结果:ptuiCB(\'0\',\'0\',\'http://qzs.qq.com/qzone/v5/loginsucc.html?para=izone\',\'1\',\'登录成功!\', \'QQ昵称\')
  4. 生成获取博客所需的g_tk:
    • $g_tk=getGtk($skey),$skey是COOKIE文件中的skey值,类似@kqFx8cEUd
  5. 获取日志列表:
    • URL:http://b1.cnc.qzone.qq.com/cgi-bin/blognew/get_abs?ref=qzone&iNotice=2&inCharset=gbk&outCharset=gbk&forma
      t=json&hostUin=QQ号码&uin=QQ号码&blogType=0&cateName=&cateHex=&statYear=&reqInfo=1&pos=%d&num=%d&sortType=0&absType
      =0&startTime=null&endTime=null&source=0&rand=%f&g_tk=$g_tk&verbose=0&ref=qzone
  6. 获取某篇日志:
    • URL:http://b1.cnc.qzone.qq.com/cgi-bin/blognew/blog_output_data?uin=QQ号码&blogid=日志ID&g_tk=$g_tk

用到的加密方法:

function hexchar2bin($str)
{
    $str = strtoupper(md5($str));
    return pack("H*",$str);
}
function uin2bin($uin)
{
    $str = str_replace('\x','',$uin);
    return pack("H*",trim($str));
}
function getGtk($skey)
{
    $hash = 5381;
    $len = strlen($skey);
    for($i = 0;$i < $len;$i++){
        $h = ($hash << 5) + ord($skey[$i]);
        $hash+=$h;
    }
    return $hash & 0x7fffffff;
}
源代码整理后上传

QQ空间日志导出(php)相关推荐

  1. QQ 空间日志批量导出到CSDN

    QQ 空间日志批量导出到CSDN QQ空间批量导出助手,一款非常好用的工具,可以批量导出QQ空间的内容,我这里用到日志导出 首次使用的时候,请设置导出的格式,和导出下载工具 注意不要勾选图片类型识别, ...

  2. QQ空间日志如何备份

    喜欢在qq空间发表日志的朋友们,时间久了,肯定会有不少值得收藏的内容.如何备份下来了呢,qq空间自身是没有这样的功能,所以只能借助第三方的工具来备份了,下面笔者分享一个qq空间日志备份的方法. 笔者此 ...

  3. 我只是还迷惘,我们只是不言伤的孩纸:伤感QQ空间日志

    我只是还迷惘,我们只是不言伤的孩纸:伤感QQ空间日志 - 我只是还迷惘,我们只是不言伤的孩纸:伤感QQ空间日志 喜欢春去秋来,花开花落的美丽. 喜欢偶尔假装,低落感伤的感觉. 喜欢芳香四溢,温暖入微的 ...

  4. 从今以后我一个人唱悲伤情歌:伤感的QQ空间日志

    从今以后我一个人唱悲伤情歌:伤感的QQ空间日志 - 从今以后我一个人唱悲伤情歌:伤感的QQ空间日志 <一> 博尔赫斯:一个人进入暮年时会有很多回忆. 但经常自动浮现于脑海的大概也不会很多. ...

  5. 非主流伤感QQ空间日志_享受着自己的那份孤独

    非主流伤感QQ空间日志_享受着自己的那份孤独 - 非主流伤感QQ空间日志_享受着自己的那份孤独 多少个日夜我疯狂地思念你,思念,令我感到害怕与孤独!这时我才知,.原来思念一个人太深,会哭的,每次都是躲 ...

  6. 烟花易冷,一指繁华了无痕:伤感QQ空间日志

    烟花易冷,一指繁华了无痕:伤感QQ空间日志 - 烟花易冷,一指繁华了无痕:伤感QQ空间日志 站在记忆的河边,叹时光流年,那穿越千年的美丽邂逅,总使我轻声叹息而落泪,那绚丽的一幕,一点一滴流淌在心间,滴 ...

  7. QQ空间将不再支持免费备份原图?附QQ空间相册导出工具合集

    感谢您抽出 .. 阅读本文 小伙伴们注意:公众号的推送机制不再按照时间前后推送了,微信公众号信息流乱序.君哥建议大家把科技毒瘤君公众号置顶(设为星标⭐),以便第一时间看到推送,非常感谢~,方法如下图: ...

  8. QQ空间日志说说类网站织梦模板(带手机端)

    QQ空间日志说说类网站织梦模板(带手机端) PC wap 利于SEO优化 带原站采集规则 模板介绍: 织梦最新内核开发的模板,该模板属于QQ说说.空间日志类企业都可使用, 这款模板使用范围极广,不仅仅 ...

  9. 我拿流年,乱了浮生:伤感QQ空间日志

    我拿流年,乱了浮生:伤感QQ空间日志 - 我拿流年,乱了浮生:伤感QQ空间日志 有个人.爱过了.就结束了 有句话.说过了.就后悔了 有道伤.痛过了.就麻木了 有颗心.颤过了.就破碎了 一段亲情.过密了 ...

  10. 破碎流离的伤感QQ空间日志发布:我们的爱能有几次?

    破碎流离的伤感QQ空间日志发布:我们的爱能有几次? - 破碎流离的伤感QQ空间日志发布:我们的爱能有几次? 第一个是自己, 第二个是你最爱的人,第三个是最爱你的人,第四个是共度一生的人. 首先会遇到你 ...

最新文章

  1. 去Tech Ed得计划好
  2. awk脚本打印终端各种颜色的字体
  3. securecrt 连接配置存放目录_SecureCRT 迁移到新环境,导出配置文件目录 转(示例代码)...
  4. 为什么 Go 模块在下游服务抖动恢复后,CPU 占用无法恢复
  5. 第三章计算机网络,第三章-计算机网络及应用.ppt
  6. idea一键加密部署springboot到docker容器
  7. 系统管理-第2部分 范围,方法和元素
  8. 天气太热业绩差,除了设坛求雨外,数据分析师还能干啥?
  9. 病毒库的备份及***隐藏地址
  10. 嵌入式 C 语言(上)
  11. NVIDIA GPU简史、命名规则及基础知识
  12. 小说阅读APP开发定制搭建方案
  13. BUUCTF[SCTF2019]Who is he题解
  14. Tcp网络通信中各个状态的含义
  15. 汇编DOS与Windows Masm编译运行代码步骤详解
  16. 有没有开以修改服务器游戏数据,剑网3指尖江湖第二批服务器数据互通啦 来看看有没有你所在的大区...
  17. 计算总成绩和平均成绩
  18. Nvidia Xavier Nx平台PCIE速率调整调试记录
  19. 写计算机老师的一封信200,写给老师的一封信200字7篇精选整合
  20. 八月五日个人训练记录

热门文章

  1. better-scroll的使用以及常见的api总结
  2. DW-32-rec_sys-Task04
  3. Scala入门小纸条(3)
  4. 前后端分离,vue+springboot导出dbf
  5. 2006-01-23,科比-布莱恩特得了81分
  6. Delphi 生成二维码【PaintBox】并保存为本地文件添加至【Image】控件中
  7. 优秀工程师应该具备哪些素质_优秀的工程师具有什么品质
  8. 电脑录制视频的方法很简单 轻松录制完美视频
  9. Oracle RAC原理
  10. WKWebView 如何支持window.open方法