Qiita APIで自分の記事に対するlikeの数などを計測する

DevRelとして、QiitaにStripeに関する記事を2年間書き続けており、記事のリアクション数を自動化した集計方法を紹介しています。APIを使用していいね数やストック数を取得し、いいねしたユーザー情報も取得できます。集めたデータを用いて記事の傾向を分析することができ、DBやBIツールに組み込んで活用することが可能です。興味のある方は試してみてください。

広告ここから
広告ここまで

目次

    DevRelとしてQiitaにStripeに関する記事を2年ほど書き続けていますが、業務で書くからには何かしらの数値をレポートする必要があります。レポート作成のための数値収集をある程度自動化させているので、今回はそのうちの1つ「Qiitaに公開した記事のリアクション(いいねなど)数」を集計する方法を紹介します。

    Qiitaの数字は、APIから取得できる

    Qiitaに公開した記事のいいね数やストック数は、Qiita APIから取得できます。

    itemsのAPIレスポンスに含まれていますので、例えば次のようなコードで記事ごとの数字やIDなどを配列にできます。

        const posts = await fetch(`https://qiita.com/api/v2/items?query=user%3A${USER_NAME}`, {
            headers: {
                Authorization: `Bearer ${pat}`
            },
        }).then(data => data.json())
        const data = (posts as Array<{
            id: string;
            title: string;
            likes_count: number;
            stocks_count: number;
            url: string;
        }>).map(post => ({
            id: post.id,
            title: post.title,
            likes_count: post.likes_count,
            stocks_count: post.stocks_count,
            url: post.url
        }))

    各項目のデータはこのような形で取得できます。

    [{
        "id": "xxxxxxxx",
        "title": "Example post",
        "url": "https://qiita.com/xxxx/items/123456789",
        "likes_count": 0,
        "stocks_count": 1,
    }]

    おまけ:「誰がLikeしたか」も調べたい場合

    データが取れることだけ確認して、レポートなどには使っていない処理ですが、せっかくなのでこちらも。

    items/{post_id}/likesのAPIを利用すると、「誰が、いつ、その記事にいいねしたか」を見ることができます。

        const posts = await fetch(`https://qiita.com/api/v2/items?query=user%3A${USER_NAME}`, {
            headers: {
                Authorization: `Bearer ${pat}`
            },
        }).then(data => data.json())
        const postData: Array<{
            title: string;
            url: string;
            likes: Array<{
                liked_at: string;
                name: string;
                profile_url: string;
            }>
        }>  = []
        for await (const post of posts as any) {
            const likes = await fetch(`https://qiita.com/api/v2/items/${post.id}/likes`, {
                headers: {
                    Authorization: `Bearer ${pat}`
                },
            })
            .then(data => data.json())
            .then((likes: any) => {
                return likes.map((like: any) => ({
                    liked_at: like.created_at,
                    name: like.user.name,
                    profile_url: `https://qiita.com/${like.user.id}`
                }))
            })
            postData.push({
                title: post.title,
                url: post.url,
                likes
            })
        }

    たとえばこのようなデータが取得できます。

    [  {
        "title": "Example post",
        "url": "https://qiita.com/xxxx/items/123456789",
        "likes": [
          {
            "liked_at": "2023-12-09T18:49:20+09:00",
            "name": "",
            "profile_url": "https://qiita.com/hideokamoto"
          }
        ]
      }
    ]

    DevRel視点ですと、「この人よくいいねしてくれているから、記事の傾向調べてみよう」みたいな用途でしょうか。DBや BIツール的なものに入れて調べることになるとは思いますので、興味がある方はお試しください。

    参考記事

    広告ここから
    広告ここまで
    Home
    Search
    Bookmark