# 使い方 以下の5つのエンドポイントが実装されています。 - 試合情報の取得 ( GET /match ) - 問題情報の取得 ( GET /problem ) - 取得する分割データの指定 ( POST /problem/chunks ) - wavの取得 ( GET /problem/chunks/:filename) - 問題への回答 ( POST /problem ) # 共通事項 ## トークン 全てのリクエストには下記のリクエストヘッダ、もしくはクエリパラメーターのどちらかが必要です。 ### リクエストヘッダの場合 Keyとしてprocon-token, Valueとして各高専のtokenを設定してください。 - procon-token: xxxxxxxxxxxx ### クエリパラメーターの場合 Keyとしてtoken, Valueとして各高専のtokenを設定してください。 - /match?token=xxxxxxx ## unix time Unix epochからの経過秒数です。 1656601200 は 日本時間の2022年7月1日0時0分0秒を示します。 ## 試合情報設定前 すべてのエンドポイントがAccessTimeErrorになります。 # 試合情報の取得 ( GET /match ) /match にGETリクエストを送ることで試合の情報を取得できます。 ## レスポンス ### 成功した場合 下記のプロパティを含むjsonが返ります。 - problems 試合中の問題数。整数 - bonus_factor: 使用した分割数に対するボーナス係数の配列。n番目がn個利用場合のボーナス係数です。実数の配列 - penalty: 変更札に適用される係数。整数 ``` { "problems": 3, "bonus_factor": [1.0], "penalty": 1 } ``` ### 失敗した場合 status code 400の場合下記の可能性があります。 - `InvalidToken`: トークンが正しくない - `AccessTimeError`: 試合の時間外 # 問題情報の取得 ( GET /problem ) /problem にGETリクエストを送ることで試合の情報を取得できます。 ## レスポンス ### 成功した場合 下記のプロパティを含むjsonが返ります。 - id: 問題ID - chunks: 分割数。整数 - start_at: 開始時間のunixtime - time_limit: 制限時間。単位は秒。整数 - data: 重ね合わせ数。整数 ``` { "id": "qual-1-1", "chunks": 2, "starts_at": 1655302266, "time_limit": 1000, "data": 3 } ``` ### 失敗した場合 status code 400の場合下記の可能性があります。 - `InvalidToken`: トークンが正しくない - `AccessTimeError`: 問題の回答時間外 # 取得する分割データの指定 ( POST /problem/chunks ) /problem/chunks にPOSTリクエストを送ることで取得する分割データの数を指定できます。 ## リクエスト クエリパラメータに取得する分割数nを指定してください。 例 /problem/chunks?n=2 ## レスポンス ### 成功した場合 下記のプロパティを含むjsonが返ります。 chunks: 各分割データのファイル名の配列が返ります。 次に説明する /problem/chunks/ファイル名 にGETリクエストを送ることで分割データを取得できます。 ``` { "chunks": [ "problem3_31c6b25b1810f0c5b87a30a1ea17dcd2a5b9f832.wav", "problem1_75012769dcc8b201e17816927628dab234d5451b.wav", ] } ``` ### 失敗した場合 status code 400の場合下記の可能性があります。 - `InvalidToken`: トークンが正しくない - `AccessTimeError`: 問題の回答時間外 - `FormatError`: フォーマットが正しくない - `FormatError`: 問題に設定されているchunkの数をこえている # wavの取得 ( GET /problem/chunks/:filename ) /problem/chunks/:filenameにGETリクエストを送ることで分割データを取得することができます。 _で区切られたファイル名の左側が分割前の順番で右側がdigestです。 ## レスポンス ### 成功した場合 wavファイル ### 失敗した場合 status code 400の場合下記の可能性があります。 - `InvalidToken`: トークンが正しくない - `AccessTimeError`: 問題の回答時間外 - `NotFound`: ファイルが存在しない # 問題への回答 ( POST /problem ) /problem にPOSTリクエストを送ることで試合への回答を送信できます。 ## リクエスト リクエストヘッダーに下記を指定してください。 Content-Type: application/json また、下記のプロパティを含むjsonをbodyに含めてください。 - problem_id: 問題ID - answers: 回答するの絵札のIDを文字列の配列で設定してください。各絵札のIDは配布された音声の0埋めされた2桁の数字の部分です。 ``` { "problem_id": "qual-1-1", "answers": ["01", "02"] } ``` ## レスポンス ### 成功した場合 下記のプロパティを含むjsonが返ります。 - problem_id: 問題ID - answers: 解凍された絵札のIDの配列 - accepted_at: 回答を受信した日時のunix time ``` { "problem_id": "qual-1-1", "answers": ["01", "02"], "accepted_at": 1656601200, } ``` ### 失敗した場合 status code 400の場合下記の可能性があります。 - `InvalidToken`: トークンが正しくない - `TooLargeRequestError`: bodyのサイズが1024byteをこえている - `FormatError`: フォーマットが正しくない - `FormatError`: 問題IDが指定されていない - `FormatError`: answersの配列のサイズが0 - `FormatError`: answersの配列のサイズが問題の読み札数をこえている - `AccessTimeError`: 指定された問題IDの回答時間外