AtCoder APIまとめ
最終更新: 2021-07-25
仕様として決まってはいないので、いきなり変わる可能性もあります
スクレイピング
プロフィールを取得
ページ内スクリプト
変数
/*
LANG: 現在の言語
userScreenName: 自分のユーザーID
favSet: お気に入りのユーザー名が格納されたSet
csrfToken: CSRFトークン
/contests/*/
contestScreenName: コンテストのID(abc123みたいなやつ)
startTime, endTime: コンテスト開始・終了時刻を表すmoment.jsオブジェクト
/contests/*/standings
standingsAPI: 順位表JSONのパス
順位表ビューの操作関係、いろいろ
関数
getServerTime(): 現在のサーバー時刻をmoment.jsオブジェクトで取得
addFav(ユーザーID): お気に入り追加
deleteFav(ユーザーID): お気に入り削除
toggleFav(ユーザーID): お気に入り追加・削除
reloadFavs(): お気に入りをローカルストレージから読み込む
favSetがundefinedのときはこれを呼び出すと読み込まれる
API
/settings/fav/add: お気に入り追加
POST "userScreenName=${ユーザーID}&csrf_token=${csrfToken}" => 'success'
既に追加されているユーザーや存在しないユーザーを指定すると404になる
/settings/fav/delete: お気に入り削除
POST "userScreenName=${ユーザーID}&csrf_token=${csrfToken}" => 'success'
追加していないユーザーや存在しないユーザーを指定すると404になる
/servertime?ts=${これは何}: サーバー時刻を取得
GET => 'YYYY-MM-DD hh:mm:ss+0900'
/contests/*/standings/json
GET => JSON
code:js
{
Fixed: boolean, // ?
AdditionalColumns, // (?) 基本的に null
TaskInfo: [{ // 問題一覧(コンテスト開始前は空)
Assignment: string, // 問題番号
TaskName: string, // 問題名
TaskScreenName: string // 問題ID
}],
StandingsData: [{ // 順位表
Rank: number, // 順位
Additional, // ?
UserName: string, // ユーザー名
UserScreenName: string, // ユーザーID
UserIsDeleted: boolean, // ユーザーが削除されているか
Affiliation: string, // 所属
Country: string, // 国コード(2文字)
Rating: number, // レーティング(コンテスト終了後)
OldRating: number, // レーティング(コンテスト終了前)
IsRated: boolean, // Ratedか
IsTeam: boolean, // チームか
Competitions: number, // コンテスト参加回数
AtCoderRank: number, // AtCoder 順位
TaskResults: { // 問題回答状況
(TaskScreenName): { // 問題ID: データ の形式
Count: number, // 提出回数
Failure: number, // ?
Penalty: number, // ペナルティ
Score: number, // 得点×100
Elapsed: number, // 提出時刻(コンテスト開始時刻からのナノ秒単位)
Status: number, // ?
Pending: boolean, // ジャッジ中か
Frozen: boolean, // 凍結中か
Additional // ?
}
},
TotalResult: { // 合計点数など
Count: number, // 総提出回数
Failure: number, // ?
Penalty: number, // 総ペナルティ
Score: number, // 合計得点×100
Elapsed: number, // 最終提出(コンテスト開始時刻からのナノ秒)
Status: number, // ?
Frozen: boolean, // 凍結中か
Additional // ?
}
}]
}`