4
1

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の閲覧数・いいね数、手動で確認していませんか...?

Last updated at Posted at 2023-05-13

目次

  • はじめに
  • この記事をおすすめする人
  • Google App ScriptとQiita API Keyの取得の仕方
  • システム構成
  • 実装編
  • 最後に

1. はじめに

閲覧数・いいね数を手動で確認していませんか...?

自分が書いたqiitaの記事をログインして..記事押して..いいね閲覧数を確認して..
ってめんどくさいですよね...

でも昨日の書いた記事の反響が気になる!!人へ朗報です!!Qiita APIで手軽に自動化できるんです!

ゴールは以下のように、
毎朝10時に総閲覧数といいね合計数、ランキング形式で閲覧数順に10位の記事をLINEbotで提供してくれるシステムになります。

こちらの記事内容の通りにすれば簡単に実現できます

2. この記事をおすすめする人

  • 記事の反響の確認を自動化したい人
  • Qiita APIを使いたい人
  • Google App Scriptを始めて使う人

3. Google App ScriptとQiita API Keyの取得の仕方

Google App Scriotの使い方

※Google App Scriptの使い方を熟知している方は飛ばしてください。

Google App Scriptのはじめ方はこちら

定刻通りに設定するトリガーの設定方法はこちら

Qiita API keyの取得方法

まず、ログインしてください。

その後、アイコンボタンから、設定を押してください。

その後、アプリケーションを押し、個人用アクセストークンを発行します。

その後、トークンの説明を記述し、read_qiitaで発行しましょう。
write_qiitaは自動で記事を投稿できるそうです...(ユースケースが想像つきません。)

その後API keyが発行されるのでメモしておきましょう。
※API Keyは以後見れなくなるので、必ず控えておきましょう

LINE NotifyのAPI keyを取得するのはこちらを参照してください。

これで準備が整いました。

4. システム構成

(Gasの機能で定刻時刻をトリガーにします。)
① Qiita APIを用いて、Qiitaの記事を取得
② 各記事を配列に格納
③ 集計した内容を、閲覧数といいね順にソート
④ 処理結果をLINEnotifyに投げ、完了

5. 実装編

以下コピペで動きます。
※Qiita API トークンとLINE Notifyのトークンは各自入れてください。

function sendViewCount() {
  try {
    // Qiita API のエンドポイント
    const apiEndpoint = "https://qiita.com/api/v2/authenticated_user/items";
    // Qiita API のトークン
    const token = "";
    // LINE Notify のトークン
    const lineToken = "";
    // 今週の月曜日の日付を取得
    const today = new Date();
    const monday = new Date(today.setDate(today.getDate() - today.getDay() + 1));
    const mondayStr = Utilities.formatDate(monday, "JST", "yyyy/MM/dd");
    // Qiita API から自分が投稿した記事の情報を取得
    const options = {
      headers: {
        Authorization: `Bearer ${token}`,
      },
    };
    const response = UrlFetchApp.fetch(apiEndpoint, options);
    const items = JSON.parse(response.getContentText());
    // 総いいね数と総閲覧数
    let totalLikes = 0;
    let totalViews = 0;
    // 集計結果を格納する配列
    const viewCounts = [];
    const likeCounts = [];
    // 各記事の閲覧数といいね数を集計し、配列に格納
    items.forEach((item) => {
      const viewCount = item.page_views_count || 0;
      const likeCount = item.likes_count || 0;
      const title = item.title;
      totalViews += viewCount;
      totalLikes += likeCount;
      viewCounts.push({ title, viewCount, likeCount });
      likeCounts.push({ title, viewCount, likeCount });
    });
    // 集計結果を閲覧数といいね数の降順でソート
    viewCounts.sort((a, b) => b.viewCount - a.viewCount);
    likeCounts.sort((a, b) => b.likeCount - a.likeCount);
    // LINE Notify に送信するメッセージを作成
    var message = `【${mondayStr}】\n`;
    message += `総いいね数: ${totalLikes}\n`;
    message += `総閲覧数: ${totalViews}\n\n`;
    message += "【閲覧数ランキング】\n";
    viewCounts.slice(0, 10).forEach((count, index) => {
      message += `${index + 1}. ${count.title}: ${count.viewCount} views\n\n`;
    });
    message += "【いいね数ランキング】\n";
    likeCounts.slice(0, 5).forEach((count, index) => {
      message += `${index + 1}. ${count.title}: ${count.likeCount} likes\n\n`;
    });
    // LINE Notify にメッセージを送信
    const lineEndpoint = "https://notify-api.line.me/api/notify";
    const lineOptions = {
      method: "post",
      headers: {
        Authorization: `Bearer ${lineToken}`,
      },
      payload: {
        message: message,
      },
    };
    UrlFetchApp.fetch(lineEndpoint, lineOptions);
      } catch (error) {
    Logger.log(`エラーが発生しました: ${error.message}`);
  }
}


6. 最後に

是非自分なりにカスタマイズしてください!
読んでいただき、ありがとうございました!いいなと思えばいいねお願いいたします!

4
1
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
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?