微信爬取过程中参数分析
来源:互联网 发布:php系统案例 编辑:程序博客网 时间:2024/06/12 00:04
一:找到永久的历史信息列表:http://mp.weixin.qq.com/mp/getmasssendmsg?__biz=XXX==#wechat_redirect
将XXX==替换为自己的BIZ
二:4个参数可以唯一确定一篇微信文章:
__biz可以认为是微信公众平台对外公布的公众帐号的唯一id
mid是图文消息id
idx是发布的第几条消息(1就代表是头条位置消息)
sn是一个随机加密串(对于一篇图文消息是唯一的,如果你想问这个sn的生成规则是什么或者怎么破解,你基本上只能从微信公众平台开发团队才能得到答案)熬伪装
三:伪装微信客户端登陆,取历史信息页时,最重要4个参数:__biz;uin=;key=;pass_ticket=;这4个参数。【有时候需要手机配合】
四:取得general_msg_list 后,分析各个字段
五:采集程序原型
建立表:
采集:
1、getMsgJson.php:这个程序负责接收历史消息的json并解析后存入数据库
2、getMsgExt.php获取文章阅读量和点赞量的程序
mid是图文消息id
idx是发布的第几条消息(1就代表是头条位置消息)
sn是一个随机加密串(对于一篇图文消息是唯一的,如果你想问这个sn的生成规则是什么或者怎么破解,你基本上只能从微信公众平台开发团队才能得到答案)熬伪装
三:伪装微信客户端登陆,取历史信息页时,最重要4个参数:__biz;uin=;key=;pass_ticket=;这4个参数。【有时候需要手机配合】
四:取得general_msg_list 后,分析各个字段
"list": [ //最外层的键名;只出现一次,所有内容都被它包含。 {//这个大阔号之内是一条多图文或单图文消息,通俗的说就是一天的群发都在这里 "app_msg_ext_info":{//图文消息的扩展信息 "content_url": "图文消息的链接地址", "cover": "封面图片", "digest": "摘要", "is_multi": "是否多图文,值为1和0", "multi_app_msg_item_list": [//这里面包含的是从第二条开始的图文消息,如果is_multi=0,这里将为空 { "content_url": "图文消息的链接地址", "cover": "封面图片", "digest": ""摘要"", "source_url": "阅读原文的地址", "title": "子内容标题" }, ...//循环被省略 ], "source_url": "阅读原文的地址", "title": "头条标题" }, "comm_msg_info":{//图文消息的基本信息 "datetime": '发布时间,值为unix时间戳', "type": 49 //类型为49的时候是图文消息 } }, ...//循环被省略]
五:采集程序原型
建立表:
1、微信公众号表
CREATE TABLE `weixin` ( `id` int(11) NOT NULL AUTO_INCREMENT, `biz` varchar(255) DEFAULT '' COMMENT '公众号唯一标识biz', `collect` int(11) DEFAULT '1' COMMENT '记录采集时间的时间戳', PRIMARY KEY (`id`)) ;
2、微信文章表
CREATE TABLE `post` ( `id` int(11) NOT NULL AUTO_INCREMENT, `biz` varchar(255) CHARACTER SET utf8 NOT NULL COMMENT '文章对应的公众号biz', `field_id` int(11) NOT NULL COMMENT '微信定义的一个id,每条文章唯一', `title` varchar(255) NOT NULL DEFAULT '' COMMENT '文章标题', `title_encode` text CHARACTER SET utf8 NOT NULL COMMENT '文章编码,防止文章出现emoji', `digest` varchar(500) NOT NULL DEFAULT '' COMMENT '文章摘要', `content_url` varchar(500) CHARACTER SET utf8 NOT NULL COMMENT '文章地址', `source_url` varchar(500) CHARACTER SET utf8 NOT NULL COMMENT '阅读原文地址', `cover` varchar(500) CHARACTER SET utf8 NOT NULL COMMENT '封面图片', `is_multi` int(11) NOT NULL COMMENT '是否多图文', `is_top` int(11) NOT NULL COMMENT '是否头条', `datetime` int(11) NOT NULL COMMENT '文章时间戳', `readNum` int(11) NOT NULL DEFAULT '1' COMMENT '文章阅读量', `likeNum` int(11) NOT NULL DEFAULT '0' COMMENT '文章点赞量', PRIMARY KEY (`id`)) ;
3、采集队列表
CREATE TABLE `tmplist` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `content_url` varchar(255) DEFAULT NULL COMMENT '文章地址', `load` int(11) DEFAULT '0' COMMENT '读取中标记', PRIMARY KEY (`id`), UNIQUE KEY `content_url` (`content_url`)) ;
采集:
1、getMsgJson.php:这个程序负责接收历史消息的json并解析后存入数据库
<?$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($str,true);//首先进行json_decodeif(!$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(" ", "", $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(" ","",$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"; } } } } }?>
2、getMsgExt.php获取文章阅读量和点赞量的程序
?$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的终端里?>
0 0
- 微信爬取过程中参数分析
- View的add过程,布局参数分析
- [IMX6Q]LCD参数匹配过程分析
- [IMX6Q]LCD参数匹配过程分析
- [IMX6Q]LCD参数匹配过程分析
- IMX6 LCD 参数匹配过程分析
- Flex中Alert参数分析
- Flex中Alert参数分析
- 驱动中ioctl参数分析
- .net中windows form参数传递过程
- asp 中调用存储过程参数说明
- 存储过程中IN 参数的使用
- 存储过程中执行参数SQL语句
- 存储过程中使用命名参数
- 存储过程中游标带参数
- .net中windows form参数传递过程
- SQL SERVER中存储过程参数问题
- Jenkins参数化构建过程中参数的传递
- 【C++心路历程24】龙珠【dp加单调队列】
- JVM中如何判断对象是否死亡
- Dockerfile文件中的CMD和ENTRYPOINT指令差异对比
- memcpy
- 搭建hibernate环境
- 微信爬取过程中参数分析
- 生成联系人二维码
- JQuery给iframe添加html
- Linux运维第十九讲
- Ext2文件系统
- PAT-A1098
- Get&Post
- ubuntu下使用qemu安装虚拟机并配置桥接网络
- linux系统下载地址