Qiita:Teamのさまざまな統計情報などをQiita APIを使って得ることが出来ます。
前回はGoogle Apps ScriptからQiita APIを使って、Qiita:Teamの情報を得る方法(ユーザー一覧の入手) でQiita APIをGAS (Google Apps Script) から利用する手順と簡単な例としてユーザー一覧を取得しました。
今回は、ユーザーの投稿や投稿数を取得する方法を解説します。
Qiita APIの利用
Qiita APIを利用するための、アクセストークンの取得やGASでの設定などは、前回の投稿をご覧ください。今回もそこで解説したqiitaAPI()
を利用します。
ユーザーの投稿の取得
ユーザーの投稿数は/api/v2/items
(https://qiita.com/api/v2/docs#get-apiv2items) で取得できます。
自分のチームのURL (https経由) の/api/v2/items
にGETアクセスすることで投稿一覧は得られます。パラメータを付けないと、該当のQiita:Teamの全ユーザーによる全投稿が得られますが、検索クエリを指定することでユーザーや投稿日などで絞り込むことも出来ます。
検索クエリはQiita:Teamで利用できる検索オプションが使えます。以下のようなオプションがあります。
項目 | オプション |
---|---|
タイトルに「2015」を含んでいる | title:2015 |
「Ruby」タグが付いている | tag:Ruby |
yaottiが作成した | user:yaotti |
2015-10-09以降に作成された | created:>2015-10-09 |
利用可能なすべての検索オプションはヘルプに記載されています。
ここではユーザーごとの投稿を取得するため、user:
検索オプションを用います。また、投稿日で絞り込みも行うため、created:
オプションも指定します。
次のgetItems()
では、ユーザーID (id) と投稿日の開始日 (startDate)、終了日 (endDate) で絞り込んで、その結果の投稿を取得しています。
getItems('yaotti', '2016-06-01', '2016-06-15')
のように利用することを想定しています。これにより、ユーザーyaottiの2016年6月1日から2016年6月15日までの投稿が取得できます。
function getItems(id, startDate, endDate){
/* ページネーションの設定として、1ページごと要素数は100、取得する要素は1ページ目のものとしています。 */
var per_page = 100;
var page = 1;
var parameters = '?per_page=' + per_page + '&page=' + page;
/* 検索クエリとして、IDと投稿日で絞り込みます。 */
var queryString = 'user:' + id + '+created:>' + startDate + '+created:<' + endDate;
queryString = 'query=' + encodeURI(queryString); // URLエンコーディング
parameters += '&' + queryString; // ページネーションと合わせてパラメータを生成
var response = qiitaAPI('https://チーム名.qiita.com/api/v2/items' + '?' + queryString, 'GET', '');
var json = response.getContentText();
var data = JSON.parse(json);
var items = [];
/* 最初のページの要素を取得 */
for (i = 0; i < data.length; i++) {
var item ={'id':data[i].id, 'created_at': data[i].created_at, 'userid': data[i].user.id}; // 例として、ID(投稿のID)と投稿日、ユーザーIDを取得しています
items.push(item);
}
/* 総要素数を取得 */
var headers = response.getHeaders();
var total_count = headers['Total-Count'];
/* 要素すべてを取得するために、2ページ目以降にアクセス */
for (page = 2; total_count / per_page >= 1; page++) {
var parameters = '?per_page=' + per_page + '&page=' + page + queryString;
var response = qiitaAPI('https://チーム名.qiita.com/api/v2/items' + '?' + queryString, 'GET', '');
var json = response.getContentText();
var data = JSON.parse(json);
var items = [];
for (i = 0; i < data.length; i++) {
var item ={'id':data[i].id, 'created_at': data[i].created_at, 'userid': data[i].user.id}; // ID(投稿のID)と投稿日、ユーザーIDを取得
items.push(item);
}
total_count = total_count - per_page;
}
return items;
}
ここでは、例として、投稿IDと投稿日、ユーザーIDを取得していますが、その他にも/API/v2/itemsの解説にあるようなプロパティを取得できます。
ユーザーの投稿数の取得
単にユーザーの投稿数だけを取得したい場合には、APIにGETアクセスし得られるTotal-Count
を取得します。
function getNumOfItemsPerId(id, startDate, endDate) {
/* Total-Countを得られれば良いだけなので、ページネーションの設定として、1ページごと要素数は1、取得する要素は1ページ目のものとしています。 */
var per_page = 1;
var page = 1;
var parameters = '?per_page=' + per_page + '&page=' + page;
/* 検索クエリとして、IDと投稿日で絞り込みます。 */
var queryString = 'user:' + id + '+created:>' + startDate + '+created:<' + endDate;
queryString = 'query=' + encodeURI(queryString); // URLエンコーディング
parameters += '&' + queryString; // ページネーションと合わせてパラメータを生成
var response = qiitaAPI('https://チーム名.qiita.com/api/v2/items' + parameters, 'GET', '');
var headers = response.getHeaders();
return headers['Total-Count'];
}
このgetNumOfItemsPerId()
を各ユーザーに対して呼び出すことで、ユーザーの期間ごとの投稿数などを把握できます。スプレッドシートで統計を取ったり、前の週の投稿数トップ10を週明けにSlackのチャンネルに投げるなどの応用ができます。