GRANVALLEY

ブログBlog

node.js+Qiita APIでQiita記事の検索を効率化する

本記事は、「note.com」を使って、弊社先端技術開発グループが運営する「AIグループ@グランバレイ」で、2021年7月に掲載された記事を元に一部修正を加え、再掲載したものです。

はじめに

エンジニアの強い味方である技術情報共有サービスであるQiita。私たちもさまざまな疑問や課題に対して、解決策の糸口を探るために利用しています。
しかしながら、情報が多いため探すのに一苦労します。
今回、検索を効率するために、node.jsとQiita APIを使ってQiita記事を自動でタグ検索する方法をプログラムで実現。今回ご紹介します。

実行環境

  • ・Windows10 64bit
  • ・node 12.18.0
  • ・npm 6.14.4

プログラムの全容

最初にプログラムの全容をお見せいたします。


onst 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を利用するには、事前にアクセストークンの取得が必要ですが、次項以降でトークンの取得方法から紹介していきます!

Qiita APIを利用するための前準備

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

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

Qiitaトークン取得1

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

Qiitaトークン取得2

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

Qiitaトークン取得3

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

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

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件取得されます。
今回は、更に情報を付加して絞り込みを行います!


https://qiita.com/api/v2/items?page=1&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に対しリクエストを行うことで、自分の読みたい記事を取得することができます!

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

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


HTTP/1.1 200
Content-Type: application/json

[
 {
   "rendered_body": "

Example

", "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);

まとめ

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

皆様も是非ともお試しください!


本記事は、弊社先端技術開発グループが運営している「note」内の「AIグループ@グランバレイ」の記事を一部修正を加え転載しております。
https://note.com/gvaiblog/n/n5cfc1b186360

※ その他の会社名、製品名は各社の登録商標または商標です。
※ 記事の内容は記事公開時点での情報です。閲覧頂いた時点では異なる可能性がございます。