LoginSignup
0

posted at

Organization

Qiita API v2 + JavaScript(Node.js で axios を利用)で取得した記事情報のタグの扱いに関するメモ

ちょっと試したいことがあり、Qiita API v2 による記事情報の取得に手をつけてみました。

その時に以下の @n0bisuke さんの記事を参考にしつつ実装を試していたら、タグの扱いが(自分が想定していた内容に対して)少しだけ特殊だったので、その対応などに関するメモです。

●Node.js(axios)からQiita APIを利用して指定したユーザーの記事を取得するメモ - Qiita
 https://qiita.com/n0bisuke/items/40d0c7831d22c4f1868b

Qiita API v2 で取得できるタグ情報の扱い

タグ情報の仕様

Node.js を用いて Qiita API v2 で取得した記事情報について、タグに関する部分をそのままログ出力すると、以下になりました。

tags: [ [Object], [Object], [Object], [Object], [Object] ],

この部分の仕様は Qiita API v2ドキュメントの「タギング」の項目に書かれていました。
タグについて

タグで使われている名前だけが得られるのではなく、その名前を格納した部分(name)と合わせて versions という情報もセットになっているようです。

これについて、最近書いていた、ChatGPT API に関する記事 に関する情報取得で、 JSON.stringify() を使って出力し、中身を確かめてみました。実際に出力してみると、仕様のとおの以下が得られました。
JSON.stringify()で出力

これに関して、自分的には、タグに関して得たい出力は以下の形でした。
最終的にやりたいこと

タグの name の部分のみを配列で取り出す

自分が想定した出力が得られるよう、このタグの name の部分のみを配列で取り出す必要があるため、map() を使って処理してみます。

変更前と変更後は以下のとおりで、 post.tagspost.tags.map((tag) => tag.name) にしただけです。

変更前
  const posts = items.map((post) => {
    return {
      ...
      title: post.title,
      tags: post.tags,
      ...
    };
  });
変更後
  const posts = items.map((post) => {
    return {
      ...
      title: post.title,
      tags: post.tags.map((tag) => tag.name),
      ...
    };
  });

これで、無事に自分が取得したかった形式で、タグを取り出すことができました。

プログラム全体

プログラムについて、他の部分も含むものを掲載します。

最適限、「Qiita のアクセストークン」と「QiitaのユーザーID」は書きかえが必要なので、ご注意ください。

const axios = require("axios");
const BASE_URL = `https://qiita.com/api/v2`;

const main = async (USREID) => {
  const ENDPOINT = `${BASE_URL}/users/${USREID}/items?page=1&per_page=3`; // テスト用に 3記事のみ取得

  const res = await axios.get(ENDPOINT, {
    headers: {
      Authorization: `Bearer <Qiitaのアクセストークン>`, // 要書き換え1
      "Content-Type": "application/json",
    },
  });
  const items = res.data;

  // 取得するのは「タイトル、作成日、タグ」 
  const posts = items.map((post) => {
    return {
      title: post.title,
      created_at: post.created_at,
      tags: post.tags.map((tag) => tag.name),
    };
  });

  console.log(posts, posts.length);
};

main(`<QiitaのユーザーID>`); // 要書き換え2

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
What you can do with signing up
0