見出し画像

【node.js+Qiita API】タグを使った記事検索 #Granvalley

1.はじめに

皆さんこんにちは。
グランバレイ社員兼釣りビギナーのJim2@GVです。

今回は、タイトルの通りnode.jsとQiita APIを使ってQiita記事を自動でタグ検索する方法を紹介します。

気になる方はぜひ見ていってくださいね!

実行環境
Windows10 64bit
node 12.18.0
npm 6.14.4


2.プログラム

まずはプログラムの全容です。

const request = require('request');

const QIITA_TOKEN = 取得したアクセストークン;

const URL = 'https://qiita.com/api/v2/items?'
          + 'page=1'
          + '&per_page=20'
          + '&query=tag%3APython+OR+tag%3Anode'
          + '+likes_count%3A%3E5';
           
request.get({
  url: URL,
  headers: {
    'Content-type': 'application/json',
    'Authorization': 'Bearer ' + QIITA_TOKEN
  },
  json: true

}, function (err, req, result) {
   const qiita_json = result.map(function (data) {
      return { "title": data.title, "url": data.url, "tag": JSON.stringify(data.tags) };
   });
     console.log(qiita_json);

});

最新の投稿から、指定のタグかつLGTM数が5以上の記事を20件取得するプログラムとなっています。

Qiita APIを利用するには、事前にアクセストークンの取得が必要ですが、次項以降でトークンの取得方法から紹介していきます!


2.Qiita APIのアクセストークン取得

アクセストークンはQiitaにユーザー登録をすると取得することができるようになります。

Qiitaトークン取得①

ユーザー登録の後、Qiitaサイトの右上のメニューから「設定」を選択します。

Qiitaトークン取得②

続いて「アプリケーション」メニューの「新しくトークンを発行する」を選択します。

Qiitaトークン取得③

今回は記事の情報を取得することができれば良いので、スコープは「read_qiita」のみを選択し「発行する」をクリックします。
これでアクセストークンを取得することができます!

** 注意 **
このアクセストークンは再び表示することができないので
必ずどこかに控えておきましょう!          


3.Qiita APIでの記事検索方法

アクセストークンの準備はできたので、続いてはQiita APIの使い方について紹介します。
Qiita APIでは「GET」「POST」「PUT」「PATCH」「DELETE」という5種類のリクエストを行うことができます。

今回使用するのは「GET」リクエストです。

他の人が投稿した内容を取得するには以下のURLへリクエストを行います。

https://qiita.com/api/v2/items?page=1&per_page=20

# page     : ページ番号
# per_page : 取得記事数

これだけですと、最近投稿されたすべての記事から20件取得されます。
なので、更に情報を付加して絞り込みを行います!

&query=tag%3APython+OR+tag%3Anode+likes_count%3A%3E5

先程のURLの後ろに「&query= ・・・」を付加すると、条件に合った記事の中から情報を取得できるようになります。
今回は、「tag」と「likes_count」という条件を付加しています。
「tag」はそのままタグのことですが、「likes_count」はLGTMの件数を指しています。

また、途中の「%3A」は「:」を、「%3E」は「>」を表しています。
これはURLエスケープのためにこのような表記にしています。
その他のURLエンコードは以下のリンクを参照ください。

このように条件を指定したURLに対しリクエストを行うことで、自分の読みたい記事を取得することができます!


4.GETリクエストで取得できる情報について

前項で紹介したURLに対してGETリクエストを行うと、記事1件に対し以下のような情報をJSON形式で取得することができます。

HTTP/1.1 200
Content-Type: application/json

[
 {
   "rendered_body": "<h1>Example</h1>",
   "body": "# Example",
   "coediting": false,
   "comments_count": 100,
   "created_at": "2000-01-01T00:00:00+00:00",
   "group": {
     "created_at": "2000-01-01T00:00:00+00:00",
     "id": 1,
     "name": "Dev",
     "private": false,
     "updated_at": "2000-01-01T00:00:00+00:00",

・
・
・

     "items_count": 300,
     "linkedin_id": "qiita",
     "location": "Tokyo, Japan",
     "name": "Qiita キータ",
     "organization": "Increments Inc",
     "permanent_id": 1,
     "profile_image_url": "https://s3-ap-northeast-1.amazonaws.com/qiita-image-store/0/88/ccf90b557a406157dbb9d2d7e543dae384dbb561/large.png?1575443439",
     "team_only": false,
     "twitter_screen_name": "qiita",
     "website_url": "https://qiita.com"
   },
   "page_views_count": 100
 }
]

長いので省略してしまいましたが、詳細は公式ドキュメントを参照してみてください!

このように多くの情報を取得することができるので、コンソールなどに出力する場合は、以下のようにタイトルやURLなどに絞って表示させると見やすいです!

# result : GETリクエストで取得したJSON形式の記事データ

const qiita_json = result.map(function (data) {
  return { "title": JSON.stringify(data.title), "url": JSON.stringify(data.url), "tag": JSON.stringify(data.tags) };
});
console.log(qiita_json);


5.まとめ

node.jsとQiita APIを使って、Qiita記事を自動でタグ検索する方法の紹介でしたが、いかがでしたか?
Qiita APIを利用すれば、自分の見たい記事を効率よく探すことができてとても便利ですね。

皆さんもぜひ試してみてください!


今回の記事が皆様のお役にたてばうれしいです。
最後までお読みいただきありがとうございました!


※グランバレイにご興味のある方はこちらをご覧ください!

この記事が気に入ったらサポートをしてみませんか?