Help us understand the problem. What is going on with this article?

Qiitaいいね数ランキングAPIの作成

More than 1 year has passed since last update.

TL;DR

QiitaAPIGoogle Apps ScriptGlitchFirebaseを利用して、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.)
{
  "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が楽です。
そのうち、今回は以下が利用しやすそうです。

ここまでの情報を組み合わせると、以下のような構成となります。
scraiping-flow_1.png

ただし、ここでCloudFunconsの無料枠ではGoogle以外のサービスにリクエストを投げることができないという題点が発生しました。

Glitch

上記の問題点を解消するために、Glitchという無料のNode.jsサーバを活用します。
GlitchからQiitaAPIを呼び出し、データを整形した後にCloudFunctions経由でデータを登録します。

完成形

ここまでで全て無料サービスでシステムをまとめ上げることができました。
上記を全てまとめると、以下のようになります。
scraiping-flow.png
getAPI-flow.png

終わりに

無料のWebサービスのみの組み合わせでWebAPIが作成できました。
また、これを使ってQiita-Trend-PWAというサイトを作りました。
無料のサービスを組み合わせると割と何でもできます。

みなさんも無料サービスを是非ご活用ください!

参考

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away