はじめに
はじめまして、JavaSqript初心者です。
恥ずかしながらAPIについても数日前に初めて意味を知った素人。当然ながらQiitaAPIに触れたのも初めて。知識を武器にできるよう、楽しみながら学んで行きたいです。
目的
どうせやるなら自分が好奇心を持てるものを。
思い浮かんだのは、最近よく耳にするクラウドファンディング(以下、CF)について。
数年前に小学校の同級生が、子供の頃からの夢を実現させるためCFを達成させ企業した話を聞き、とても夢があると感動した。
2021年10月現在はコロナ禍真っ只中。私がCFで初めて支援したのも昨年コロナが蔓延し始めた頃だった。
ちなみに当時支援したのは、こちら。
プリントごっこを思い出す、昔懐かしい印刷が楽しめる印刷所。シルクスクリーン発注をして自分で手刷り印刷もできるので、いつか利用してみたいなぁと思っていたところ、経営難となり経営存続を賭けてCFが発起された。(結果は是非、リンク先からご確認を!)
同じようにコロナの影響でCFに救いの手を伸ばした企業、個人も多いはず。
Qiita内でも、コロナ禍前後(2020年3月)でCFに関する変化があったのか、調べてみる。
使用した環境
Visual Studio Code 1.61.0
Node.js 7.24.0
確認方法
やりたいことは、以下の3つ。
本文に「クラウドファンディング」を使用している記事を検索
検索した記事の作成日を集計
コロナ前後(2020年3月前後)で記事数に変化があるのか確認
本文に「クラウドファンディング」を含む記事を検索し、作成日を出力する
まずは単純に、Qiita内で本文に「クラウドファンディング」という単語を使用している記事の情報を抽出する。
出力にcreated_atを指定して、記事の作成日付を出力する。
// axiosモジュールを読み込む
const axios = require("axios");
// main()関数を定義する
async function main() {
// QiitaAPIで本文に「クラウドファンディング」を含む記事を検索
let response = await axios.get(
"https://qiita.com/api/v2/items?per_page=100&query="+encodeURIComponent("クラウドファンディング")
);
// 結果を出力(繰り返し)
for (let i = 0; i < response.data.length; i++) {
console.log(response.data[i].created_at);
}
}
main();
結果(失敗)
pageのパラメータ指定なしでper_page=100と記載したため、現時点から過去100件分しかデータが取得できなかった。
これだと、2018年12月からのデータしか取れていない。そのため8件と極端に少なくなっている。データとして非常に気持ち悪い結果になった。せめて2018年について、1年分データを取りたい。
件数を制限することなく、2018年1月から情報を取得するにはどうしたらよいか?
本文に「クラウドファンディング」を含む記事の総件数を確認する
取得件数の上限が100件だと、件数が取得しきれないということが分かった。
そもそも「クラウドファンディング」で検索した場合の関連記事は全部で何件あるのか?
出力指定に、console.log(response.headers); を指定。
返ってきたデータからtotal-countを出力し、検索対象の総件数を確認する。
Total-Countについて
また、ページを指定できるAPIでは、要素の合計数が Total-Count レスポンスヘッダに含まれます。
// axiosモジュールを読み込む
const axios = require('axios');
// main()関数を定義する
async function main() {
// QiitaAPIで「クラウドファンディング」という単語で記事を検索
let response = await axios.get('https://qiita.com/api/v2/items?query=' +
encodeURIComponent('クラウドファンディング') );
//取得した記事の情報を抽出
console.log(response.headers);
}
main();
2021年10月現在、185件の記事があることを確認できたので、次は先ほど取得し損ねた2018年分が丸っと入ったデータを取得する。
指定した年月以降のデータを取得する
今回取得したいデータはMAXで185件ということを確認したので、出力上限を2ページ(200件分)に設定する。
2018年1月分から取得したいので、encodeURIComponent('>=2018-01')を指定する。
// axiosモジュールを読み込む
const axios = require("axios");
// main()関数を定義する
async function main(page) {
for(let page=1; page<=2; page++) {
//「クラウドファンディング」という単語を含み、2018年1月~現在の期間に作成された記事を検索
let response = await axios.get(
'https://qiita.com/api/v2/items?page='
+ page + '&per_page=100&query='
+ encodeURIComponent('クラウドファンディング')
+ '+created:' + encodeURIComponent('>=2018-01')
);
// 結果を出力(繰り返し)
for (let i = 0; i < response.data.length; i++) {
console.log(response.data[i].created_at);
}
}
}
main();
取得の上限を200件にしたが、もっと件数を取得したい場合は、page<=2 の数字を変更する。
結果
・2018年~2021年10月現在の集計結果
取得したデータ結果を確認すると、2018-01-01のデータが含まれているので、データを上手く取得することができた。
グラフ化してみても、2020年で件数が確かに増えている。
しかし正直もっと分かりやすく差が出るかと思っていたが、それほど差がないようにも見える。(2018年の件数が予想よりも多かった。)
・2020年の集計結果
2020年のデータを月単位で比較すると、分かりやすく3月(コロナ後)で数が増えていることが確認できた。
すべてのデータを取得する
せっかくなので、2018年以前も含めたすべてのデータも取得する。
先のコードの年月指定の行を削除して実行。
// axiosモジュールを読み込む
const axios = require("axios");
// main()関数を定義する
async function main(page) {
for(let page=1; page<=2; page++) {
//「クラウドファンディング」という単語を含む記事を検索
let response = await axios.get(
'https://qiita.com/api/v2/items?page='
+ page + '&per_page=100&query='
+ encodeURIComponent('クラウドファンディング')
);
// 結果を出力(繰り返し)
for (let i = 0; i < response.data.length; i++) {
console.log(response.data[i].created_at);
}
}
}
main();
結果をグラフ化すると、CFへの関心度が如実に表れているように見える。
CAMPFIREによれば、日本で初めてのCFは2011年9月とのこと。(参考:クラウドファンディングのはじまり)
Qiitaで「クラウドファンディング」文言を含む記事が初投稿された2013年は、CFサービスMakuakeが提供開始した年でもあり、世間的にCFに関する認知度が高まったと推測される。
月別の比較結果
ちなみに2013年から2021年10月現在時点で「クラウドファンディング」文言が入った記事の投稿数が一番多かった月は、ダントツで12月だった。
実際の記事を確認すると、文言がタイトルに入ったリンクを貼った記事が複数投稿されているのでその影響もあるようだが、それにしても突出して件数が多いので興味深い。
12月になるとCF関連で何かあるのだろうか?
結論
コロナ後に、CFへの関心は高まったと言える。
12月になると、Qiitaに「クラウドファンディング」の文言が含まれた記事が多く投稿される。
最後に
データの集計や分析をするのに、QiitaAPIを活用して効率よくデータが取得することができた。
今回はデータの加工については手作業で実施してしまったが、csv形式での出力、グラフ化、日付のFROM TOで指定、等を自動で取得できると理想的である。
データを数字としてだけでなく、グラフや表で可視化すると新たな発見があったりして、とても興味深かった。
数字に変化があったとき、世間もまた変化していて、それがどんなものなのか調べたり考えたりすることで思わぬ気づきがあると知ることができた。比較数が少ないとそれほど差がないように見えるが、比較対象を増やすことで緩やかな変化に気づくこともあるというのも、大きな発見だった。
2021年データについてまだあと2ヶ月分のデータが空白なので、2022年になったら改めて取得して比較したい。
結果が今から楽しみである。
参考記事
QiitaAPIで2020年投稿のストック数が多い記事のタグ情報を調べてみた
Qiita APIで投稿一覧を取得するときに、検索クエリをORでつなぐ時の注意点
↧