1. 程式人生 > >pylogin系列之暢言登入評論介面分析

pylogin系列之暢言登入評論介面分析

概述

部落格使用了暢言做評論系統(多說、網易雲跟帖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識別,沒有驗證。

這裡寫圖片描述

評論

登入成功後,進入後臺。

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

這裡寫圖片描述

返回整個後臺頁面,通過頁面元素找到評論位置,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分鐘訪問一下後臺頁面,獲取新的評論資訊,如果有新的待評審資料,聲音或彈窗提醒。

完畢!