微信公眾號文章采集的入口--歷史消息頁(yè)解讀
優(yōu)采云 發(fā)布時(shí)間: 2020-08-11 23:03采集微信文章和采集網(wǎng)站內容一樣,都須要從一個(gè)列表頁(yè)開(kāi)始。而陌陌文章的列表頁(yè)就是公眾號里的查看歷史消息頁(yè)?,F在網(wǎng)路上的其它陌陌采集器有的是借助搜狗搜索,采集方式其實(shí)簡(jiǎn)單多了,但是內容不全。所以我們還是要從最標準最全面的公眾號歷史消息頁(yè)來(lái)采集。
因為陌陌的限制,我們能復制到的鏈接是不完整的,在瀏覽器中未能打開(kāi)聽(tīng)到內容。所以我們須要通過(guò)上一篇文章介紹的方式,使用anyproxy獲取到一個(gè)完整的微信公眾號歷史消息頁(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參數是公眾號的ID,uin是用戶(hù)的ID,目前來(lái)看uin是在所有公眾號之間惟一的。其它兩個(gè)重要參數key和pass_ticket是陌陌客戶(hù)端補充上的參數。
所以在這個(gè)地址失效之前我們是可以通過(guò)瀏覽器查看原文的方式獲取到歷史消息的文章列表的,如果希望自動(dòng)化剖析內容,也可以制做一個(gè)程序,將這個(gè)帶有仍未失效的key和pass_ticket的鏈接地址遞交進(jìn)去,再通過(guò)諸如php程序來(lái)獲取到文章列表。
最近有同事跟我說(shuō)他的采集目標就是單一的一個(gè)公眾號,我認為這樣就沒(méi)必要用上一篇文章寫(xiě)的批量采集的方式了。所以我們接下來(lái)瞧瞧歷史消息頁(yè)上面是如何獲取到文章列表的,通過(guò)剖析文章列表,就可以得到這個(gè)公眾號所有的內容鏈接地址,然后再采集內容就可以了。
在anyproxy的web界面中若果證書(shū)配置正確,是可以顯示出https的內容的。web界面的地址是localhost:8002其中localhost可以替換成自己的IP地址或域名。從列表中找到getmasssendmsg開(kāi)頭的記錄,點(diǎn)擊以后兩側都會(huì )顯示出這條記錄的詳情:
紅框部份就是完整的鏈接地址,將微信公眾平臺這個(gè)域名拼接在上面以后就可以在瀏覽器中打開(kāi)了。
然后將頁(yè)面向上拉,到html內容的結尾部份,我們可以看見(jiàn)一個(gè)json的變量就是歷史消息的文章列表:
我們將msgList的變量值拷貝下來(lái),用json低格工具剖析一下,我們就可以看見(jiàn)這個(gè)json是以下這個(gè)結構:
{
"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": "擦亮雙眼,遠離謠言。",
"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日,廣州亞運城綜合體育館,內附購票入口~",
"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": [ //最外層的鍵名;只出現一次,所有內容都被它包含。
{//這個(gè)大闊號之內是一條多圖文或單圖文消息,通俗的說(shuō)就是一天的群發(fā)都在這里
"app_msg_ext_info":{//圖文消息的擴展信息
"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": "子內容標題"
},
...//循環(huán)被省略
],
"source_url": "閱讀原文的地址",
"title": "頭條標題"
},
"comm_msg_info":{//圖文消息的基本信息
"datetime": '發(fā)布時(shí)間,值為unix時(shí)間戳',
"type": 49 //類(lèi)型為49的時(shí)候是圖文消息
}
},
...//循環(huán)被省略
]
在這里還要提及一點(diǎn)就是假如希望獲取到時(shí)間更久遠一些的歷史消息內容,就須要在手機或模擬器上將頁(yè)面向上拉,當拉到最里邊的時(shí)侯,微信將手動(dòng)讀取下一頁(yè)的內容。下一頁(yè)的鏈接地址和歷史消息頁(yè)的鏈接地址同樣是getmasssendmsg開(kāi)頭的地址。但是內容就是只有json了,沒(méi)有html了。直接解析json就可以了。
這時(shí)可以通過(guò)上一篇文章介紹的方式,使用anyproxy將msgList變量值正則匹配下來(lái)以后,異步遞交到服務(wù)器,再從服務(wù)器上使用php的json_decode解析json成為字段。然后遍歷循環(huán)鏈表。我們就可以得到每一篇文章的標題和鏈接地址。
如果只須要采集單一公眾號的內容,完全可以在每晚群發(fā)以后,通過(guò)anyproxy獲取到完整的帶有key和pass_ticket的鏈接地址。然后自己制做一個(gè)程序,手動(dòng)將地址遞交給自己的程序。使用諸如php這樣的語(yǔ)言來(lái)正則匹配到msgList,然后解析json。這樣就不用更改anyproxy的rule,也不需要制做一個(gè)采集隊列和跳轉頁(yè)面了。
現在我們早已可以通過(guò)公眾號的歷史消息得到文章列表了,在下一篇文章里我將介紹怎么按照歷史消息里的文章鏈接地址來(lái)獲取文章具體內容的方式。還有一些怎樣保存文章,封面圖片,還有全文檢索的經(jīng)驗。
如果你認為我那里寫(xiě)的不清楚,或者有不明白的地方,歡迎在下邊留言?;蛘呖謬樜⑿盘朿uijin,覺(jué)得好就點(diǎn)個(gè)贊。
持續更新,微信公眾號文章批量采集系統的建立
微信公眾號文章采集的入口--歷史消息頁(yè)解讀
微信公眾號文章頁(yè)的剖析與采集
提高微信公眾號文章采集效率,anyproxy進(jìn)階使用方式