PHP微信牆制作
微信牆
PHP
注意:由於微信官網不定時會更新,其中模擬登陸以及爬取數據的方式可能會失效,最近這12個月里,就有兩次更新導致此功能需要重寫。
思路
其實實現思路就是通過模擬登陸的方式登錄到微信平台,然后通過正則表達式獲取指定的內容放到數據庫里面,同時這個操作要在一個定時任務里面定時運行一次,當然避免麻煩,cookie應該放到緩存中以免單位時間內多次登陸微信需要輸入二維碼驗證的問題
關於項目中使用的工具問題
這種工程類博文中不會太涉及工具的使用以及庫的介紹,我會在最后給出各種庫的github地址或者官網地址方便大家預覽,如果有必要,我會在另起一些工具類&庫類的使用教程博客,這里就假定大家能熟練掌握編程語言,相關的IDE與常用三方庫
步驟
1,創建工程
這里我們使用PHPStorm,創建一個composer project項目,並選擇安裝Laravel,PHP請開啟Curl功能。
【注:composer是一個依賴管理工具,類似.NET里面的 nuget,java的maven一樣,上面三個是我做項目的時候最喜歡用的,其中composer還有一些拓展比如 Composer Checker,Satis等,不過我看國內好像用的不多。
Curl是用於抓取網頁 模擬HTTP請求使用,還可以使用第三方的庫比如Buzz和Requests,其中Requests相當輕量.】
2,文件操作
創建一個Util文件夾存放工具類,根目錄創建一個index.php 用作入口,模擬微信平台的請求除了cookie以外,還需要一個一個token值,為了方便下次使用,我們將他放到一個token.txt的文件里面,cookie存放在cookie.txt的文件里面,這里我們創建了FileUtil類來封裝讀寫文件操作
3,模擬HTTP操作
為了方便我們模擬登陸,先把Http請求抽象出來,作為一個類單獨存放在HttpUtil里面,網上有很多Curl的例子,這里我們依據此項目着重分析兩點
1,http 頭文件里面的Host,Referer,Origin都需要填寫,不填寫會返回-32這類的默認錯誤碼,具體的值可以通過google開發者工具查看如下圖 2,微信平台頁面經過zip壓縮,所以我們要在文件中加入下面的代碼,防止亂碼,同時注意微信平台頁面編碼為UTF-8,注意解析時候編碼設置
curl_setopt($curl, CURLOPT_ENCODING ,'gzip');
詳細代碼請直接在github上面查看即可,沒有復雜的邏輯
4,數據庫操作
通過HTTP獲取到數據后,我們需要和數據庫中的數據進行比對,如果有重復的就不需要再加進去了,這里我們使用WeiXinUtil類進行封裝操作
關於數據庫,這里我使用了mongodb,因為我在實驗室有完善的mongo環境,連接即可使用,為了方便大家替換成mysql等 我把數據操作封裝在了一個MongoUtil類里面,一個demo就沒有用接口什么的進行抽象,替換掉就可以了,至於mongo的安裝,配置,使用呢,可以去PHP官網里面的mongoDB的手冊中查看--->傳送門,你會喜歡上nosql的
下面是從微信爬來的數據

5,定時任務
作為演示,我在index.php里面使用的是一個死循環+sleep(5);函數這種簡單粗暴的方式,讓線程停止5秒在繼續爬取數據,不過最后部署在*nix上的話,還是用cron命令執行php腳本吧,windows 推薦用計划任務執行腳本,至於各種雲平台比如azure,阿里雲都是有計划任務的,扔進去更方便
下面是azure

下面是阿里ACE

下一篇
下一篇將我會用laravel擼一個管理平台出來,當然為了保證並發性我曾經還用的是py的tornado,也用過SignalR2做過比較,寫着玩嗎,不過這個教程就用PHP到底算了,其實這也是我為什么用mongodb的原因之一,py,C#下操作它也相當easy的,so各位老爺們對這個感興趣的話還可以先看看composer,那么砸個贊吧~~~明天見