Node.js(axios)からQiita APIを利用して指定したユーザーの記事を取得するメモ


たまに書くけどまとめてなかったので自分用メモとして残しておきます。

axiosを使ってQiita APIをアクセストークン付きで利用します。

## アクセストークンの取得

https://qiita.com/settings/tokens/new

> ![スクリーンショット 2022-10-22 17.15.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35387/e7566f42-ae84-a867-efe4-6e756b8e5331.png "スクリーンショット 2022-10-22 17.15.25.png")

スコープのチェックは`read_qiita`だけでOK

> ![スクリーンショット 2022-10-22 17.15.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35387/38fbb336-831f-142c-23ed-e19466ed23b9.png "スクリーンショット 2022-10-22 17.15.48.png")

## `/api/v2/users/:user_id/items`のサンプルレスポンス

ドキュメント迷子になりますが[こちら](https://qiita.com/api/v2/docs#get-apiv2usersuser_iditems)です。

https://qiita.com/api/v2/docs#get-apiv2usersuser_iditems

```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",
      "description": "This group is for developers.",
      "name": "Dev",
      "private": false,
      "updated_at": "2000-01-01T00:00:00+00:00",
      "url_name": "dev"
    },
    "id": "c686397e4a0f4f11683d",
    "likes_count": 100,
    "private": false,
    "reactions_count": 100,
    "stocks_count": 100,
    "tags": [
      {
        "name": "Ruby",
        "versions": [
          "0.0.1"
        ]
      }
    ],
    "title": "Example title",
    "updated_at": "2000-01-01T00:00:00+00:00",
    "url": "https://qiita.com/Qiita/items/c686397e4a0f4f11683d",
    "user": {
      "description": "Hello, world.",
      "facebook_id": "qiita",
      "followees_count": 100,
      "followers_count": 200,
      "github_login_name": "qiitan",
      "id": "qiita",
      "items_count": 300,
      "linkedin_id": "qiita",
      "location": "Tokyo, Japan",
      "name": "Qiita キータ",
      "organization": "Qiita 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,
    "team_membership": {
      "name": "Qiita キータ"
    }
  }
]
```

今回は

- id
- likes_count
- title

の3点を取得しましたが他にもいろいろ取れそうですね。

## 記事タイトルといいね数の一覧を取得していいね数でソート

記事タイトルといいね数の一覧を取得 -> いいね数でソートします。

取得したアクセストークンを入れて実行しましょう。

```js
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=100`;
    
    const res = await axios.get(ENDPOINT,{
        headers:{
            'Authorization': `Bearer <Qiitaのアクセストークン>`,
            'Content-Type': 'application/json'
        }
    });
    const items = res.data;
    
    //タイトルといいね数を取得
    const posts = items.map(post => {
        return({
            id: post.id,
            title: post.title,
            likes_count: post.likes_count
        })
    })
    
    //いいね数でソート
    posts.sort((a,b) => a.likes_count - b.likes_count);
    console.log(posts, posts.length);
}

main(`n0bisuke`); //ユーザーID: n0bisukeの記事を100件取得
```

```bash
$ node app.js

省略
  {
    id: '71809f777ac6dbf9be95',
    title: '💰お前らのゴールデンウィークはゴールドじゃない💰',
    likes_count: 87
  },
  {
    id: 'c16f77c7017a2d4018dd',
    title: '【初見にオススメ】Raspberry Pi PicoをブラウザだけでLチカする入門 (Web Serial API)',
    likes_count: 96
  }
] 100
```

## 参考
- Qiita APIドキュメント

https://qiita.com/api/v2/docs#%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC

- 検索時のオプション

https://help.qiita.com/ja/articles/qiita-search-options

- axiosでBearer

https://qiita.com/hirohero/items/8199cda2fada7432887e