PHP微信墙制作
微信墙
PHP
注意:由于微信官网不定时会更新,其中模拟登陆以及爬取数据的方式可能会失效,最近这12个月里,就有两次更新导致此功能需要重写。
思路
其实实现思路就是通过模拟登陆的方式登录到微信平台,然后通过正则表达式获取指定的内容放到数据库里面,同时这个操作要在一个定时任务里面定时运行一次,当然避免麻烦,cookie应该放到缓存中以免单位时间内多次登陆微信需要输入二维码验证的问题
关于项目中使用的工具问题
这种工程类博文中不会太涉及工具的使用以及库的介绍,我会在最后给出各种库的github地址或者官网地址方便大家预览,如果有必要,我会在另起一些工具类&库类的使用教程博客,这里就假定大家能熟练掌握编程语言,相关的IDE与常用三方库
步骤
1,创建工程
这里我们使用PHPStorm,创建一个composer project项目,并选择安装Laravel,PHP请开启Curl功能。
【注:composer是一个依赖管理工具,类似.NET里面的 nuget,java的maven一样,上面三个是我做项目的时候最喜欢用的,其中composer还有一些拓展比如 Composer Checker,Satis等,不过我看国内好像用的不多。
Curl是用于抓取网页 模拟HTTP请求使用,还可以使用第三方的库比如Buzz和Requests,其中Requests相当轻量.】
2,文件操作
创建一个Util文件夹存放工具类,根目录创建一个index.php 用作入口,模拟微信平台的请求除了cookie以外,还需要一个一个token值,为了方便下次使用,我们将他放到一个token.txt的文件里面,cookie存放在cookie.txt的文件里面,这里我们创建了FileUtil类来封装读写文件操作
3,模拟HTTP操作
为了方便我们模拟登陆,先把Http请求抽象出来,作为一个类单独存放在HttpUtil里面,网上有很多Curl的例子,这里我们依据此项目着重分析两点
1,http 头文件里面的Host,Referer,Origin都需要填写,不填写会返回-32这类的默认错误码,具体的值可以通过google开发者工具查看如下图2,微信平台页面经过zip压缩,所以我们要在文件中加入下面的代码,防止乱码,同时注意微信平台页面编码为UTF-8,注意解析时候编码设置
curl_setopt($curl, CURLOPT_ENCODING ,'gzip');
详细代码请直接在github上面查看即可,没有复杂的逻辑
4,数据库操作
通过HTTP获取到数据后,我们需要和数据库中的数据进行比对,如果有重复的就不需要再加进去了,这里我们使用WeiXinUtil类进行封装操作
关于数据库,这里我使用了mongodb,因为我在实验室有完善的mongo环境,连接即可使用,为了方便大家替换成mysql等 我把数据操作封装在了一个MongoUtil类里面,一个demo就没有用接口什么的进行抽象,替换掉就可以了,至于mongo的安装,配置,使用呢,可以去PHP官网里面的mongoDB的手册中查看--->传送门,你会喜欢上nosql的
下面是从微信爬来的数据
5,定时任务
作为演示,我在index.php里面使用的是一个死循环+sleep(5);函数这种简单粗暴的方式,让线程停止5秒在继续爬取数据,不过最后部署在*nix上的话,还是用cron命令执行php脚本吧,windows 推荐用计划任务执行脚本,至于各种云平台比如azure,阿里云都是有计划任务的,扔进去更方便
下面是azure
下面是阿里ACE
下一篇
下一篇将我会用laravel撸一个管理平台出来,当然为了保证并发性我曾经还用的是py的tornado,也用过SignalR2做过比较,写着玩吗,不过这个教程就用PHP到底算了,其实这也是我为什么用mongodb的原因之一,py,C#下操作它也相当easy的,so各位老爷们对这个感兴趣的话还可以先看看composer,那么砸个赞吧~~~明天见
PHP微信墙制作的更多相关文章
- PHP微信墙制作,开源
PHP微信墙制作 微信墙 PHP 注意:由于微信官网不定时会更新,其中模拟登陆以及爬取数据的方式可能会失效,最近这12个月里,就有两次更新导致此功能需要重写. 服务端源码->github地址传送 ...
- HTML5服务器端推送事件 解决PHP微信墙推送问题
问题描述 以前的文章中<PHP微信墙制作,开源>已经用PHP搭建了一个微信墙获取信息的服务器,然后我就在想推送技术应该怎么解决,上一篇已经用了.NET 的signalr做了一个微信墙,PH ...
- signalR制作微信墙 开源
微信墙 上一篇文章中已经用PHP搭建了一个微信墙获取信息的服务器,我这里使用微软的signalr搭建一个客户端,signalr是一个为开发者开发实时应用的 一个库文件,支持windows server ...
- 使用R语言将微信记录制作成词云(简洁)--情人节奥义
一.导出并读入微信聊天记录 参照百度的方法,使用同步助手.安装同步助手--连接手机(安卓苹果均可)--点击"其他功能"--点击微信图标即可进入聊天记录导出界面(非常简单). ...
- 教你用Python制作微信好友背景墙
目录: 0 引言 1 环境 2 代码实现 3 后记 0 引言 前段时间,微信朋友圈开始出现了一种晒照片新形式,微信好友墙,即在一张大图片中展示出自己的所有微信好友的头像. 效果如下图,出于隐私考虑,这 ...
- PS基础教程[1]如何制作微信泡泡
PS是很多朋友都很喜欢额一款图像处理软件,我们可以使用PS制作很多的效果,本系列经验教程的起源就来源于知道中这位朋友问的微信泡泡如何使用,下面就来简单的分享一下. 微信泡泡制作方法 有很多的方法可以制 ...
- 【Demo】微信上墙
先看看微信墙效果图 使用简单说明 关于微信公众号 回复 "上墙",点击授权文章进行授权 回复"#上墙内容" 即可发表上墙消息了 查看微信墙列表,点击这里 原文地 ...
- 《小猪CMS(PigCms)多用户微信营销服务平台系统V6.1完美破解至尊版带微用户管理CRM+微信支付》
<小猪CMS(PigCms)多用户微信营销服务平台系统V6.1完美破解至尊版带微用户管理CRM+微信支付> 之前发布了不少微赢的多用户微信网站源码,今天为我的小伙伴们准备的是功能非常强悍, ...
- 微信公众平台创建自定义菜单的PHP代码
授人以鱼不如授人以渔.在方倍工作室上问了一下,创建自定义菜单的代码多少钱,一张口就一百,好吧,那我就给你们一人省一百块钱吧,你们说该如何谢谢我?事先说明一下啊,你的PHP版本要高于4.0.2才支持cU ...
随机推荐
- netsh winsock reset 命令并回车
1. Win+R 打开运行窗口,输入 CMD 并确认打开命令行窗口.2. 在命令行窗口输入 netsh winsock reset 命令并回车,待提示重启计算机时,重启计算机
- 详解SHOW PROCESSLIST显示哪些线程正在运行列出的状态
SHOW PROCESSLIST显示哪些线程正在运行.您也可以使用mysqladmin processlist语句得到此信息.如果您有SUPER权限,您可以看到所有线程.否则,您只能看到您自己的线程( ...
- UVALIVE 3891 The Teacher's Side of Math
One of the tasks students routinely carry out in their mathematics classes is to solve a polynomial ...
- 【转】Spring MVC 解读——<mvc:annotation-driven/>
转载自:http://my.oschina.net/HeliosFly/blog/205343 一.AnnotationDrivenBeanDefinitionParser 通常如果我们希望通过注解的 ...
- delphi string,pchar,char的比较
来自:http://blog.163.com/kat_/blog/static/189284269201152513331999/ ---------------------------------- ...
- THULAC:一个高效的中文词法分析工具包(z'z)
网址:http://thulac.thunlp.org/ THULAC(THU Lexical Analyzer for Chinese)由清华大学自然语言处理与社会人文计算实验室研制推出的一套中文词 ...
- hdu 1513(滚动数组)
Palindrome Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
- 从dao层查出的数据到页面时数值都是零的异常
异常问题: IllegalArgumentException: argument type mismatch at cn.tedu.utils.BeanListHandler.handle(BeanL ...
- POJ 2251 Dungeon Master【三维BFS模板】
Dungeon Master Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 45743 Accepted: 17256 Desc ...
- 哦这。。!C语言scanf输入的坑爹之处
一. 今天闲来无事,跑去A题,本想3sA了poj1004,结果搞了10分钟,最令人困惑的问题就是为什么定义了double类型的变量,但是用scanf输入的时候标识符用%f的话,输入并不能完成,也就是说 ...