はじめに
Qiita初投稿になります!
背景
タグ一覧を見て、ここまで網羅されているとは!と驚きました。
入門・解説記事も多く、無料の日本最大のプログラミング学習プラットフォームになっています。
Qiita APIで分析してみました。
方法
- ジャンルごとに記事(レッスン)がどれだけあるのかを調べる
- 投稿者の数を調べる *閲覧数1000回以上(先生とみなしています)
当初は、この方針で進めましたが、実装で取得できない項目がありました。※ソースコードの2.から3.へ変更しました。
ソースコード
- ジャンル(タグ)取得
- GET /api/v2/tags?page=1&per_page=100&sort=count
- 投稿者数取得
- GET /api/v2/users
- 取得件数1万件との制約があること、実際に投稿数0件のユーザが大半のため、記事(ite ms)から取得するように方針変更
- GET /api/v2/users
- 閲覧数1000以上の投稿者数取得
- GET /api/v2/item?page=1&per_page=100&query=page:>1000
const axios = require('axios');
const {createObjectCsvWriter} = require('csv-writer');
const tagCsvfilepath = __dirname+'/tags.csv'
const userCsvfilepath = __dirname+'/users.csv'
const _sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
async function main() {
/*********************
* 1.ジャンル(タグ)取得
*********************/
// CSV出力設定:ヘッダあり、"TAG,ITEMS_COUNT"
const tagCsvWriter = createObjectCsvWriter({
path: tagCsvfilepath,
header: [
{id: 'id', title: 'TAG'},
{id: 'items_count', title: 'ITEMS_COUNT'},
],
encoding:'utf8',
append :false,
});
// 1.ジャンル(タグ)取得
let tags_records = [];
for (var i=1; i <= 100; i++) {
let response = await axios.get('https://qiita.com/api/v2/tags?page=' + i + '&per_page=100&sort=count', {
headers: {
Authorization: `Bearer ${token}`,
}
});
if(response.data != null){
response.data.forEach(function( value ) {
if(value.items_count > 100) {
tags_records.push({'id':value.id, 'items_count':value.items_count});
}
});
await _sleep(1000);
}
}
// CSV出力
tagCsvWriter.writeRecords(tags_records)
.then(() => {
console.log('...Done[' + tagCsvfilepath + ']');
});
/*****************************
* 2.閲覧数100以上の投稿者数取得
*****************************/
// CSV出力設定:ヘッダあり、"ID,PAGE_VIEW_COUNT,CREATED_AT"
const userCsvWriter = createObjectCsvWriter({
path: userCsvfilepath,
header: [
{id: 'id', title: 'ID'},
{id: 'likes_count', title: 'LIKES_COUNT'},
{id: 'created_at', title: 'CREATED_AT'},
{id: 'url', title: 'URL'},
],
encoding:'utf8',
append :false,
});
// 3.閲覧数1000以上の投稿者数取得
let users_records = [];
for (var i=1; i <= 100; i++) {
`rgb(255,0,0)`let response = await axios.get('https://qiita.com//api/v2/items?page=' + i + '&per_page=100&query=page:>1000', {
headers: {
Authorization: `Bearer ${token}`,
}
});
if(response.data != null){
response.data.forEach(function( value ) {
// 注 page_views_count は null で返ってくる
users_records.push({'id':value.user.id, 'likes_count':value.likes_count, 'created_at':value.created_at, 'url':value.url});
});
await _sleep(1000);
}
}
// CSV出力
userCsvWriter.writeRecords(users_records)
.then(() => {
console.log('...Done[' + userCsvfilepath + ']');
});
タグ(ジャンル) | 投稿数(レッスン) |
---|---|
Python | 62449 |
JavaScript | 46943 |
Ruby | 36730 |
Rails | 34942 |
AWS | 30207 |
PHP | 25634 |
初心者 | 21615 |
Docker | 20960 |
Java | 19651 |
結果と考察
閲覧数1000件以上の投稿者(先生)の数 2000名程 と 100件以上の投稿(レッスン)があるジャンルの数 2000件強 から、
日本最大といってよいボリュームだと思いました。python だと 62449 件投稿があります。
Qiita10周年記念では、ユーザー70万人です。
最初は、API (users) で検討していましたが、制約・スキーマから、API (items) から
閲覧数100件以上の投稿者を取得するように方針変更しました。
*【QiitaAPI】自分以外のユーザーの記事のPV数(page_views_count)が取得出来ない
結論
投稿者(先生)も続々増えています、プログラミング学習プラットフォームとして発展しています。
無料で学習できる優れたプログラミング学習プラットフォームで、一般社会人のリスキリングに、
多大な寄与をしていると思います。
「これ、どうするんだっけ?」と検索すると、すぐにQiitaで見つかるという具合です。
また、さらなる、学び合いも起こっています。
感想
一般社会人リスキリングについて考えてみました。
ガイドとして、コースタグをつければ、取り組みやすいと思いました。
たとえば、タグ名に”Javascript本格入門” "新人プログラマ応援" "入門" なんてありましたよ。
参考にした記事