如何采集微信公眾號(hào)歷史消息頁(yè)
采集微信文章和采集網(wǎng)站內(nèi)容一樣,都需要從一個(gè)列表頁(yè)開(kāi)始。而微信文章的列表頁(yè)就是公眾號(hào)里的查看歷史消息頁(yè)?,F(xiàn)在網(wǎng)絡(luò)上的其它微信采集器有的是利用搜狗搜索,采集方式雖然簡(jiǎn)單多了,但是內(nèi)容不全。所以我們還是要從最標(biāo)準(zhǔn)最全面的公眾號(hào)歷史消息頁(yè)來(lái)采集。
因?yàn)槲⑿诺南拗?,我們能?fù)制到的鏈接是不完整的,在瀏覽器中無(wú)法打開(kāi)看到內(nèi)容。所以我們需要通過(guò)上一篇文章介紹的方法,使用anyproxy獲取到一個(gè)完整的微信公眾號(hào)歷史消息頁(yè)面的鏈接地址。
http://mp.weixin.qq.com/mp/getmasssendmsg?__biz=MjM5NDAwMTA2MA==&uin=NzM4MTk1ODgx&key=bf9387c4d02682e186a298a18276d8e0555e3ab51d81ca46de339e6082eb767343bef610edd80c9e1bfda66c2b62751511f7cc091a33a029709e94f0d1604e11220fc099a27b2e2d29db75cc0849d4bf&devicetype=android-17&version=26031c34&lang=zh_CN&nettype=WIFI&ascene=3&pass_ticket=Iox5ZdpRhrSxGYEeopVJwTBP7kZj51GYyEL24AT5Zyx%2BBoEMdPDBtOun1F%2F9ENSz&wx_header=1
前一篇文章提到過(guò),biz參數(shù)是公眾號(hào)的ID,uin是用戶(hù)的ID,目前來(lái)看uin是在所有公眾號(hào)之間唯一的。其它兩個(gè)重要參數(shù)key和pass_ticket是微信客戶(hù)端補(bǔ)充上的參數(shù)。
所以在這個(gè)地址失效之前我們是可以通過(guò)瀏覽器查看原文的方法獲取到歷史消息的文章列表的,如果希望自動(dòng)化分析內(nèi)容,也可以制作一個(gè)程序,將這個(gè)帶有尚未失效的key和pass_ticket的鏈接地址提交進(jìn)去,再通過(guò)例如php程序來(lái)獲取到文章列表。
最近有朋友跟我說(shuō)他的采集目標(biāo)就是單一的一個(gè)公眾號(hào),我覺(jué)得這樣就沒(méi)必要用上一篇文章寫(xiě)的批量采集的方法了。所以我們接下來(lái)看看歷史消息頁(yè)里面是怎樣獲取到文章列表的,通過(guò)分析文章列表,就可以得到這個(gè)公眾號(hào)所有的內(nèi)容鏈接地址,然后再采集內(nèi)容就可以了。
在anyproxy的web界面中如果證書(shū)配置正確,是可以顯示出https的內(nèi)容的。web界面的地址是http://localhost:8002 其中l(wèi)ocalhost可以替換成自己的IP地址或域名。從列表中找到getmasssendmsg開(kāi)頭的記錄,點(diǎn)擊之后右側(cè)就會(huì)顯示出這條記錄的詳情:
紅框部分就是完整的鏈接地址,將微信公眾平臺(tái)這個(gè)域名拼接在前面之后就可以在瀏覽器中打開(kāi)了。
然后將頁(yè)面向下拉,到html內(nèi)容的結(jié)尾部分,我們可以看到一個(gè)json的變量就是歷史消息的文章列表:
我們將msgList的變量值拷貝出來(lái),用json格式化工具分析一下,我們就可以看到這個(gè)json是以下這個(gè)結(jié)構(gòu):
{ "list": [ { "app_msg_ext_info": { "author": "", "content": "", "content_url": "http://mp.weixin.qq.com/s?__biz=MzA5MzEzNDg3MQ==&mid=2652767427&idx=1&sn=37da0d7208283bf90e9a4a536e0af0ea&chksm=8b882dbbbcffa4ad2f0b8a141cc988d16bace564274018e68e5c53ee6f354f8ad56c9b98bade&scene=4#wechat_redirect", "copyright_stat": 100, "cover": "http://mmbiz.qpic.cn/mmbiz/MofBAcBsJ6X0xGrQ2XK5yQjzwb2eswxkRNBTgLtcqGziaFqwibzvtZAHCDkMeJU1fGZHpjoeibanPJ8rziaq68Akkg/0?wx_fmt=jpeg", "digest": "擦亮雙眼,遠(yuǎn)離謠言。", "fileid": 505283695, "is_multi": 1, "multi_app_msg_item_list": [ { "author": "", "content": "", "content_url": "http://mp.weixin.qq.com/s?__biz=MzA5MzEzNDg3MQ==&mid=2652767427&idx=2&sn=449ef1a874a37fed2429e14f724b56ef&chksm=8b882dbbbcffa4ade48a7932cda4263687e34fca8ea3a5a6233d2589d448b9f6130d3890ce93&scene=4#wechat_redirect", "copyright_stat": 100, "cover": "http://mmbiz.qpic.cn/mmbiz_png/MofBAcBsJ6XyaIn0qEDSSicBUBZbMYHYrhibia89ZnksCsUiaia2TLI1fyqjclibGa1hw3icP6oXeSpaWMjiabaghHl7yw/0?wx_fmt=png", "digest": "12月28日,廣州亞運(yùn)城綜合體育館,內(nèi)附購(gòu)票入口~", "fileid": 0, "source_url": "http://wechat.show.wepiao.com/detail/ff764b0731b7465db03b56b998e1f2b8?detailReferrer=1&from=groupmessage&isappinstalled=0", "title": "2017微信公開(kāi)課Pro版即將召開(kāi)" }, ...//循環(huán)被省略 ], "source_url": "", "subtype": 9, "title": "謠言熱榜 | 十一月朋友圈十大謠言" }, "comm_msg_info": { "content": "", "datetime": 1480933315, "fakeid": "3093134871", "id": 1000000010, "status": 2, "type": 49 //類(lèi)型為49的時(shí)候是圖文消息 } }, ...//循環(huán)被省略 ] }
簡(jiǎn)要的分析一下這個(gè)json(這里只介紹一些重要的信息,其它的被省略):
"list": [ //最外層的鍵名;只出現(xiàn)一次,所有內(nèi)容都被它包含。 {//這個(gè)大闊號(hào)之內(nèi)是一條多圖文或單圖文消息,通俗的說(shuō)就是一天的群發(fā)都在這里 "app_msg_ext_info":{//圖文消息的擴(kuò)展信息 "content_url": "圖文消息的鏈接地址", "cover": "封面圖片", "digest": "摘要", "is_multi": "是否多圖文,值為1和0", "multi_app_msg_item_list": [//這里面包含的是從第二條開(kāi)始的圖文消息,如果is_multi=0,這里將為空 { "content_url": "圖文消息的鏈接地址", "cover": "封面圖片", "digest": ""摘要"", "source_url": "閱讀原文的地址", "title": "子內(nèi)容標(biāo)題" }, ...//循環(huán)被省略 ], "source_url": "閱讀原文的地址", "title": "頭條標(biāo)題" }, "comm_msg_info":{//圖文消息的基本信息 "datetime": '發(fā)布時(shí)間,值為unix時(shí)間戳', "type": 49 //類(lèi)型為49的時(shí)候是圖文消息 } }, ...//循環(huán)被省略 ]
在這里還要提到一點(diǎn)就是如果希望獲取到時(shí)間更久遠(yuǎn)一些的歷史消息內(nèi)容,就需要在手機(jī)或模擬器中將頁(yè)面向下拉,當(dāng)拉到最底下的時(shí)候,微信將自動(dòng)讀取下一頁(yè)的內(nèi)容。下一頁(yè)的鏈接地址和歷史消息頁(yè)的鏈接地址同樣是getmasssendmsg開(kāi)頭的地址。但是內(nèi)容就是只有json了,沒(méi)有html了。直接解析json就可以了。
這時(shí)可以通過(guò)上一篇文章介紹的方法,使用anyproxy將msgList變量值正則匹配出來(lái)之后,異步提交到服務(wù)器,再?gòu)姆?wù)器上使用php的json_decode解析json成為數(shù)組。然后遍歷循環(huán)數(shù)組。我們就可以得到每一篇文章的標(biāo)題和鏈接地址。
如果只需要采集單一公眾號(hào)的內(nèi)容,完全可以在每天群發(fā)之后,通過(guò)anyproxy獲取到完整的帶有key和pass_ticket的鏈接地址。然后自己制作一個(gè)程序,手動(dòng)將地址提交給自己的程序。使用例如php這樣的語(yǔ)言來(lái)正則匹配到msgList,然后解析json。這樣就不用修改anyproxy的rule,也不需要制作一個(gè)采集隊(duì)列和跳轉(zhuǎn)頁(yè)面了。
相關(guān)文章
Python中使用django form表單驗(yàn)證的方法
這篇文章主要介紹了Python中使用django form表單驗(yàn)證的方法,需要的朋友可以參考下2017-01-01php處理?yè)屬?gòu)類(lèi)功能的高并發(fā)請(qǐng)求
這篇文章主要為大家詳細(xì)介紹了php處理?yè)屬?gòu)類(lèi)功能的高并發(fā)請(qǐng)求,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-02-02ThinkPHP 3.2.2實(shí)現(xiàn)事務(wù)操作的方法
這篇文章主要介紹了ThinkPHP 3.2.2實(shí)現(xiàn)事務(wù)操作的方法,簡(jiǎn)單分析了thinkPHP中事務(wù)的啟動(dòng)、提交、回滾等操作方法并給出了完整的事務(wù)提交與回滾操作實(shí)例,需要的朋友可以參考下2017-05-05Laravel框架實(shí)現(xiàn)的rbac權(quán)限管理操作示例
這篇文章主要介紹了Laravel框架實(shí)現(xiàn)的rbac權(quán)限管理操作,結(jié)合實(shí)例形式分析了Laravel框架權(quán)限控制rbac相關(guān)數(shù)據(jù)庫(kù)創(chuàng)建、讀寫(xiě)及權(quán)限判斷等操作技巧,需要的朋友可以參考下2019-01-01laravel Model 執(zhí)行事務(wù)的實(shí)現(xiàn)
今天小編就為大家分享一篇laravel Model 執(zhí)行事務(wù)的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-10-10Laravel5框架自定義錯(cuò)誤頁(yè)面配置操作示例
這篇文章主要介紹了Laravel5框架自定義錯(cuò)誤頁(yè)面配置操作,結(jié)合具體實(shí)例形式分析了Laravel5自定義錯(cuò)誤頁(yè)面的原理、操作步驟及相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2019-04-04Thinkphp自定義美化success和error提示跳轉(zhuǎn)頁(yè)面代碼實(shí)例
這篇文章主要介紹了Thinkphp自定義美化success和error提示跳轉(zhuǎn)頁(yè)面代碼實(shí)例,有需要的同學(xué)可以直接借鑒文中代碼,可以增加頁(yè)面的美觀和友好程度2021-03-03