标签:gen toc 开发 channel span upper 维护 ESS 难点
总结:没什么技术含量,只是记录一下
难点:1、as和cp的生成
2、请求列表页的时候如何嵌入生成的as和cp
3、返回内容的格式处理
首先:需要拼接处列表页和内容页,之后请求内容,可以看到as和cp参数必须,因此需要构造出这两个参数
1、列表页格式: https://m.toutiao.com/list/?tag=news_sports&ac=wap&count=20&format=json_raw&max_behot_time=0&as=A165EE21707908E &cp=5E1009A0D8AE0E1 2、内容页格式: https://www.toutiao.com/i11111111111111111111/?channel=news_sports&W2atIF=1
列表页中的as和cp需要自己实现,这里借用了网上的代码:
<?php function getAsCp() { $as = ‘‘; $cp = ‘‘; $time = time(); $key = strtoupper(dechex($time)); $md5Key = strtoupper(md5($time)); if (8 !== strlen($key)) { $as = ‘479BB4B7254C150‘; $cp = ‘7E0AC8874BB0985‘; } else { $md5KeyAsc5 = substr($md5Key, 0, 5); $md5KeyDesc5 = substr($md5Key, -5); $as = ‘‘; $cp = ‘‘; for ($i = 0; $i < 5; $i ++) { $as .= $md5KeyAsc5[$i] . $key[$i]; $cp .= $key[$i + 3] . $md5KeyDesc5[$i]; } $as = ‘A1‘ . $as . substr($key, -3); $cp = substr($key, 0, 3) . $cp . ‘E1‘; } return array($as, $cp); } $t = getAsCp(); echo $t[0].".".$t[1];
通过先请求本地文件获得as和cp,在一级列表页中构造真实列表页的格式,解决难点2。
返回的内容中是unicode编码,需要进行转换,在内容处理中调用c#代码实现处理,解决难点3
using System; using System.Collections.Generic; using SpiderInterface; using System.Text.RegularExpressions; class LocoyCode{ /// <summary> /// 执行方法,不能修改类和方法名称。 /// </summary> /// <param name="content">标签内容</param> /// <param name="response">页面响应,包含了Url、原始Html等属性</param> /// <returns>返回处理后的标签内容</returns> public string Run(string content,ResponseEntry response){ //在这里编写处理代码 return new Regex(@"\\u([0-9A-F]{4})", RegexOptions.IgnoreCase | RegexOptions.Compiled).Replace( content, x => string.Empty + Convert.ToChar(Convert.ToUInt16(x.Result("$1"), 16))); // return content; } }
还是老规矩 欢迎群内技术交流qq 623607229, 闲暇时接开发、维护项目
标签:gen toc 开发 channel span upper 维护 ESS 难点
原文地址:https://www.cnblogs.com/ynhi/p/12150674.html