DevRelJavaScript

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ツール的なものに入れて調べることになるとは思いますので、興味がある方はお試しください。

参考記事

ブックマークや限定記事(予定)など

WP Kyotoサポーター募集中

WordPressやフロントエンドアプリのホスティング、Algolia・AWSなどのサービス利用料を支援する「WP Kyotoサポーター」を募集しています。
月額または年額の有料プランを契約すると、ブックマーク機能などのサポーター限定機能がご利用いただけます。

14日間のトライアルも用意しておりますので、「このサイトよく見るな」という方はぜひご検討ください。

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

Related Category posts