23
26

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

QiitaAPIで「ほぼ」全投稿を取得する

Last updated at Posted at 2014-09-03

なんとなく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では作成日の降順に変更になったようです。

これちょっと使いものにならないんじゃ。。。

現状でなるべく多くの投稿を取得する方法

以上を踏まえた上で、現状で「ほぼ」全投稿を取得する方法。

  1. 新着投稿取得APIで最新5,000件を取得する。
  2. 1で取得した投稿からタグを抽出する。
  3. 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秒になります。

23
26
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
23
26

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?