ブックマークレットとQiita APIを使って記事一覧を取得する

## はじめに

Qiitaの記事を見ているとき、ユーザーが書かれた記事一覧をまとめて見たいと思ったことはありませんか？

ユーザーが書かれたQiitaの記事一覧をタグごとに個数分析したり、タグで記事一覧をフィルターして見たいと思ったことはありませんか？

本記事は、その方法を紹介します。

## 本記事の対象者

- ブックマークレットでQiitaの記事一覧を取得したい方
- 取得したQiitaの記事一覧をExcelで見たい方
- Qiitaの過去記事から有用な記事を効率的に発掘したい方

## 方法

その方法とは、私が作成したブックマークレットでQiitaの記事一覧を取得し、Excelに貼り付けて眺めることです。

つぎに、私が作成したVBAでタグの個数分析を行い、Excelのフィルター機能を使ってタグで記事一覧をフィルターします。

## 手順

1. 最初に、ブックマークレットを作成します。ウェブブラウザで新しいブックマークを追加して、名前欄に任意の名前を記入し、URL欄に [このリンク](https://raw.githubusercontent.com/querykuma/QiitaApiBookmarklet/main/dist/qiita_api_get_bookmark.js) の中身を貼り付けます。
2. つぎに、Qiitaのページ（タグか、検索結果か、ユーザーか、組織）を開きます。ユーザーの場合は選択肢（投稿かストック）を選びます。
3. ブックマークレットをクリックしてQiitaの記事一覧を取得します。取得した記事一覧は通常クリップボードにコピーされ、そのままExcelに添付できます。クリップボードにコピーできなかった場合、テキストファイルとしてダウンロードします。
4. 取得したQiitaの記事一覧をExcelに貼り付けます。
5. 以降の節に書いたExcel VBAでタグを個数分析します。
6. Excelのフィルター機能をつかってタグでフィルターしてQiitaの記事一覧を見ます。タグの前後にカンマをつけたものを含むもので手動でフィルターします。

## この方法の利点

Qiitaの記事一覧をシートごとにExcelファイルに保存して再利用することになるので、サーバーに負担をかけません。

タグごとに記事タイトルの一覧を眺めることになるので、人に負担をかけません。たとえば、JavaScriptとPythonの記事タイトルを交互に眺めるより、JavaScriptの記事タイトルだけを眺めてからPythonの記事タイトルだけを眺めたほうが人への負担が軽いです。

Qiitaのウェブページはページネーションで分割されていますが、この方法ではQiitaの記事一覧をまとめて眺められます。

Excelファイルとして眺めることによって、日時やストック数などの項目で並べ替えすることもでき、過去記事から有用な記事を効率的に発掘できます。

## Qiita APIを使って記事一覧を取得するブックマークレット

![screenshot](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311399/318d42e0-ec86-f063-b934-09836ef42335.png)

[このリポジトリ](https://github.com/querykuma/QiitaApiBookmarklet)に、webpackにかける前のブックマークレットのソースプログラムがあります。

[この記事](https://qiita.com/querykuma/items/e29a04e242e56ff31c7e)で、ブックマークレットを出力するためのwebpackのプラグインについて書きました。

### URLとQiita APIの対応

| タイプ                     | URL                                   | Qiita API                             |
| -------------------------- | ------------------------------------- | ------------------------------------- |
| タグ                       | qiita.com/<br />tags/$tag_id          | /api/v2/tags/<br />$tag_id/items      |
| 検索結果                   | qiita.com/<br />search?q=$query_id    | /api/v2/items<br />?query=$query_id   |
| ユーザー<br />（投稿）     | qiita.com/<br />$user_id              | /api/v2/users/<br />$user_id/items    |
| ユーザー<br />（ストック） | qiita.com/<br />$user_id              | /api/v2/users/<br />$user_id/stocks   |
| 組織                       | qiita.com/<br />organizations/$org_id | /api/v2/items<br />?query=org:$org_id |

### ブックマークレットが取得する項目

| title    | 記事タイトル           |
| -------- | ---------------------- |
| url      | URL                    |
| tags     | カンマ区切りのタグ一覧 |
| created  | 作成日時               |
| updated  | 更新日時               |
| comments | コメント数             |
| likes    | いいね数               |
| stocks   | ストック数             |
| id       | URLにもある記事id      |

Excelのソート機能で、日時やストック数などの項目で並べ替えすることもできます。

## タグを個数分析するExcel VBA

```vb
Sub タグを個数分析する()
    Dim ws_active As Worksheet
    Dim rng As Range
    Dim cell As Range
    Dim tags As Object
    Dim tag As Variant
    Dim ws_output As Worksheet
    Dim i As Long

    Set ws_active = ActiveSheet
    Set rng = ws_active.Range("C2:C" & ws_active.Cells(ws_active.Rows.Count, 3).End(xlUp).row)
    Set tags = CreateObject("Scripting.Dictionary")
    
    For Each cell In rng
        If cell.Value <> "" Then
            Dim tagList() As String
            tagList = Split(cell.Value, ",")
            For Each tag In tagList
                If tag <> "" Then
                    tags(tag) = tags(tag) + 1
                End If
            Next tag
        End If
    Next cell
    
    Set ws_output = ThisWorkbook.Sheets.Add
    ws_output.name = "タグ集計"
    ws_output.Cells(1, 1).Value = "タグ"
    ws_output.Cells(1, 2).Value = "個数"
    
    i = 2
    For Each tag In tags
        ws_output.Cells(i, 1).Value = "'" & tag
        ws_output.Cells(i, 2).Value = tags(tag)
        i = i + 1
    Next tag

    Set rng = ws_output.Range("A1:B" & ws_active.Cells(ws_active.Rows.Count, 2).End(xlUp).row)
    rng.Sort Key1:=Range("B1"), Order1:=xlDescending, Header:=xlYes
End Sub
```

## さいごに

ブックマークレットとExcelでQiitaの過去記事を効果的に発掘する方法について紹介してみました。

この記事が参考になったら幸いです。