May 30, 2015

製作艦隊收藏(艦これ)外掛 (五) 解析 API part II


目錄


(零) 聲明

此程式僅為個人學習 Python 的實作練習,並藉由此遊戲來分析與驗證網路傳輸行為,所有程式及文章僅為程式學習目的,架設於 Bitbucket 的私人 repository 中,無任何公開、散佈或任何營利行為,

不正ツール使用は規約違反です。お辞め頂けますようお願い申し上げます。 – 艦これ開発/運営 公式ツイート

本人不鼓勵也不贊同於艦これ使用任何形式的外掛或任何不正的工具,使用此類工具違反 艦これ 的 利用規約,並可能導致帳號被永久刪除。

The program was built for Python learning purpose only. Both the source codes and the program are stored in Bitbucket’s private repository. They are not disclosed to anyone in any form. Using such programs violates kancolle’s Terms of Use and may result in a permanent account ban.


(一) 任務 API

0. 影片展示、說明

在 Youtube 可選擇 HD 高畫質。

1. Overview

進入任務頁面時,會從伺服器要求 questlist API。

Remote Address:125.6.189.103:80
Request URL:http://125.6.189.103/kcsapi/api_get_member/questlist
Request Method:POST
Status Code:200 OK

回傳的 JSON 分析如下:

  • api_page_count 總共有幾頁任務。
  • api_disp_page 目前顯示的是第幾個頁面。
  • api_list
    • api_no 任務的 ID。
    • api_category 任務類型,推測是以下列方式做分類:
      • 1 編成。
      • 2 出擊。
      • 3 演習。
      • 4 遠征。
      • 5 補給維修。
      • 6 開發。
      • 7 改修。
    • api_type 任務種類,推測是以下列方式做分類:
      • 1 一次性任務。
      • 2 每日任務。
      • 3 每周任務。
      • 4 每月任務。
    • api_state 任務狀況:
      • 1 代表任務有顯示出來,但沒有選取
      • 2 代表目前有被選取,會顯示”遂行中”
      • 3 代表任務已完成,可以領獎
    • api_title 任務名稱。
    • api_detail 任務敘述。
    • api_get_material 任務報酬,依序為燃料、彈藥、鋼材、ボーキサイト。
    • api_bonus_flag 待研究,除了資源外,後續會送家具箱、維修女神那些?
    • api_progress_flag 目前進度
      • 0 代表 0 ~ 49%
      • 1 代表 50% ~ 79 %
      • 2 代表 80% ~ 99%。
  • api_exec_count 是目前正執行(選取)中的任務總數?

其中 api_list 內元素一定會有五個元素,如果只有三個任務,則最後面兩個元素的值會填上用 -1。


(二) 維修 API

進入維修頁面時,會從伺服器要求 ndock API。

Remote Address:125.6.189.103:80
Request URL:http://125.6.189.103/kcsapi/api_get_member/ndock
Request Method:POST
Status Code:200 OK

回傳的 JSON 與 Port API 的 api_ndock 欄位完全相同。


(三) 補給 API

進入補給頁面時,會從伺服器要求 charge API。

Remote Address:125.6.189.103:80
Request URL:http://125.6.189.103/kcsapi/api_req_hokyu/charge
Request Method:POST
Status Code:200 OK

回傳的 JSON 分析如下:

  • api_idPort API 提到的 艦娘 Local ID
  • api_fuel 艦娘消耗燃料。
  • api_bull 艦娘消耗彈藥量。
  • api_onslot 艦娘裝備。
  • api_material 提督目前總資源(燃料、彈藥..)。

(四) 工廠 API

進入補給頁面時,會從伺服器要求 getship API。

Remote Address:125.6.189.103:80
Request URL:http://125.6.189.103/kcsapi/api_req_kousyou/getship
Request Method:POST
Status Code:200 OK

回傳的 JSON 分析如下:

  • api_idPort API 提到的 艦娘 Local ID
  • api_ship_id 造好的這隻艦娘在 Server 端的 ID,這個 ID 跟艦娘在圖鑑的 ID 不一樣。
  • api_kdock 各個造船廠渠道的資訊。
    • api_member_id 提督 ID。
    • api_id 第幾個造船廠,總共 1~4 個造船廠。
    • api_state
      • 1 代表此造船廠正在建造船艦
      • 0 代表閒置
      • -1 代表未開放(需課金開放)。
    • api_complete_time 建造完成時間的 Epoch time
    • api_complete_time_str 將上述 Epoch 轉成 strf 格式,時區是 JST, GMT +9
  • api_slotitem 建造中的這隻艦娘的預設裝備。

(五) 遠征 API

進入遠征頁面時,會從伺服器要求 mission API。

Remote Address:125.6.189.103:80
Request URL:http://125.6.189.103/kcsapi/api_get_member/mission
Request Method:POST
Status Code:200 OK
  • api_mission_id 就是遠征任務的 ID。
  • api_state
    • 0 代表尚未達成過。
    • 1 代表目前正在進行。
    • 2 代表已達成過現在沒在進行。

點選遠征開始後,會從伺服器要求 start API。

Remote Address:125.6.189.103:80
Request URL:http://125.6.189.103/kcsapi/api_req_mission/start
Request Method:POST
Status Code:200 OK
  • api_complete_time 遠征完成時間的 Epoch time
  • api_complete_time_str 將上述 Epoch 轉成 strf 格式,時區是 JST, GMT +9

遠征回來時,會從伺服器要求 deck API。

Remote Address:125.6.189.103:80
Request URL:http://125.6.189.103/kcsapi/api_get_member/deck
Request Method:POST
Status Code:200 OK

回傳的 JSON 與 Port API 的 api_deck_port 欄位完全相同。


(六) 圖鑑 API

進入圖鑑頁面時,會從伺服器要求 picture_book API。

Remote Address:125.6.189.103:80
Request URL:http://125.6.189.103/kcsapi/api_get_member/picture_book
Request Method:POST
Status Code:200 OK

回傳的 JSON 分析如下:

  • api_index_no 圖鑑號碼。
  • api_state 我猜是大破/中破那些圖片,或是各種語音的有無。
  • api_table_id 不知道,待研究。
  • api_taik = 耐久(たいきゅう = 生命值 = Port API 的 api_ship 內的 api_maxhp
  • api_souk = 装甲(そうこう)= 同上的 api_soukou
  • api_kaih = 回避(かいひ)= 同上的 api_kaihi
  • api_houg = 砲撃(ほうげき)= 同上的 api_karyoku 火力(かりょく)。
  • api_raig = 雷撃(らいげき)= 同上的 api_raisou 雷装(らいそう)。
  • api_tyku = 対空(たいくう)= 同上的 api_taiku
  • api_tais = 対潜(たいせん)= 同上的 api_taisen
  • 其他應該都直接看變數名稱就可以推出代表的意義了。

看到這邊您可以明白為什麼這款遊戲的 API 會被人如此詬病了吧。

為什麼在不同的 API 內會用不同的 Key 來表示一樣的東西呢..?

為什麼 Port API 用 hp,圖鑑 API 卻用耐久呢?
為什麼 Port API 用 火力,圖鑑 API 卻用砲撃呢?
為什麼 Port API 用 雷装,圖鑑 API 卻用雷撃呢?
為什麼 Port API 用 api_taiku,圖鑑 API 卻用api_tyku呢?

工程師為什麼要這樣搞自己呢?


(七) 結論

寫著寫著會漸漸發現,其實我們只需要抓取 portquestlistapi_start2slot_item 這四個 API 就能擷取外掛所需的所有資訊。

我們在 上一篇文章 中介紹了 port;在這篇文章分析完questlist

api_start2slot_item 是開啟遊戲時用來初始化遊戲的 API,我們會在 下一篇文章 做說明。


(八) 延伸閱讀

VoiceTube 看影片學英文