QiitaAPIがv2になったことで取得出来る記事数が増えました。
そこで、最新の1万件の投稿を取得して、被ストック数についていくつか分析してみました。
(頑張ればより多く(99%近く。100%は多分不可能)の記事も取得可能ですが、取得に時間と手間がかかりそうなので、ひとまず簡単に取得可能な最新1万件を取得してみました)
データ取得
被ストック数を取得するには、投稿の取得API(GET /api/v2/items
)だけでは出来ません(返答JSONに被ストック数は含まれません)。投稿を取得した後にそれぞれの記事に対してストックユーザをGET /api/v2/items/:item_id/stockers
で取得する必要があります。すなわち、以下のような流れになります。
- 10000万件の投稿を取得
- 10000万件全ての投稿に対してストックユーザを取得
300件/h可能なので、2.で、1万件取得するのに大体30hくらいかかるはずです。
注意点
- 利用可能数以上のリクエストを送ると「Rate limit exceeded」エラーが返ってくるので1時間待機等の処理を入れるとよいと思います。
- タイミングによっては「502: Bad Gateway」エラーが返ってくるので、再リクエストを要求する処理も入れるとよいと思います。
サンプルコード
1.の10000万件取得の部分の抜粋(基本部分のみ)です。
<?php
ini_set('display_errors', 1);
$context = stream_context_create(array(
'http' => array('ignore_errors' => true,
'header' => "Authorization:Bearer *****")
));
for($i = 1; $i < 101; $i++){
$url = 'http://qiita.com/api/v2/items?page='.$i.'&per_page=100';
$res = file_get_contents($url, false, $context);
$filename = './'.$i.'txt';
file_put_contents($filename, $res);
}
}
被ストック数の分布について
分析結果です。
まず、ヒストグラム(度数分布)で分布のイメージを示します。ほとんどの投稿(80%以上)が被ストック数10以下であるとわかります。
以下が具体的な割合になります。QiitaのTwitterで投稿されるような100以上の注目の記事は全体の1%程度であると分かります。
範囲 | 割合(%) |
---|---|
0 | 15.5 |
1-9 | 66.1 |
10-19 | 12.0 |
20-39 | 3.8 |
40-59 | 1.1 |
60-79 | 0.5 |
80-99 | 0.2 |
100-299 | 0.6 |
300- | 0.4 |
また、平均ストック数は「9.3」でした。ただし、中央値は「4」でしたので、記事を投稿した際、最も可能性の高い被ストック数という意味では「4」になるかもしれません。
被ストックはQiita利用のモチベーションになるので、記事を投稿した際の目安にするのもよいかもしれないなと思います。