【やってみよう】GitHub ActionsでTwitterフォロワー数を毎日LINEで通知する

IT

GitHub Actionsを知るため、まずはPythonプログラムを作成しました。
回り道のようですが、急がば回れです。

今回やったこと

PythonでのAPIの叩き方から、GitHub Actionsでのプログラム実行まで一通りやりました。

Twitterのフォロワー数をLINEで通知するプログラムをPythonで作成して、そのプログラムをGitHub Actionsで定期的に実行してみました。

UdemyのAPI講座で紹介されていた内容です。サクサクっとやってみました。

プログラミングを業務で活かす!PythonによるWeb API活用講座
プログラミング初学者必見!Pythonの基礎は終えたけど、もう少し実用的な内容に取り組んでみたい、業務に活かせそうなスキルを身につけたいと考えている方向けに、Pythonを用いたWeb API活用方法をわかりやすくお伝えします。

今私が知りたかったこと(API、Pythonプログラム、GitHub Actions)を一貫して学べる良い講座だと思います。

GitHub Actions理解のロードマップ(私の考え)

主役はプログラム、
GitHubは名わき役。

GitHub Actionsの一つの活用方法として、GitHub上のファイル(プログラムソースコードなど)を実行することができます。プログラムを実際に書いてみてGitHub上に配置、実行させてみることが理解の助けになると考えています。

そもそも「動かしたいプログラム」がなければ、GitHub Actionsの理解度が激減します!

くどいようですが大事なことなので言います、

GitHub Actionsを理解するために「動かしたいプログラム」を実際に作りましょう!

つまり私の考えるGitHub Actions理解のためのロードマップはこうです↓

1.プログラムを書く
2.GitHubにプログラム(ソースコード)を置く
3.GitHub Actionsでプログラムを動かす

では、今回やったことをさらっとまとめておきます。

PythonからWebAPIの叩き方の理解

PythonからWebAPIを叩くには、requiestsモジュールをインポートして、「get」や「post」といったメソッドを使うべし。以上です。これで、結果を取得できます。

Twitterの情報取得するPythonプログラム作成

Twitterから情報を取得するため、3つのステップが必要です。

1つ目のTwitter Developerを使用するための申請が面倒くさいかもしれません。

Twitter Developer Portalを使用するための申請

APIの利用目的などを英語でフォームに記載して申請する必要があります。
以下のサイトに詳しく書かれているので参考にしてください。

2021年度版 Twitter API利用申請の例文からAPIキーの取得まで詳しく解説 | 新宿のホームページ制作会社 ITTI(イッティ)

私が申請した際の申請理由などまとめておきます。
ある程度の文字数(200文字以上)が求められるので、英語に自信のない人はGoogle翻訳などを駆使して頑張りましょう。

1.Twitter APIやデータの利用目的はなんや?

 → Twitterに自分のWebサイトの情報を自動投稿したい、逆にWebサイトにTwitter情報を投稿したい。Twitterフォロワー数を通知したい。

1. I want to use Twitter API to automatically display what I posted on Twitter on my Website.
2. On the contrary, I want to post the information posted on my website on Twitter. (About once every two days)
3. I want LINE to notify me of the number of followers on Twitter (once a week)

2.Twitterデータをどのように使うか述べえや?

 → 自動ツイートを基に人気のあるツイートを分析したいし、手動ツイートとの比較もしたい。

I want to analyze popular tweets based on automatic tweets from my website.
I'm also looking at comparisons with manually tweeted cases.

3.機能の利用計画を示してんか?

 → 私のアプリからツイート機能を使い、将来的には「いいね」なども使う計画である。

My application uses a tweet function.
I plan to extend the functionality and use likes in the future.

4.どんな感じでTwitterデータを外部で使うねんや?

 → 私のWebサイトで最新のツイートを表示して、WebサイトからTwitterへのコンバージョンに活かしたい。

I would like to see my latest Tweet from my website.
This is to increase the conversion rate from your website to Twitter.

申請が通ったら Twitter Developer Potalが使えるようになります。

Twitter Developer Portalでプロジェクトを作成

ポータルでプロジェクト(つまり、Twitter API)を作成します。

詳しくは書きませんが、これでツイートの取得や投稿をするためのアクセスキーを発行できます。

Twitter API経由でツイート情報を取得するPythonプログラム作成

ここでようやくPythonプログラムの登場です。
Tweepyというモジュールを使って、Twitter API経由でツイート取得や投稿が行えます。

1.まずはTwitter APIを使用するための認証まわりをコーディング

import tweepy
import json

# Twitter認証
with open("twitter.json") as key_file:
    twitter_keys = json.load(key_file)
consumer_key = twitter_keys["consumer_key"]
consumer_secret = twitter_keys["consumer_secret"]
access_token = twitter_keys["access_token"]
access_token_secret = twitter_keys["access_token_secret"]
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)

2.投稿の取得など

#public tweet取得
public_tweets = api.home_timeline()
for tweet in public_tweets:
    print(tweet.text)

#自分の情報取得
me = api.me()
print(f"{me.created_at}")   #Twitterアカウント作成日
print(f"{me.description}")  #プロフィール分
print(f"{me.url}")          #URL
print(f"{me.followers()}")  #フォロワー情報をリスト形式で取得

#特定の人のTwitter
user = api.get_user('@MSFT365Status')
print(f"{user.followers_count}")    #フォロワー数

お作法さえわかれば非常に簡単ですね。

LINE Notifyを使ってLINEにTwitterの情報を通知

LINE Notifyというサービスを使ってTwitterの情報をLINEに通知します。

LINE Notifyのアクセストークンを発行

説明割愛です。トークンを発行します。

LINE NotifyLINE Notifyに投稿するPythonプログラムを作成

基本は、requestsモジュールでpostするのみです。

import json
import requests
with open("line.json") as token_file:
    line_json = json.load(token_file)
LINE_NOTIFY_TOKEN = line_json["LINE_NOTIFY_TOKEN"]

def notify_message(message):
    # エンドポイント
    url = "https://notify-api.line.me/api/notify"
    # 内容を作成
    headers = {
        "Authorization": f"Bearer {LINE_NOTIFY_TOKEN}"
    }
    data = {
        "message": message
    }
    #メッセージをポスト
    requests.post(
        url,
        headers=headers,
        data=data
    )

notify_message("投稿したいメッセージを書きます(*´ω`)")

こんな数行でLINEに投稿するプログラムを書くことができます。

Twitter情報取得とLINE投稿を合わせたPythonプログラム作成

Twitter情報取得とLINE投稿のどちらもPythonプログラムで作成しているため、2つを合わせます。

ファイル数にして5ファイルです。アクセストークンは別ファイル(JSONファイル)に切り出してプログラミングコードとは切り離しています。

【main.py】メイン実行プログラム

import line
import twitter

def main():
    # Twitterのフォロワー数取得
    n_followers = twitter.follower_count()
    # LINEに投稿したいメッセージを作成
    message = f"本日のTwitterフォロワー数は、{n_followers}です(*´ω`)。"
    # LINE Notifyに投稿
    line.notify_message(message)

# main.pyがメインで使用される場合にコードを実行するという書き方
if __name__ == "__main__":
    main()

【twitter.py】Twitter情報取得プログラム

import tweepy
import json

# Twitter認証
with open("twitter.json") as key_file:
    twitter_keys = json.load(key_file)
consumer_key = twitter_keys["consumer_key"]
consumer_secret = twitter_keys["consumer_secret"]
access_token = twitter_keys["access_token"]
access_token_secret = twitter_keys["access_token_secret"]
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)

#フォロワー数
def follower_count():
    me = api.me()
    return me.followers_count

【line.py】LINE投稿プログラム

import json
import requests
with open("line.json") as token_file:
    line_json = json.load(token_file)
LINE_NOTIFY_TOKEN = line_json["LINE_NOTIFY_TOKEN"]

def notify_message(message):
    # エンドポイント
    url = "https://notify-api.line.me/api/notify"
    # 内容を作成
    headers = {
        "Authorization": f"Bearer {LINE_NOTIFY_TOKEN}"
    }
    data = {
        "message": message
    }
    #メッセージをポスト
    requests.post(
        url,
        headers=headers,
        data=data
    )

GitHub Actionsでのプログラム定期実行

ここまで来てやっとGitHub Actionsの登場です。
・GitHubが作成したプログラムを実行するための実行場所になります。
・そして、定期実行するのがGitHub Actionsの役割です。

まずはGitHubにリポジトリを作成してプログラム一式を配置

ここではGit関連の内容は割愛しますが、以下のように配置します。

GitHub ActionsでPythonプログラムを定期実行

.github/workflows/ の下に実行したい内容をyaml形式で定義します。

今回はこんな感じで、Pythonプログラムを実行する処理を定義しました。

大まかに言うと、ワークフロー名、実行タイミング、実行内容を書きます。

# ワークフロー名
name: test_line_notify

# 実行タイミング
on:
 schedule:
   - cron: '15 10 * * *'

# 実行内容
jobs:
  build:
    # Ubuntsuで実行
    runs-on: ubuntu-latest
    
    # 実行する処理&コマンド
    steps:
      - uses: actions/checkout@v2
      - name: Set up Python 3.9
        uses: actions/setup-python@v1
        with:
          python-version: 3.9
      - name: Install dependencies
        run: |
          # pip更新
          python -m pip install --upgrade pip
          # 必要なパッケージインストール
          pip install tweepy
      - name: Run script
        run: |
          # main.pyの実行
          python main.py

つまり、Linux(ubuntsu)上でPythonプログラム動作させているということですね。

これにより、GitHub Actionsが動作します。

そして、LINE Notifyで通知が来ました。

まとめ

1.GitHub Actionsを理解するために、実際に動作するPythonプログラムを作って動かしてみました。

2.Udemyに良い講座があり、学習したかったPythonからAPIを叩く方法も同時に習得できました。

3.GitHub Actionsは、あくまでプログラムなどを動かすための土台であり、動かしたいプログラムがあってこそり理解できるものと感じました。

コメント

タイトルとURLをコピーしました