1
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 API v2 + JavaScript(Node.js で axios を利用)で取得した記事情報のタグの扱いに関するメモ

Posted at

ちょっと試したいことがあり、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
1
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
1
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?