Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
0
Help us understand the problem. What are the problem?

posted at

updated at

Organization

Githubのtrendリポジトリをslackに自動通知してみた

経緯

エンジニアとして、今世界ではどんなテクノロジーが話題になっていることを知っていることは重要です。でも、それって何を見れば良いのでしょうか?自分に合った情報源を今試行錯誤しながら作っています。情報源の1つとして、Githubのtrendリポジトリを見つけました。今回は、Githubのtrendリポジトリの情報をslackに自動通知したときのやり方を共有します。基本的には、自分が前に書いたこちらの記事でやってることと同じです。

trendリポジトリとは

trendリポジトリとは、Github上のリポジトリの中で特定の期間でのスター数が多いリポジトリです。下の写真のような感じです。
Screenshot from 2020-12-12 15-33-10.png
つまり、世界中のエンジニアがこれ面白いとか、めっちゃいいねって思うリポジトリが集結しています。指定のプログラミング言語で絞ることができます。自分は、pythonとC++を普段使うのでこの2つの情報を毎日定期的にslackに通知するようにしていきます。

手順

手順を簡単にまとめるとこんな感じです。

  • trendリポジトリのページからリポジトリのタイトル、リンク、説明をスクレイピング
  • incoming webhookを使ってslackに通知
  • 上で作成したソースコードをcloud functionsにデプロイ
  • cloud schedulerで定期通知

詳細は自分が前に書いた記事で紹介しているので、今回はソースコードのみ紹介します。

main.py
import requests
import slackweb
import time
from bs4 import BeautifulSoup



def main():
    urlName = "https://github.com/trending/python?since=daily"
    url = requests.get(urlName)
    soup = BeautifulSoup(url.content, "html.parser")
    py_groups = soup.find_all('article', class_='Box-row')

    for py_group in py_groups:
        tag_size = len(py_group)
        link_part = py_group.h1.a.get("href")
        title = link_part[1:]
        link_full = "https://github.com" + link_part
        attachments_all = []
        main_msg = {"title": title, "text": link_full}
        attachments_all.append(main_msg)
        #incoming webhookのurlを入れてください
        slack = slackweb.Slack(url="")
        slack.notify(attachments=attachments_all)
        if tag_size == 9:
            abst = py_group.p.text.lstrip()
            attachments_abst = []
            abst_msg = {"text": abst}
            attachments_abst.append(abst_msg)
            slack.notify(attachments=attachments_abst)
        time.sleep(1)

    urlName = "https://github.com/trending/c++?since=daily"
    url = requests.get(urlName)
    soup = BeautifulSoup(url.content, "html.parser")
    cpp_groups = soup.find_all('article', class_='Box-row')

    for cpp_group in cpp_groups:
        tag_size = len(cpp_group)
        link_part = cpp_group.h1.a.get("href")
        title = link_part[1:]
        link_full = "https://github.com" + link_part
        attachments_all = []
        main_msg = {"title": title, "text": link_full}
        attachments_all.append(main_msg)
        # incoming webhookのurlを入れてください
        slack = slackweb.Slack(url="")
        slack.notify(attachments=attachments_all)
        if tag_size == 9:
            abst = cpp_group.p.text.lstrip()
            attachments_abst = []
            abst_msg = {"text": abst}
            attachments_abst.append(abst_msg)
            slack.notify(attachments=attachments_abst)
        time.sleep(1)


if __name__ == '__main__':
    main()

今回はpythonとC++のtrendリポジトリを通知していますが、違う言語のときは、urlNameに指定の言語のページのurlを入れてください。完成するとこんな感じになります。
Screenshot from 2020-12-12 16-04-10.png

まとめ

Githubのtrendを見てると、当たり前ですが技術のトレンドがわかります。それ面白そうっていうリポジトリも結構あります。あとは、次の日にはランキングが結構変わっているので、世界の技術の進歩がかなり速いことを実感します。定期通知する方法として、こちらの記事の方法が気になるので、時間ある時にちゃんと見てみようと思います。

間違いや質問、ご意見等ありましたらお気軽にコメントください。頑張って答えますので(笑)。

Why not register and get more from Qiita?
  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
0
Help us understand the problem. What are the problem?