Help us understand the problem. What is going on with this article?

Qiitaのトレンド情報を通知してくれるGASを書いた

More than 1 year has passed since last update.

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});
}

設定の仕方

  1. Google Driveで新規のGASプロジェクトを作る
  2. Google Apps ScriptからChatWork APIを使って投稿する を参考にチャットワークのライブラリを追加する
  3. APIトークンとルームIDを自分のものに書き換える
  4. 編集>現在のプロジェクトのトリガーから定期実行の設定を入れる。関数はmyFunctionを選択。
  5. あとは定期実行を待つのみ

終わりに

HTMLをmessageに変換するまでのところはもっと綺麗に書ける気はしますね。
Pythonでスクレイピングをしたことはあったんですが、GASスクレイピングの仕様やhyperapp周りの対応に手間取りました。
とは言っても、環境構築不要のGASで便利なスクリプトを書けたのは良かったかなと思います。

もし良ければご利用ください。

関連リンク

僕のレポジトリ
Google Apps ScriptからChatWork APIを使って投稿する

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away