TL;DR
QiitaAPI、Google Apps Script、Glitch、Firebaseを利用して、Qiitaいいね数ランキングAPIを作成しました。
ご活用ください!
https://us-central1-qiita-trend-web-scraping.cloudfunctions.net/qiitaScraiping/{type}/{YYYY-MM-DD}
{type}
- daily・・・日別ランキング
- weekly・・・週別ランキング
{YYYY-MM-DD}
ランキング登録日。
※2018/9/23以降が取得可能。
#####e.g.)
- URL
https://us-central1-qiita-trend-web-scraping.cloudfunctions.net/qiitaScraiping/weekly/2018-09-23 - Response
{
"data": [
{
"updated_at": "2018-09-19T12:29:34+09:00",
"url": "https://qiita.com/mikan3rd/items/ba4737023f08bb2ca161",
"user": {
"items_count": 24,
"name": "",
"followees_count": 19,
"id": "mikan3rd",
"website_url": "https://www.wantedly.com/users/809162",
"github_login_name": "mikan3rd",
"profile_image_url": "https://avatars2.githubusercontent.com/u/27764298?v=3",
"followers_count": 71,
"location": "Tokyo",
"twitter_screen_name": "mikan_the_third",
"organization": "",
"permanent_id": 178077,
"facebook_id": "",
"linkedin_id": "",
"description": "文系から転職したエンジニア2年生。\r\nReactとPythonがちょっと書ける"
},
"id": "ba4737023f08bb2ca161",
"tags": [
{
"versions": [],
"name": "Python"
},
{
"name": "Instagram",
"versions": []
},
{
"name": "GoogleCloudPlatform",
"versions": []
}
],
"created_at": "2018-09-17T21:12:27+09:00",
"title": "[2018] 個人でも使える!おすすめAPI一覧",
"likes_count": 1209
},
{
"url": "https://qiita.com/tkrkt/items/2fc9a9a59ce679aab728",
"user": {
"facebook_id": "",
"linkedin_id": "",
"description": "趣味エンジニアです。",
"items_count": 15,
"name": "",
"followees_count": 4,
"id": "tkrkt",
"website_url": "",
"github_login_name": "tkrkt",
"profile_image_url": "https://qiita-image-store.s3.amazonaws.com/0/60243/profile-images/1473695175",
"followers_count": 34,
"location": "",
"twitter_screen_name": null,
"organization": "",
"permanent_id": 60243
},
"id": "2fc9a9a59ce679aab728",
"tags": [
{
"versions": [],
"name": "コメント"
},
{
"name": "VSCode",
"versions": []
}
],
"created_at": "2018-09-20T21:19:45+09:00",
"title": "なぜ我々はいまだに文字列でコメントを書いているのか",
"likes_count": 909,
"updated_at": "2018-09-21T18:34:38+09:00"
},
{"以下略"}
]
}
はじめに
情報収集するにあたっていつもこの記事を読んでいます。お世話になってます!
【毎日自動更新】Qiitaのデイリーストックランキング!ウィークリーもあるよ
記事を読んでいるうちにふと考えました。これはどうやってランキングを作ってるんだ??
なので、学習も兼ねて車輪の再発明を行うことにしました。
(参考:「車輪の再発明」を否定するのは間違っているかもしれない)
目標
今回はとりあえず以下を目標とします。
- 無料サービスのみ利用する
- ランキングが自動更新される
- (せっかくなので)WebAPI化
QiitaAPI
何はともあれ、Qiitaのデータを集計し、ランキングを作成しなければいけません。Qiitaの全てのページを確認するのは現実的ではありませんので、QiitaAPIをスクレイピングすることとします。
特定の日付で作成された記事の一覧を取得し、いいね数で並べ替え、ランキングデータを構築します。
GoogleAppsScript
QiitaAPIをスクレイピングしランキングを自動更新する必要があるので、ジョブスケジューラの用に自動で起動する物が必要です。無料で利用でき、cronのように動かせるものを探したところ、Google Apps Scriptと出会いました。
こちらを活用し、とりあえずランキングデータは2時間置きに更新することとします。
Firebase
とりあえず無料で何かを作るのであればFirebaseが楽です。
そのうち、今回は以下が利用しやすそうです。
-
Cloud Functions
→WebAPIのエンドポイントとして利用。 -
Cloud Firestore
→自動更新したデータの保存先として利用。
ここまでの情報を組み合わせると、以下のような構成となります。
ただし、ここでCloudFunconsの無料枠ではGoogle以外のサービスにリクエストを投げることができないという題点が発生しました。
#Glitch
上記の問題点を解消するために、Glitchという無料のNode.jsサーバを活用します。
GlitchからQiitaAPIを呼び出し、データを整形した後にCloudFunctions経由でデータを登録します。
#完成形
ここまでで全て無料サービスでシステムをまとめ上げることができました。
上記を全てまとめると、以下のようになります。
#終わりに
無料のWebサービスのみの組み合わせでWebAPIが作成できました。
また、これを使ってQiita-Trend-PWAというサイトを作りました。
無料のサービスを組み合わせると割と何でもできます。
みなさんも無料サービスを是非ご活用ください!
#参考