Webエンジニアを初めて1年弱、ちょっと勉強のギアを上げたいなと色々調べ物をしていたところ「まずは日々の情報収集から始めねば」というところに行き当たりました。
「やっぱりちゃんとQiita見に行かないとだよなあ」と思ったものの、毎日見に行くのめんどくさいなと思ったので(だから今こまめに見に行ってない)、自動で通知してくれるGASのプログラムを書きました。
毎朝チャットに届くので仕事始めのタイミングでさらっと目を通すだけで簡単にトレンドを追えるようになりました。
コード
qiita_trend.js
// 本当は拡張子はgsだけども見やすさのためにjsに変えてます。
function myFunction() {
// HTMLのデータを取得する
var url = 'https://qiita.com';
var response = UrlFetchApp.fetch(url);
var html = response.getContentText('UTF-8');
// 取得したHTMLを通知用のテキストに加工する
var lines = html.split('>'); // 1行のテキストとして返ってくるので閉じタグで分割する
var rank_line = lines.filter(isRankLine); // ランキングデータが入ってる行のみを返す
var rank_json = getRankJson(rank_line[0]); // ランキングデータの行をjson形式に変換する
var message = createMessage(rank_json['trend']['edges']); // json形式のデータを通知用のテキストに変換する
// jsonを加工してチャットワークに通知する
notifyChatwork(message);
}
function isRankLine(line) {
return line.match(/data\-hyperapp\-app\=\"Trend\"/);
}
function getRankJson(line) {
line = line.replace(/"/g, '"');
var start = line.indexOf('{"trend"');
var end = line.indexOf('}}}]}}') + '}}}]}}'.length;
var data = line.substring(start, end);
return JSON.parse(data);
}
function createMessage(json){
message = '';
json.forEach(function (data) {
var author = data['node']['author']['urlName'];
var uuid = data['node']['uuid'];
var title = data['node']['title'];
var url = 'https://qiita.com/' + author + '/items/' + uuid;
var likes = data['node']['likesCount'];
message += title + '\n';
message += url + '\n';
message += likes + 'いいね\n\n';
});
return message;
}
function notifyChatwork(message) {
var client = ChatWorkClient.factory({token: 'your api token'});
client.sendMessage({room_id: 'your room id', body: message});
}
設定の仕方
- Google Driveで新規のGASプロジェクトを作る
- Google Apps ScriptからChatWork APIを使って投稿する を参考にチャットワークのライブラリを追加する
- APIトークンとルームIDを自分のものに書き換える
-
編集>現在のプロジェクトのトリガー
から定期実行の設定を入れる。関数はmyFunction
を選択。 - あとは定期実行を待つのみ
終わりに
HTMLをmessageに変換するまでのところはもっと綺麗に書ける気はしますね。
Pythonでスクレイピングをしたことはあったんですが、GASスクレイピングの仕様やhyperapp周りの対応に手間取りました。
とは言っても、環境構築不要のGASで便利なスクリプトを書けたのは良かったかなと思います。
もし良ければご利用ください。