Ingress intel api分析之一

概述

文章主要是記錄自己抓取 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] 閉區間內的。
minTimestampMsmaxTimestampMs 都可以取-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的這現方式,還未開開始。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章