超值资料:python做pc端微信自动回复_利用 fidder + 微信pc端 全自动抓取
优采云 发布时间: 2022-10-14 00:12超值资料:python做pc端微信自动回复_利用 fidder + 微信pc端 全自动抓取
一、基本流程
1. 现有公众号采集文章:
首先使用任何微信登录微信PC(下载微信PC并安装)。
将您的采集入口(例如)发送到微信
点击直接在微信PC上打开
2. 如果官方账号不存在:
做一个注册对应公众号文章,一个就可以
要做一个自动客户端,当有新的文章时,自动导航访问,fidder监控,会自动推送到后台生成“官方号码记录”
2. 准备工作
1. 菲德打开https对抓取的支持:工具-》选项
2. 自动解码
3. 配置过滤
三、编写爬行脚本
1. 在 Fidder 中编写爬网脚本:规则 - 自定义规则
static var tagUrl = "&abc=";static var begincollectHost = "web.test.com";//替换成你的服务器static var begincollectUrl = "/api/proxy/begincollect";//替换成你的等待页面入口地址static var host = "localhost:33386";//你的api服务主机地址static var apiUrl = "/api/proxy/weixin";//你的api服务地址static var debug = false;static function httpPost(url: String,host: String,contentStr: String): String{var content: byte[] = System.Text.Encoding.UTF8.GetBytes(contentStr);var oRQH: HTTPRequestHeaders = new HTTPRequestHeaders(url, ['Host: '+host, 'Content-Length: '+content.length.ToString(), 'Content-Type: application/x-www-url-encoded']);oRQH.HTTPMethod = "POST";var oSD = new System.Collections.Specialized.StringDictionary();var newSession = FiddlerApplication.oProxy.SendRequestAndWait(oRQH, content, oSD, null); var jsonString = newSession.GetResponseBodyAsString();return jsonString;}static function sendMsg(contentStr: String,type: String) : Object { var jsonString = httpPost(apiUrl+"?type="+type,host,contentStr); FiddlerApplication.Log.LogString("result:"+jsonString); return Fiddler.WebFormats.JSON.JsonDecode(jsonString);}static function getFullUrl(url:String){if(debug){var end = "";if (url.IndexOf('#') > 0){end = url.Substring(url.IndexOf('#'));url = url.Substring(0, url.IndexOf('#'));}url = url + (url.IndexOf('?') > 0 ? "" : "?a=") + tagUrl + end;}return "https://mp.weixin.qq.com/"+url;}static function getRndInternal(){return new System.Random().Next(3, 11) * 1000;}static function getReloadScript(url:String){return getReloadScript(url,0);}static function getReloadScript(url:String,time:int){if(time==0) time = getRndInternal();var script = " ";FiddlerApplication.Log.LogString("reloadscript:"+script);return script;}static function getMPHisUrl(biz:String){ //获取公众号历史记录urlreturn getFullUrl("mp/profile_ext?action=home&__biz="+biz+"&scene=124#wechat_redirect");}static function getMPhisReloadScript(biz:String){ var url = getMPHisUrl(biz);return getReloadScript(url);}static function getMsgHisUrl(biz:String,pass_ticket:String,offset:String){ //获取公众号历史记录api urlreturn getFullUrl("/mp/profile_ext?action=getmsg&__biz="+biz+"&f=json&offset="+ offset+"&count=10&is_ok=1&scene=124&pass_ticket="+pass_ticket +"&x5=0&f=json");} static function OnBeforeResponse(oSession: Session) { if (m_Hide304s && oSession.responseCode == 304) { oSession["ui-hide"] = "true"; }if(debug && !oSession.uriContains(tagUrl))return;if(oSession.HostnameIs(begincollectHost) && oSession.uriContains(begincollectUrl)){ //开始采集入口,地址要通过微信pc端浏览器打开var reloadScript="";var responses = oSession.GetResponseBodyAsString();var url="";var collect_url = "http://"+begincollectHost+begincollectUrl+"?key="+tagUrl;var time = 0;if(System.DateTime.Now.Hour=21){//21点之后,9点之前不采集url = collect_url;time = 3600 * 13 * 1000;}else{//获取公众号bizvar jsonObj = sendMsg("","4");var biz = jsonObj.JSONObject["biz"]; if(biz!=undefined){ //跳转到公众号历史文章地址 url = getMPHisUrl(biz);}else{ //没有可采集的公众号,继续空页面轮询time = 3600 * 1000 + getRndInternal();url = collect_url;}}reloadScript = getReloadScript(url, time); //我的入口页面返回是json,如果是html,则不用下面这句oSession.oResponse["Content-Type"]="text/html; charset=UTF-8";oSession.utilSetResponseBody(responses+reloadScript);return;}if(oSession.HostnameIs("mp.weixin.qq.com")){var reloadScript="";var responses = oSession.GetResponseBodyAsString();oSession.utilDecodeResponse(); //解码if(oSession.uriContains("profile_ext?action=home")){ //公众号历史消息页sendMsg(responses,"1");//记录公众号信息//获取公众号历史第1页记录var url = oSession.fullUrl.Replace("action=home","action=getmsg")+"&x5=0&f=json&f=json&offset=0&count=10&is_ok=1";reloadScript = getReloadScript(url);}else if(oSession.uriContains("profile_ext?action=getmsg")){ //获取历史消息var reload = oSession.uriContains("&offset=0");var content = (reload?"":oSession.url)+responses;//保存文章记录sendMsg(content,"2");if(reload){ //再次获取文章记录,总共获取20条 //获取第2页10条记录var url = oSession.fullUrl.Replace("&offset=0&","&offset=10&");reloadScript = getReloadScript(url);}else{ //返回轮询等待页面var url = "http://"+begincollectHost+begincollectUrl+"?key="+tagUrl;reloadScript = getReloadScript(url);}oSession.oResponse["Content-Type"]="text/html; charset=UTF-8";}else if(oSession.uriContains("/s/") || oSession.uriContains("s?__biz=")){//文章 //保存文章内容var jsonObj = sendMsg(responses,"3");return;}oSession.utilSetResponseBody(responses+reloadScript);} }
2. 服务器端脚本(此处以 c#.net 为例)
)。
public class ProxyController : ApiController { [System.Web.Http.HttpGet] [System.Web.Http.HttpPost] public JsonResult BeginCollect() { return Json("Collect,现在时间:" + DateTime.Now.ToString()); } // GET: Proxy public async Task> weixin(int type) { //获取从Fidder推送过来的内容 string content = await Request.Content.ReadAsStringAsync(); object obj = string.Empty; string biz = ""; if (type == 1) { //从公众号历史页面获取并保存公众号信息 Func getValue = (pattern) => { return GetValue(content, pattern); }; AddMsg(() => { //获取biz biz = getValue("vars*__bizs*=s*".+""); //获取昵称 string nickName = getValue("vars*nicknames*=s*".+""); //获取headimage string headImg = getValue("vars*headimgs*=s*".+""); //appid string appid = getValue("appids*:s*".+""); string errMsg; if (nickName.Length > 0 && biz.Length > 0) { //todo:保存数据到数据库 } }); } else if (type == 2) { if (!content.StartsWith("{")) { //url和response组合 int index = content.IndexOf('{'); string url = content.Substring(0, index); string[] paramList = url.Split('&'); Func getValue = (name) => paramList.First(item => item.StartsWith(name + "=")).Replace(name + "=", ""); biz = getValue("__biz"); content = content.Substring(index); //obj = new { biz, uin, pass_ticket, key }; DataService.SetData("princess_updateflag", new { biz }, out string errMsg); } AddMsg(() => RecorData(content, biz)); } else if (type==4) { string errMsg; dynamic data = DataService.GetData("princess_getbiz", out errMsg); if (data != null) { biz = data.biz; if (biz?.Length > 0) obj = new { biz }; } } else if(type==3) { AddMsg(() => { BuildPrincess(content); }); } return Json(obj); } private void AddMsg(Action action) { MessageQueue.Add(new MessageQueueItem(() => { try { action(); } catch (Exception ex) { } })); } private void BuildPrincess(string content) { //从文章信息里获取公众号信息 //string url = content.Substring(0, 3000); string biz = GetValue(content, "vars*msg_links*=s*".+""); if (biz.Length == 0) return; biz = biz.Substring(0, biz.IndexOf('&')).Substring(6); biz = biz.Substring(biz.IndexOf("__biz=") + 6); //content = content.Substring(1000); //公众号名称 string source_name = GetValue(content, "vars*nicknames*=s*".+""); string source_img_url = GetValue(content, "vars*ori_head_img_urls*=s*".+""); string wechat_num = GetValue(content, "(?.+)"); DataService.SetData("Princess_insert", new { org_id = biz, source_name = source_name, source_url = "", source_img_url = source_img_url, img_url = source_img_url, biz = biz }, out string errMsg); } private string GetValue(string value, string pattern) { if (Regex.IsMatch(value, pattern)) { Match match = Regex.Match(value, pattern); if (match.Groups.Count > 1) return match.Groups[1].Value; string result = match.Value; if (result.IndexOf('"') > 0) { result = result.Substring(result.IndexOf('"') + 1); result = result.Substring(0, result.IndexOf('"')); } return result; } return ""; } private void RecorData(string jsonData,string biz) { dynamic result = jsonData.ToObjectFromJson(); if (result.ret == 0) { string general_msg_list = result.general_msg_list; string errMsg; dynamic data = general_msg_list.ToObjectFromJson(); IEnumerable docs = (data.list as List).Where(item => { if (!(item as IDictionary).ContainsKey("app_msg_ext_info")) return false; return DataService.GetDataValue("doc_exists", out errMsg, new { articleid = $"{item.comm_msg_info.id}-{item.app_msg_ext_info.fileid}" }) == 0; }).Select(item => { item.app_msg_ext_info.create_date = DateTimeHelper.GetDateTimeFromXml(item.comm_msg_info.datetime); item.app_msg_ext_info.pid = item.comm_msg_info.id.ToString(); return item.app_msg_ext_info; }); if (docs.Count() == 0) return; string org_id = docs.First().content_url; org_id = org_id.Substring(org_id.IndexOf("__biz=") + 6).Split('&')[0]; var paras = GetDatas(org_id, docs); var subDocs = docs.Where(item => item.is_multi == 1) .Select(item => { IEnumerable multiDocs = item.multi_app_msg_item_list as IEnumerable; return GetDatas(org_id, multiDocs, item.create_date, $"{item.pid}"); } ); if (subDocs.Count() > 0) { List list = paras.ToList(); foreach (var item in subDocs) { list.AddRange(item); } paras = list; } if (!DataService.SetData("doc_insert", paras, out errMsg)) { } } } /// /// 上传图片到文件服务器 /// /// /// private string UploadFile(string picUrl) { dynamic picResult = DataService.Execute("fileservice", new { keyword = "file", content = new { ext = "jpg", data = picUrl } }); return picResult.picurl; } /// /// 获取要存储的数据对象 /// /// /// /// /// /// private IEnumerable GetDatas(string org_id, IEnumerable docs , DateTime? create_date = null, string pid = null) { var paras = docs.Select(item => { string imageUrl = item.cover; imageUrl = UploadFile(imageUrl); return new { articleid = $"{pid ?? item.pid}-{item.fileid}", title = item.title, digest = item.digest, ori_url = item.content_url, url = item.content_url, image_url = imageUrl, ori_image_url = imageUrl, doc_type = "图文", create_date = create_date ?? item.create_date, org_id = org_id }; }); return paras; } }
福利:百度关键词排名-免费百度关键词自动排名工具
百度关键词排名,什么是百度关键词排名。百度关键词排名是指在百度搜索引擎中输入关键词,你的网站将参与排名。那么如何快速提升百度关键词的排名呢?今天给大家分享一款快速提升百度排名的万能SEO工具网站关键词。工具包括:网站 地图生成、网站关键词 挖掘、网站关键词文章采集、网站伪原创、网站SEO优化模板配置、网站链接抓取、网站链接推送(百度/360/搜狗)网站辅助点击工具。请参考图1、图2、图3、图4、图5、
在优化一个新网站的时候,大家经常会遇到很多问题。如何快速收录换一个新站点就是其中之一,因为网站要想排名,首先要有收录,收录处理问题的能力说说排名和流量。那么一个新站点收录如何快速获得排名呢?到底应该使用什么样的优化?
1、新网站优化难点
网站上线后3个月左右是新站期,很难收录新站,就算是收录也只是收录的首页,这是因为百度新站点的周期可能会更长。有的人着急,会改网站,只会无限延长网站的收录循环。换新站是大忌。不改,上线前做好充分准备。