目次
- はじめに
- この記事をおすすめする人
- 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. 最後に
是非自分なりにカスタマイズしてください!
読んでいただき、ありがとうございました!いいなと思えばいいねお願いいたします!