0x00 前言:
前幾個星期在寫一個微博監控系統 可謂是一波三折啊 獲取到微博後因為一些字元編碼問題 導致心態爆炸開發中斷 但是就在昨天發現了另外一個微博的介面
一個手機微博的介面https://m.weibo.cn/ 經過一番測試後認為這個介面滿足我的要求 就繼續完成未完成的使命吧
0x01 分析:
這個介面直接訪問的話會有一個302跳轉到一個登陸介面
也就是說這裡需要先模擬登陸一下才可以訪問到微博
抓個包分析了一下
發現只要使用者名稱和密碼正確既傳回200且json部分的retcode會傳回20000000
少了驗證碼這一大坑 那模擬登陸就相當簡單啦
登陸完後訪問使用者主頁 例如:https://m.weibo.cn/u/3023940914
可以在審查元素的Network模組看到 這裡用了兩個xhr來載入使用者資訊及微博資訊
分別是
https://m.weibo.cn/api/container/getIndex?type=uid&value;=3023940914&containerid;=1005053023940914
https://m.weibo.cn/api/container/getIndex?type=uid&value;=3023940914&containerid;=1076033023940914
經過測試這個介面直接加上type和value引數訪問 就相當於第一個介面 不必加上containerid引數
而第二個介面的containerid引數則是透過第一個介面獲取的
獲取到第二個containerid引數訪問第二個介面就可以獲取到這個uid釋出的微博了
傳回的是json格式的資料 使用者的微博資訊都在cards串列裡每條資料的mblog陣列裡面 包括微博正文、圖片、來源與時間等
其中card_type標識的是微博型別 例如:文字微博 圖片微博 影片微博 轉發等 經過測試文字微博和圖片微博的card_type標識都一樣為9
這裡初步只開發監控文字和圖片微博的功能其實就是懶
0x02 開發
首先需要模擬登陸 後續的操作都需要基於登陸的格調來進行 也是需要在同個會話進行 可以使用requests.session() 方法來完成
程式碼片段:
登陸完成後就可以拼接使用者id訪問前面說的第一個介面了
訪問完後再拼接containerid引數獲取微博資訊的json資料
程式碼片段:
這裡把所有獲取到的微博的id存起來 後面繼續訪問是發現有新的微博id不在這個串列裡就證明是新釋出的微博
程式碼片段:
將這些方法封裝成了一個類 完整程式碼如下
寫了個一發現有新微博就發郵件提醒的功能 完整程式碼見Github地址 https://github.com/naiquann/WBMonitor
0x03 測試
執行程式碼
填寫完相關的登陸資訊及要監控的使用者的id後
這裡寫了一個心跳包 每三秒訪問一次看看有沒有新微博釋出
測試的時候這樣比較方便 要是拿來用的話可以酌情增加間隔時間
當有微博釋出的時候
大功告成啦 監控小姐姐的微博去嘍~
作者:奶權
來源:http://www.jianshu.com/p/9e7ba0a0a610
《Linux雲端計算及運維架構師高薪實戰班》2018年09月17日即將開課中,120天衝擊Linux運維年薪30萬,改變速約~~~~
*宣告:推送內容及圖片來源於網路,部分內容會有所改動,版權歸原作者所有,如來源資訊有誤或侵犯權益,請聯絡我們刪除或授權事宜。
– END –
更多Linux好文請點選【閱讀原文】哦
↓↓↓