Skip to content
sumnail

GitHub Trendingを定期通知するBotをGASで作成する

created at : 2025/02/26

GAS
GithubTrend
スクレイピング
Cheerio

開発目的

SNSなどで開発向け情報を探していると時間が一瞬で溶けてしまうので、GitHubのTrending情報をまとめて定期通知するBotを作成し、 情報収集を効率良くしたいと考えました。

GitHubのTrending情報は、以下のURLから確認できます。プログラミング言語や、期間を指定して取得することもできます。

開発手順

以下のステップで開発します。

  1. GitHubのTrending情報を取得する
  2. 整形した情報をメール送信する
  3. 定期実行の設定を行う

GitHubのTrending情報を取得する

今回はCheerioを使って、GitHubのTrending情報を取得します。

GASでCheerioを使うには、ライブラリを追加して使います。

ライブラリの追加方法は以下の通りです。

  1. スクリプトエディタを開く
  2. ライブラリ > ライブラリを追加
  3. スクリプトIDを入力して検索し、バージョンを指定して追加する

スクリプトIDは以下で検索します 。

bash
1ReeQ6WO8kKNxoaA_O0XEQ589cIrRvEBA9qcWpNqdOP17i47u6N9M5Xh0

ライブラリの追加が完了したら、以下のコードを使ってGitHubのTrending情報を取得します。

ts
const fetchGitHubTrending = () => {
  const url = "https://github.com/trending/python?since=weekly"; // パラメータを変更すればプログラミング言語や期間を指定可能
  const response = UrlFetchApp.fetch(url).getContentText();

  const dom = Cheerio.load(response);
  const items = dom(".Box-row");

  const trendingItems = items.map((i, row) => {
    const domRow = Cheerio.load(row);

    const title = domRow("a", ".h3")["0"]["attribs"]["href"];
    const description = domRow("p")["0"]["children"][0]["data"];
    const url = `https://github.com${title}`;
    const language = domRow("span[itemprop='programmingLanguage']")["0"][
      "children"
    ][0]["data"];
    const stars = domRow("div > a")
      ["2"]["children"][1]["data"].trim()
      .split(" ")[0];

    return {
      title: title,
      url: url,
      description: description,
      language: language,
      stars: stars,
    };
  });
  return trendingItems;
};

整形した情報をメール送信する

取得した情報を整形してメール送信します。

ts
const sendMail = () => {
  const trendList = fetchGitHubTrending();

  const subject = "GitHub Trending";
  let body = `GitHun Trending News\n
              \n`;

  for ([index, trend] of Object.entries(trendList)) {
    if (!trend.title) continue;

    const rank = Number(index) + 1;
    body += `
      Rank : ${rank}\n
      Title : ${trend.title}\n
      URL : ${trend.url}\n
      Description : ${trend.description}\n
      Language : ${trend.language}\n
      Stars : ${trend.stars}\n
      \n
    `;
  }

  try {
    GmailApp.sendEmail(
      "[email protected]", // [任意]送信先メールアドレス
      subject,
      body,
    );
  } catch (e) {
    // 送信処理に失敗した場合の処理
    Logger.log(e);
  }
};

定期実行の設定

トリガーを使って定期実行の設定を行います。

スクリプトエディタのメニューより トリガー > トリガーを追加 を選択します。

トリガー編集画面の以下の項目を設定します。

  • 実行する関数: sendMail
  • イベントのソース: 時間主導型
  • 時間ベースのトリガーのタイプ: 週一ベースのタイマーまたは、任意のタイミングを選択
  • 曜日(時間ベースのタイプを週一ベースにした場合)、時刻: 任意選択

以上で定期実行の設定が完了です。

まとめ

GitHubのTrending情報を取得し、整形してメール送信するBotをGASで開発しました。

今回は通知手段をメールにしましたが、SlackやLINEなど他の通知方法にも応用できます。 また、収集する情報をスプレッドシートに保存して、過去の情報を参照するなどの機能追加も可能です。

参考