概述
文章主要是记录自己抓取 https://www.ingress.com/r/getPlexts
接口数据做相应分析的结果与中间过程。
这个接口主要作用是获取日志信息,包括打po,占po,插脚,建link,建field,广播聊天。
接口通过post方式,上传json格式的参数,下发json结构的结果。
参数:
{
"minLatE6": 22562501,
"minLngE6": 114055660,
"maxLatE6": 22575340,
"maxLngE6": 114079349,
"minTimestampMs": 1435485226617,
"maxTimestampMs": -1,
"tab": "all",
"ascendingTimestampOrder": true,
"v": "a9913f22cd769c2960a185abbd32fd48cb42df08"
}
- 前四个参数两个点的经度纬度决定区域。(并没有做相应的测试,可能有出路)。
- 接着的两个参数控制时间范围,是精确到毫秒的时间戳。
v
是一个鉴权的信息。在同一个session时间内,不会发生变化。ascendingTimestampOrder
控制排序方式,类似与order by des/ase
时间参数的调节
由于数据大小的限制,返回的结果,最多有50条记录。
这些数据是位于[minTimestampMs,maxTimestampMs]
闭区间内的。
minTimestampMs
和 maxTimestampMs
都可以取-1,相当于
+∞
,
−∞
。
大体上有这四种情况。
* [ -1 ,t]
* [t,-1]
* [t1,t2]
* [-1,-1]
在ascendingTimestampOrder=true
的情况下。
从最小的时间上到最大的时间的消息排序取前50条(如果有的话)。
在ascendingTimestampOrder=false
的情况下。
从最大的时间上到最小的时间的消息排序取前50条(如果有的话)。
应该就是简化的如这条语句表达的。
select * from your_table where time >= min and time <=max order by time des/asc limit 50;
目前提供一个月的日志数据供查询。
min,max都为-1的情况下。
ascendingTimestampOrder=true
取的一个月前的最后的50条数据。
ascendingTimestampOrder=false
取的最新的50条数据。
鉴权信息
起鉴权作用的,有三个。
* cookies 中的 SACSID
。起一个标识sessionid的作用吧。
* cookies和http请求头中的csrftoken
,不管在 cookies或者请求头中缺少,都不能通过。
* post参数中的v
,还不清楚这个是从哪里生成的。还未追踪它的变化规律。
目前的做法是在firebug中抓了这几个值,当程序的配置参数。
想要实现的流程
定时刷新log信息,记录全天的操作信息。从这些全天的日志数据中最少可以实现的功能:
- 指定po事件通知。
- 给地图小范围的更新提供实时数据。
- 玩家的常去的地,习惯路径。
还存在的问题
两次https请求出现Forbidden
错误。
表现在,在程序运行期间,第一次获取数据,没有问题。第二次就出报forbidden。所以无法通过设置定时器来多次获取数据。程序单独运行一次是没有问题的。程序运行完后,再次运行,也没有问题。
排除了访问接口时间间隔的限制。
排除了http层的参数问题。
在用代理访问他网站,也存在相同的错误。
通过查找相关资料。
推测是https的session问题。
可能服务器存在一种检查机制,同一个https的session 只能发起一次数据请求。
而程序底层是建立ssl这后,一直用这条建立好的ssl来发送http的信息。
试过强制刷新https的session,未找到方式。
试过自实现底层ssl的这现方式,还未开开始。