なんとなくQiitaのデータで遊びたくなったので、APIで全投稿を取得できるか調べてみた。
現在の全投稿件数
約49,000件。
確認方法はこちら。
新着投稿の取得 ( /api/v1/items )
Qiitaの投稿は1日約100件強。
最大取得件数は1ページ当たり100件 x 50ページ = 5,000件なので、1か月分くらいなら取得できる。
全投稿取得は無理。
[2014/10/01 追記] v2では100件 x 100ページ = 10,000件 まで取得できます。
特定タグの投稿取得 ( /api/v1/tags/:url_name/items )
現在投稿件数が一番多いタグはRubyで約4,680件。なので**「今なら」**各タグの全投稿を取得できる。
それには全タグの一覧が取得できればいいんだけど。。。
タグ一覧取得 ( /api/v1/tags )
現在タグ総数は8,451件で全部は取得できない。
まあ件数の多いタグだけ取得できればいいか、と思ったけどこのAPI、どうやら作成日が古いものから取得しているっぽいので最新の"swift"とかのタグが取得できていない。
[2014/10/01 追記] v2では作成日の降順に変更になったようです。
これちょっと使いものにならないんじゃ。。。
現状でなるべく多くの投稿を取得する方法
以上を踏まえた上で、現状で「ほぼ」全投稿を取得する方法。
- 新着投稿取得APIで最新5,000件を取得する。
- 1で取得した投稿からタグを抽出する。
- 2の全タグについて、特定タグ投稿取得APIで最新5,000件を取得する。
結果
上記の方法で49,549件中47,361件取得できた。サイズは約600MB。
途中、「VC++」タグの投稿取得でエラーになったがそれ以外は問題なし。
リクエスト総数は2,547で約18時間かかった。
50ページ制限がなければ新着投稿取得APIだけで500リクエストで取得できるんだけどなあ。。。
バッチ処理でQiitaAPIを使うときのコツ
1時間に150リクエストまでという制限があるので、3600秒/150=24秒のWAITを入れるとリクエスト制限を考えずに連続取得できる。
[2014/10/01 追記] v2では1時間に300回になったので、3600秒/300=12秒になります。