参考自知乎专题微信公众号内容的批量采集与应用,作者:飯口組組長
原作者(飯口組組長)有一句话:我的方法来源于许多同行的分享精神,所以我也会延续这个精神,将我的成果分享出来。
这系列的文章也是为了延续这份分享精神!
该系列文章是根据知乎专题的教程一步一步实现过程,以及实现过程中踩过的一些坑。
关于原理介绍这里就不重复了,大家可以参考知乎专题。

代码完善前准备

原作者用的是php环境,这里有能力的可以尝试其他语言实现,python、java等都可以,不过原作者已经给出一部分的php代码,这里也采用php来实现。
所以要准备php环境,win下推荐使用wamp、xamp、phpstudy等懒人集成环境,因为之前电脑里存在wamp环境,就直接使用了。首先配置虚拟域名,不配也行。不过下文代码需要改成自己对应路径。配置虚拟域名可以教程可以参考我的另一篇文章php本地虚拟域名配置和端口的一些折腾。这里假设我配置的虚拟域名为hojun.weixin.com

修改rule_default.js代码

下面只给出部分例子,其他的做相同更改(若是没有配置虚拟域名,需要把域名改成路径访问即,如localhost/weixin/,改成http://localhost/weixin/getWxHis.php即可):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
HttpPost(ret[1],req.url,"/getMsgJson.php");
var http = require('http');
http.get('http://hojun.weixin.com/getWxHis.php', function(res) {
res.on('data', function(chunk){
callback(chunk+serverResData);
})
});
------------------
var options = {
method: "POST",
host: "hojun.weixin.com",//注意没有http://,这是服务器的域名。
port: 80,
path: path,//接收程序的路径和文件名
headers: {
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
"Content-Length": content.length
}
};

找到函数replaceRequestOption修改:

1
2
3
4
5
6
7
8
replaceRequestOption : function(req,option){
var newOption = option;
if(/google/i.test(newOption.headers.host)){
newOption.hostname = "www.baidu.com";
newOption.port = "80";
}
return newOption;
},

创建数据库及数据表

在完善php代码前,我们还需要先创建好数据库及数据表。好消息是組長已经给出了数据表的创建sql语句。修改了一些语法报错和关键字重复

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
微信公众号表
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`)
) ;
微信文章表
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`)
) ;
采集队列表
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`)
) ;

登录phpMyAdmin后台,语言可以设置为中文。
image
注意设置排序规则为utf8_general_ci。
image
接着一个一个执行sql生成数据表就行。
image
未完待续……To be Continued……

希望这篇文章能给你带来知识和乐趣,喜欢博主的文章可以加博主好友哦

有好的文章也可以向博主投稿哦