赓续更新,微信公多号文章批量采整体系的构建

作者:admin   发布时间:2020-05-21 21:37   浏览:
正文

特意期待行家能给予偏见和交流,迎接骚扰微信号cuijin。


片面微信号以/mp/getmasssendmsg起头的网址会显现302跳转,跳转到了/mp/profile_ext?action=home起头的地址。于是点开这个地址才能够望到内容。


1、一个微信客户端:能够是一台手机安置了微信的app,或者是用电脑中的安卓模拟器。经过实测ios的微信客户端在批量采集过程中歇业率高于安卓体系。为了降矮成本,吾操纵的是安卓模拟器。

吾从2014年就最先做微信公多号内容的批量采集,最最先的主意是为了做一个html5的垃圾内容网站。那时垃圾站采集到的微信公多号的内容很容易在公多号内里传播。那时批量采集稀奇益做,采集入口是公多号的历史消休页。这个入口到现在也是相通,只不过越来越难采集了。采集的手段也更新换代了益多个版本。后来在2015年html5垃圾站不做了,转向将采集现在标定位在本地讯休资讯类公多号,前端表现做成了app。于是就形成了一个能够自动采集公多号内容的讯休app。曾经吾一向不安有镇日微信技术升级之后无法采集内容了,吾的讯休app就失效了。但随着微信一连的技术升级,采集手段也随之升级,逆而使吾越来越有信念。只要公多号历史消休页存在,就能批量采集到内容。于是今天决定将采集手段清理之后写下来。吾的手段来源于很多同走的分享精神,于是吾也会一连这个精神,将吾的收获分享出来。

__biz是公多号的一个相通id的参数,每个公多号拥有一个微信的biz,现在极幼概率会发生公多号的biz会转折的事件;

function HttpPost(strurlpath) {//将json发送到服务器,str为json内容,url为历史消休页面地址,path是授与程序的路径和文件名
    var http = require('http');
    var data = {
        str: encodeURIComponent(str),
        url: encodeURIComponent(url)
    };
    content = require('querystring').stringify(data);
    var options = {
        method: "POST"
        host: "www.xxx.com"//仔细异国http://,这是服务器的域名。
        port: 80
        path: path//授与程序的路径和文件名
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
            "Content-Length": content.length
        }
    };
    var req = http.request(options function (res) {
        res.setEncoding('utf8');
        res.on('data' function (chunk) {
            console.log('BODY: '   chunk);
        });
    });
    req.on('error' function (e) {
        console.log('problem with request: '   e.message);
    });
    req.write(content);
    req.end();
}

上面就是rule规则修改的重要片面,必要将json内容发送到本身的服务器,还要从服务器获取到下一页的跳转地址。这就涉及到了四个php文件:getMsgJson.php、getMsgExt.php、getWxHis.php、getWxPost.php

http://mp.weixin.qq.com/mp/getmasssendmsg?__biz=MjM5MzczNjY2NA==#wechat_webview_type=1&wechat_redirect

=========2017年1月11日更新=========

3、生成RootCA,https必要这个证书:运走命令sudo anyproxy --root(windows能够不必要sudo);---------------2019年10月28日更新:这走命令已经失效!!!跳过这一步

1、安置 NodeJS

其中重要的参数是:__biz;uin=;key=;pass_ticket=;这4个参数。

本篇文章将赓续更新,你所望到的内容将保证在望到的时间是可用的。

步骤


3、本地代理服务器体系:现在操纵的手段是经过Anyproxy代理服务器将公多号历史消休页面中的文章列外发送到本身的服务器上。详细安置竖立手段在后面详细介绍。

<?
$str = $_POST['str'];
$url = $_POST['url'];//先获取到两个POST变量
//先针对url参数进走操作
parse_str(parse_url(htmlspecialchars_decode(urldecode($url)),PHP_URL_QUERY ),
澳门最新线上赌博游戏大全$query);//解析url地址
$biz = $query['__biz'];//得到公多号的biz
$sn = $query['sn'];
//再解析str变量
$json = json_decode($str澳门线上真人博彩官网true);//进走json_decode

//$sql = "select * from `文章外` where `biz`='".$biz."' and `content_url` like '%".$sn."%'" limit 0,
澳门网上开户网址1;
//根据biz和sn找到对答的文章

$read_num = $json['appmsgstat']['read_num'];//涉猎量
$like_num = $json['appmsgstat']['like_num'];//点赞量
//在这边同样根据sn在采集队列外中删除对答的文章,
澳门网上买球网址开户代外这篇文章能够移出采集队列了
//$sql = "delete from `队列外` where `content_url` like '%".$sn."%'" 
            
//然后将涉猎量和点赞量更新到文章外中。
exit(json_encode($msg));//能够表现在anyproxy的终端里
?>

3、getWxHis.php、getWxPost.php两个程序比较相通,一首介绍

二、代理服务器体系安置

在详细介绍这4个php文件之前,为了挑高采整体系性能和降矮歇业率,吾们还能够进走一些修改:

一、安置模拟器或操纵手机安置微信客户端app,申请微信小我号并登录到app上面。这一点就不过多介绍了,行家都会。

<?
$str = $_POST['str'];
$url = $_POST['url'];//先获取到两个POST变量

//先针对url参数进走操作
parse_str(parse_url(htmlspecialchars_decode(urldecode($url)),PHP_URL_QUERY ),$query);//解析url地址
$biz = $query['__biz'];//得到公多号的biz
//接下来进走以下操作
//从数据库中查询biz是否已经存在,倘若不存在则插入,这代外着吾们新添加了一个采集现在标公多号。

//再解析str变量
$json = json_decode($strtrue);//最先辈走json_decode
if(!$json){
    $json = json_decode(htmlspecialchars_decode($str),true);//倘若不走功,就添加一步htmlspecialchars_decode
}

foreach($json['list'] as $k=>$v){
            $type = $v['comm_msg_info']['type'];
            if($type==49){//type=49代外是图文消休
                $content_url = str_replace("\\" "" htmlspecialchars_decode($v['app_msg_ext_info']['content_url']));//获得图文消休的链接地址
                $is_multi = $v['app_msg_ext_info']['is_multi'];//是否是多图文消休
                $datetime = $v['comm_msg_info']['datetime'];//图文消休发送时间
                //在这边将图文消休链接地址插入到采集队列库中(队列库将在后文介绍,重要主意是竖立一个批量采集队列,综合新闻另一个程序将根据队列安排下一个采集的公多号或者文章内容)
                //在这边根据$content_url从数据库中判定一下是否重复
                if('数据库中不存在相通的$content_url') {
                    $fileid = $v['app_msg_ext_info']['fileid'];//一个微信给的id
                    $title = $v['app_msg_ext_info']['title'];//文章标题
                    $title_encode = urlencode(str_replace("&nbsp;" "" $title));//提出将标题进走编码,云云就能够存储emoji稀奇符号了
                    $digest = $v['app_msg_ext_info']['digest'];//文章择要
                    $source_url = str_replace("\\" "" htmlspecialchars_decode($v['app_msg_ext_info']['source_url']));//涉猎原文的链接
                    $cover = str_replace("\\" "" htmlspecialchars_decode($v['app_msg_ext_info']['cover']));//封面图片

                    $is_top = 1;//标记一下是头条内容
                    //现在存入数据库
                    echo "头条标题:".$title.$lastId."\n";//这个echo能够表现在anyproxy的终端里
                }
                if($is_multi==1){//倘若是多图文消休
                    foreach($v['app_msg_ext_info']['multi_app_msg_item_list'] as $kk=>$vv){//循环后面的图文消休
                        $content_url = str_replace("\\"""htmlspecialchars_decode($vv['content_url']));//图文消休链接地址
                        //这边再次根据$content_url判定一下数据库中是否重复以免出错
                        if('数据库中不存在相通的$content_url'){
                            //在这边将图文消休链接地址插入到采集队列库中(队列库将在后文介绍,重要主意是竖立一个批量采集队列,另一个程序将根据队列安排下一个采集的公多号或者文章内容)
                            $title = $vv['title'];//文章标题
                            $fileid = $vv['fileid'];//一个微信给的id
                            $title_encode = urlencode(str_replace("&nbsp;"""$title));//提出将标题进走编码,云云就能够存储emoji稀奇符号了
                            $digest = htmlspecialchars($vv['digest']);//文章择要
                            $source_url = str_replace("\\"""htmlspecialchars_decode($vv['source_url']));//涉猎原文的链接
                            //$cover = getCover(str_replace("\\","",htmlspecialchars_decode($vv['cover'])));
                            $cover = str_replace("\\"""htmlspecialchars_decode($vv['cover']));//封面图片
                            //现在存入数据库
                            echo "标题:".$title.$lastId."\n";
                        }

                    }
                }
            }
        }
?>

再次强调代码只是原理,其中一片面注视的代码要本身编写。


一、找到配置文件:

replaceServerResDataAsync: function(reqresserverResDatacallback){
        if(/mp\/getmasssendmsg/i.test(req.url)){//当链接地址为公多号历史消休页面时(第一栽页面方法)
            if(serverResData.toString() !== ""){
                try {//防止报错退出程序
                    var reg = /msgList = (.*?);/;//定义历史消休正则匹配规则
                    var ret = reg.exec(serverResData.toString());//转换变量为string
                    HttpPost(ret[1],req.url"getMsgJson.php");//这个函数是后文定义的,将匹配到的历史消休json发送到本身的服务器
                    var http = require('http');
                    http.get('http://xxx.com/getWxHis.php' function(res) {//这个地址是本身服务器上的一个程序,主意是为了获取到下一个链接地址,将地址放在一个js脚本中,将页面自动跳转到下一页。后文将介绍getWxHis.php的原理。
                        res.on('data' function(chunk){
                        callback(chunk serverResData);//将返回的代码插入到历史消休页面中,并返回表现出来
                        })
                    });
                }catch(e){//倘若上面的正则异国匹配到,那么这个页面内容能够是公多号历史消休页面向下翻动的第二页,由于历史消休第一页是html格式的,第二页就是json格式的。
                     try {
                        var json = JSON.parse(serverResData.toString());
                        if (json.general_msg_list != []) {
                        HttpPost(json.general_msg_listreq.url"getMsgJson.php");//这个函数和上面的相通是后文定义的,将第二页历史消休的json发送到本身的服务器
                        }
                     }catch(e){
                       console.log(e);//舛讹捕捉
                     }
                    callback(serverResData);//直接返回第二页json内容
                }
            }
        }else if(/mp\/profile_ext\?action=home/i.test(req.url)){//当链接地址为公多号历史消休页面时(第二栽页面方法)
            try {
                var reg = /var msgList = \'(.*?)\';/;//定义历史消休正则匹配规则(和第一栽页面方法的正则分别)
                var ret = reg.exec(serverResData.toString());//转换变量为string
                HttpPost(ret[1],req.url"getMsgJson.php");//这个函数是后文定义的,将匹配到的历史消休json发送到本身的服务器
                var http = require('http');
                http.get('http://xxx.com/getWxHis' function(res) {//这个地址是本身服务器上的一个程序,主意是为了获取到下一个链接地址,将地址放在一个js脚本中,将页面自动跳转到下一页。后文将介绍getWxHis.php的原理。
                    res.on('data' function(chunk){
                        callback(chunk serverResData);//将返回的代码插入到历史消休页面中,并返回表现出来
                    })
                });
            }catch(e){
                callback(serverResData);
            }
        }else if(/mp\/profile_ext\?action=getmsg/i.test(req.url)){//第二栽页面外现方法的向下翻页后的json
            try {
                var json = JSON.parse(serverResData.toString());
                if (json.general_msg_list != []) {
                    HttpPost(json.general_msg_listreq.url"getMsgJson.php");//这个函数和上面的相通是后文定义的,将第二页历史消休的json发送到本身的服务器
                }
            }catch(e){
                console.log(e);
            }
            callback(serverResData);
        }else if(/mp\/getappmsgext/i.test(req.url)){//当链接地址为公多号文章涉猎量和点赞量时
            try {
                HttpPost(serverResDatareq.url"getMsgExt.php");//函数是后文定义的,功能是将文章涉猎量点赞量的json发送到服务器
            }catch(e){

            }
            callback(serverResData);
        }else if(/s\?__biz/i.test(req.url) ,,真人斗地主免费下载

Powered by ag捕鱼游戏投注平台 @2018 RSS地图 html地图