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 ...
随机推荐
- servlet+forward和direct区别
Servlet:是用于 java 编写的服务器端程序,其使用 java servlet API,当客户机发送请求到服务器时,服务器可以将请求信息发送给 servlet,并让 servlet 建立起服务 ...
- 判断re模块的布尔值
示例: #!/usr/bin/python # coding:utf-8 # Author:Guido's admirers import re import time class card(obje ...
- mysql管理和基本操作
进去mysql:mysql –uroot –p 重启数据库:[root@nanaLinux ~]# /etc/init.d/mysqld restart 1.Mysql忘记root密码 // 查看my ...
- 串行写队列的MYSQL大文本参数
public void AsyncWriteDataBase() { var spName = ""; while (true) { try { var jsonText = Re ...
- ibatis(sqlmap)中使用in语句的方法
对于快速学习ibatis而没有过多时间去查阅资料的朋友,比如我,可能有些东西不一定能在快速上手的文档中涉猎到.今天就碰到一个问题,要在分页 查询的同时进行where语句删选操作.由于表记录比较少,因此 ...
- AC日记——[HNOI2008]越狱 bzoj 1008
1008 思路: 越狱情况=总情况-不越狱情况: 代码: #include <cstdio> #include <cstring> #include <iostream& ...
- HDU 6354.Everything Has Changed-简单的计算几何、相交相切圆弧的周长 (2018 Multi-University Training Contest 5 1005)
6354.Everything Has Changed 就是计算圆弧的周长,总周长=大圆周长+相交(相切)部分的小圆的弧长-覆盖掉的大圆的弧长. 相交部分小圆的弧长直接求出来对应的角就可以,余弦公式, ...
- Elasticsearch使用java读取数据报错NoNodeAvailableException: None of the configured nodes are available: [127.0.0.1:9300]
对于这个问题,大部分人出现在这个地方: Client client = new TransportClient(settings).addTransportAddress(new InetSocket ...
- 51nod 1283 最小周长【注意开根号】
1283 最小周长 题目来源: Codility 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 收藏 关注 一个矩形的面积为S,已知该矩形的边长都是整数,求所有 ...
- debug 英文翻译
declaration of 'int a' shadows a parameter :函数参数里,已经有这两个名称的变量了,指定义了同名的参数,造成了隐藏. expected primary-exp ...