V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
anhkgg
V2EX  ›  Python

pylogin 系列之畅言登录评论接口分析

  •  
  •   anhkgg ·
    anhkgg · 2017-08-17 01:00:43 +08:00 · 1943 次点击
    这是一个创建于 2445 天前的主题,其中的信息可能已经有所发展或是发生改变。

    概述

    博客使用了畅言做评论系统(多说、网易云跟帖 tmd 相继挂了...)。 畅言后台可以看出功能非常强大,居然还有广告业务... but,畅言登录之后,即使你选择了记住登录,也会在每次关闭浏览器后需要重新登录,很累好伐!

    折腾了我几天之后,决定还是决定分析一下登录协议,以及简单后台操作接口,然后写个脚本跑着吧,有新评论就给我"叮”一下,就不用我常常登录去翻了!

    分析

    开始分析,工具:

    1. chrome/firefox
    2. f12,network
    3. python

    登录

    chrome 打开主页 http://changyan.kuaizhan.com ,F12,调到 network 的 tab 页,然后输入登录,找到登录的包。

    Request URL:http://changyan.kuaizhan.com/loginAjax?callback=jQuery17107352265034825938_1502508074058&name=xxx&rememberMe=true&password=1111111&vcode=4795&vipIsvId=0&_=1502508184633
    Request Method:GET
    Status Code:200 OK
    
    Host:changyan.kuaizhan.com
    Referer:http://changyan.kuaizhan.com/
    User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.109 Safari/537.36
    X-Requested-With:XMLHttpRequest
    
    callback:jQuery17107352265034825938_1502508074059 //可以没有
    name:xxx
    rememberMe:true
    password:1111111
    vcode:1882
    vipIsvId:0
    _:1502508368658
    
    //响应
    jQuery17101803876020131434_1502867163749({"data":{},"code":0,"msg":"success"}); //发送了 callback
    {"data":{},"code":0,"msg":"success"}; //没有发送 callback
    
    //其他状态
    {"code":2,"msg":"验证码错误"}; 
    {"code":2,"msg":"用户名或密码错误!"}
    

    很清晰,使用 GET,ajax 发送数据,主要发送 name, password, vcode 等数据,经验证 callback 是可以不需要的,如果发送 callback,返回数据会包一层 jQuery17101803876020131434_1502867163749(data), 如果没有 callback,直接返回 data。

    很幸运的是,password 没有做任何处理(貌似未强制 https,那密码不是明文了...差评!)。没做处理,我倒简单了,不用做多余分析了,登录接口基本就这样。

    然后是返回数据,是 json 数据,成功 code 是 0,错误 code 是 2,然后是具体错误 msg。不细说。

    验证码

    每次登录都需要验证码,挺烦的。为了自动登录,还得拿到验证码。

    获取验证码接口如下:

    Request URL:http://changyan.kuaizhan.com/verifyCode?_1502508320545
    Request Method:GET
    
    Content-Type:image/jpeg; charset=UTF-8
    

    返回一张 jpg 图片,验证码处理比较简单,应该可以用 tesseract-ocr 识别,没有验证。

    changyan1.png

    评论

    登录成功后,进入后台。

    Request URL:http://changyan.kuaizhan.com/overview
    Request Method:GET
    Status Code:200 OK
    

    changyan2.png

    返回整个后台页面,通过页面元素找到评论位置,html 代码如下:

    <li class="right-sub-li "><a href="/audit/comments/TOAUDIT/1" style="text-indent:25px;">
        <span class="audit-number">2</span>
        <span style="text-indent:0px;">本站评论审核</span></a></li>
    

    通过r'<span class="audit-number">(\d+?)</span>'正则可以获取到待审核评论数,也就是新增评论,要的就是这个。

    评论统计接口

    获取评论信息接口,使用的是 ajax 访问(我这用不上,顺便分析下)。

    Request URL:http://changyan.kuaizhan.com/stat-data/comment
    Request Method:POST
    Status Code:200 OK
    
    Host:changyan.kuaizhan.com
    Origin:http://changyan.kuaizhan.com
    Referer:http://changyan.kuaizhan.com/overview
    User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.109 Safari/537.36
    X-Requested-With:XMLHttpRequest
    
    start:20170805
    end:20170811
    categoryId:0
    
    //响应
    {"sdk_user_data":{},"user_data":{"20170810":1},"sdk_cmt_data":{},"wap_cmt_data":{},"total_data":{"20170810":1,"20170811":0},"recommender_data":{},"wap_user_data":{},"cmt_data":{"20170810":1},"wap_reply_data":{},"flood_data":{"20170810":0,"20170811":0},"sdk_reply_data":{},"success":true}
    
    

    接口使用 ajax POST,发送参数可以选择时间区间。

    返回数据为 json,具体意义如下:

    cmt_data : {20170810: 1} //评论数据 1 条
    flood_data : {20170810: 0, 20170811: 0, 20170812: 0, 20170813: 0, 20170814: 0, 20170815: 0} //每天 flooddata 多少条
    recommender_data : {}
    sdk_cmt_data : {}
    sdk_reply_data : {}
    sdk_user_data : {}
    success : true //获取评论信息成功
    total_data : {20170810: 1, 20170811: 0, 20170812: 0, 20170813: 0, 20170814: 0, 20170815: 0} // 所有评论数据
    user_data : {20170810: 1} //用户数据 1 条
    wap_cmt_data : {} //手机评论数据
    wap_reply_data : {}
    wap_user_data : {}
    

    总结

    畅言登录简单,密码未做处理,安全性有待提高。

    接口不统一,评论数据需要正则匹配。

    不过为了实现自己的小功能,还是挺简单的!

    接口分析完,通过 py 实现以下接口。自动登录(不识别验证码,需要手动输入),然后每间隔 30 分钟访问一下后台页面,获取新的评论信息,如果有新的待评审数据,声音或弹窗提醒。

    完毕!

    博客原文: https://anhkgg.github.io/pylogin-changyan-login-analyze

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   995 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 22:37 · PVG 06:37 · LAX 15:37 · JFK 18:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.