1. Qiita
  2. 投稿
  3. AtCoder

AtCoderで特定のユーザが投稿したコードを検索する非公式APIを作成した

  • 5
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

概要

AtCoderは競技プログラミングに触れたことある人には馴染み深いサイトだと思います。詳細は割愛。
AtCoderの非公式APIとこれを活用した非公式問題集をkenkoooo氏が作成されたりしています。
これで受験結果も取れるといいなと思ったので作りました。
なければ作ればいいというのは技術者としては至極もっともな発想ですね。

アルゴリズムとか

YSR氏が解説してくれてます。ぶっちゃけ私が解説すること何もないので、使った部分だけ書いておきます。
ちなみに、PHPでDOM使って書きました。流石に2Pいくことないやろーとか色々手を抜いてますが。

抽出するもの HTML要素
問題の一覧 検索バー内のoption
投稿の一覧 table(tr)

APIの構造

とりあえずどんな感じか見たければこちら
めんどくさかったむやみに情報を取得する必要もないので以下のパラメータを必須にしています。
(2/6追記) ACしたコードだけ取得できるパラメータを増やしました。

エンドポイント: http://skht777.webcrow.jp/atcoder-api/submissions/list.php

パラメータ
id 対象ユーザのID
contest 対象コンテストのID
ac (オプション) なし

返ってくる値はこんな感じです。
(2/6追記) jsonを見やすくしてsubmissionsとproblemsの子要素にキーを追加しました。

sample.json
{
    "(コンテストID)": {
        "submissions": {
            "(submissionID)": {
                //投稿データ
            },
        },
        "problems": {
            "(Aからの連番)": {
                //問題データ
            }
        }
    }
}

おまけ

任意のsubmissionから提出コードを抜き出して出力するAPIも作りました。こちら

エンドポイント: http://skht777.webcrow.jp/atcoder-api/submissions/answer.php

GETのとき:

パラメータ
id 対象submissionのID
contest 対象コンテストのID

POSTのとき:

パラメータ
url 対象submissionの完全なURL

これ使って適当になんか作るつもりです。