概述
文章主要是記錄自己抓取 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的這現方式,還未開開始。