繼微信機器人後,我又開發了微博機器人(附帶分享一點抓包經驗以及沙雕表情)

Hanson發表於2019-11-21

前言

繼我開發微信機器人後 https://github.com/Hanson/vbot (今天終於 3.1K star),我又閒著無聊開發了微博機器人 https://github.com/Hanson/weibot

繼微信機器人後,我又開發了微博機器人(附帶分享一點抓包經驗)

其實我本意並沒有打算動手開發,但無奈去找相關PHP原始碼時,有點讓我心塞

圖片

PHP 相關的包只有兩個!

而且!沒有一個是能夠自動登入的!其中一個還是在PHP呼叫JS去加密密碼!

換句話說就是你跑指令碼的時候還要使用一下瀏覽器,呼叫一下 JS 方法,把加密好的密碼複製黏貼到 PHP 指令碼里。

qBvGxVKioF.png!large

還沒見過這麼騷的操作,於是我掄起鍵盤開始新一輪復興 PHP 的道路。

YES!PHP CAN!!!

O3WEHxAHAd.png!large

正片

專案連結:https://github.com/Hanson/weibot (點進去麻煩點個 star,不然浪費了我用沙雕精神去寫的這篇文章)

目前實現的功能包括:

  • 搜尋
  • 刪除微博、微博評論、轉發、評論並轉發、轉發並評論(沒錯,跟上個一樣)
  • 我的關注、取消關注

一起參與

希望大家在點 star 的同時,也能一起參與開發,本人精力有限,盡力而為,因此也簡單寫了開發快速入門的方法

繼微信機器人後,我又開發了微博機器人(附帶分享一點抓包經驗)

一、登入

微博很多操作都需要登入,所以寫指令碼的時候先登入,讓 cookie 儲存起來 $weibo->login()

二、抓包

根據瀏覽器看到的請求,我們可以嘗試模擬一下

<?php
// $client 已經是一個帶 cookie 的“瀏覽器”客戶端了,根據實際情況進行 get 或者 post
$client = \Hanson\Weibot\Api\Api::getClient();

$response = $client->post('http://weibo.com', [
  'header' => [
  // 如果有特殊 header 需求   
  ],
  'form_params' => [
  // 各種請求引數
  ]
 ]);

// 得到的 response 有可能是頁面,也有可能是介面,自行處理
$data = json_decode($response->getBody()->getContents(), true);
  • 微博部分頁面是基於頁面渲染的模式
  • 微博的渲染並不按套路出牌,而是使用了 FM.view 的內部框架
  • 抓取內容需要先在 script 里正則匹配出來相關的 HTML。 例如:preg_match_all('/Pl_Official_MyProfileFeed__20.*html\":\"(.*)\"}/', $html, $matches);
  • 有部分地方是非同步介面的,例如下滑滾動分頁

最後

歡迎大家來微信一起吹吹水

HSx3wOiTA2.png!large

php吹水交流群 570769430

相關文章