3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

お題は不問!Qiita Engineer Festa 2023で記事投稿!

Qiita API に Node.js の fetch() で認証つきのリクエストをする

Posted at

アクセストークンの発行

まず、認証のためのアクセストークン発行から実施します。公式ドキュメントの認証認可の項目どおりに進めていけば OK です

以下のいずれかの方法で発行できます

  • ユーザーの管理画面から発行
  • OAuth を利用した認可フロー

今回は自分自身のアクセストークンだけ取得できれば十分なので、管理画面からの発行をやってみます。

まずは ユーザーの管理画面 を開き、「新しくトークンを発行する」をクリックします

image.png

次は、アクセストークンの設定画面です

  • 説明を埋める
    • アクセストークンの管理用に、あとから見てもわかりやすいように書いておきます
  • スコープを決める
    • 今回は、読み込みだけできれば十分なので read_qiita だけにチェックを入れます
  • 「発行する」をクリックする

image.png

発行されたアクセストークンが一度だけ表示されるので、どこかに控えておきます

image.png

次回からはこのページを開いてもアクセストークンは表示されません。アクセストークンの削除ができるようになっています

image.png

公式 JavaScript ライブラリは古い

Qiita API を利用するための公式 JavaScript ライブラリ「qiita-js」が用意されていますが、最終更新が2016年で TypeScript のバージョンも1系になっており(現在は5系)、残念ながらあまり使用が推奨されるような感じではありませんでした

Node.js の fetch() で認証つきのリクエストをする

今回はこのような形に落ち着きました。たとえば、date(= 2023-07-05 など)を指定して、その日 Qiita に投稿された記事一覧を取得する TypeScript のコードです。

// アクセストークンは環境変数にセットして利用する
const accessToken = process.env.QIITA_API_ACCESS_TOKEN

// 指定した日に投稿された記事一覧を取得する関数
async function getItemsResponse(page: number, perPage: number, date: string) {
  // クエリパラメータの page, per_page, query を組み立てる
  const params = new URLSearchParams({ page: `${page}`, per_page: `${perPage}`, query: `created:>=${date} created:<=${date}` })
  // GET /api/v2/items にリクエストする
  const response = await fetch(
    `https://qiita.com/api/v2/items?${params}`,
    {
      // Authorization リクエストヘッダーに、Bearer の後にアクセストークンを付与する
      headers: {
        'Authorization': `Bearer ${accessToken}`,
      },
    }
  )
  return await response.json()
}

前回わかった「記事一覧 API の検索クエリでも記事の作成日時 created による絞り込みが使える」ということを利用しています。

この部分がそれです

query: `created:>=${date} created:<=${date}`

また、上記コード中で response.headersconsole.log() に入れて確認してみると、認証なしだと1時間あたり60回までのレートリミットだったところ、認証が通ってレートリミットが1,000回まで拡大されていることがわかります。

    'rate-limit' => { name: 'rate-limit', value: '1000' },
    'rate-remaining' => { name: 'rate-remaining', value: '929' },
    'rate-reset' => { name: 'rate-reset', value: '1688553383' },

無事に認証つきのリクエストをすることができました。次は、ここまでの機能を使って何かブラウザで確認できるようにしたいと思います :tada:

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?