【Python】GitHub ActionsでTwitterフォロワー数自動記録~初級者向け~

今回は、PythonでTwitterAPIを使用して、自身のフォロワー数を自動で収集し、記録するアプリケーションを作成します。Twitterのフォロワー数が気になる方にはおすすめです。

また、テスト環境だけでなく、本番運用に向けたGitHub上での環境変数の設定方法も合わせて記載していきますので、初学者にも見ていただけると幸いです。

完成時の実行フローは上図のとおりです。GitとGitHubを使用するので、不明な方はこちらのブログなどを読んだあとだと理解が早いと思います。

【超入門】Github登録からGit使い方の基本まで完全解説①【初心者必見】

https://datawokagaku.com/github_register/

1. 使用環境

  • OS: Windows10 Pro
  • Python: Version 3.8
  • Tweepy: Version 3.10.0 (vver4.0以降は一部APIが削除されています。)
Baran

Pythonバージョンが3.8以上あれば、本記事のコードは動くと思います。

2. Twitter APIの申請及びトークンの取得

最初に、Twitter APIを使用できるようにする必要があるため、デベロッパー申請から、APIキー、トークン取得方法を確認します。

「Twitter API 取得」などでGoogle検索をかければ、取得方法が記載されているサイトが見つかると思います。私は以下のサイトを参考にしました。

Twitter APIを利用するためのデベロッパー申請から、APIキー、トークン取得方法を詳しく解説します。

2021年度版 Twitter API利用申請の例文からAPIキーの取得まで詳しく解説

申請が完了しましたら、以下のように’secret_twitter.json’のようなJSONファイルを作成し、TwitterAPI申請で取得したご自身の4つの値を入力してください。なお、各値にある'{ }’は記載不要です。

{
    "consumer_key": "{YOUR_COMSUMER_KEY}",
    "consumer_secret": "{YOUR_COMSUMER_SECRET}",
    "access_token": "{YOUR_ACCESS_TOKEN}",
    "access_token_secret": "{YOUR_ACCESS_TOKEN_SECRET}"
}

これでTwitterAPIを使用する準備が整いました。

3. Twitter API認証およびTwitterデータにアクセスする

テスト環境では、以下のようなファイル構成を想定しています。ご自身でお好きなファイル名に変更していただいて構いません。

Twitter-follower-test
|─follower.csv
|─main.py
└─secret_twittwer.json

それではアクセスキーを使用して、Twitter API認証を行います。

PythonでTwitter APIを使用するために、Tweepyのライブラリをインストールします。 ご自身の環境に合わせて、Tweepyをインストールしてください。以下はターミナルでのインストール例です。

$ pip install tweepy

以下のコードを’main.py’に入力してみてください。なお、JSONファイルへのパスはご自身の環境に合わせてご指定ください(‘{ }’は必要ありません)

Tweepyでの認証方法を詳しく知りたい方は公式ドキュメントをご参考ください。

import json
import tweepy

def twitter_authorization():
    with open('{secret_twitter.jsonへのpath}') as f:
        twitter_keys = json.load(f)

    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)
    return api

これでTwitterAPIを利用できる準備が整いました。それでは、現在のご自身フォロワー数を取得します。Tweepyの公式ドキュメントを読むと、以下のコードでご自身の情報オブジェクト(user)にアクセスできます。

api.me()

さらにTwitter APIのDevelopment Platformを読むと、’followers_count’属性でフォロワー数を取得できます。ですので、以下のコードのように、フォロワー数を取得する関数を作成しておきます。

def get_n_followers(api):
    n_followers = api.me().followers_count
    return n_followers

これでフォロワー数を取得することができました。

Baran

フォロワー数以外にも取得できる属性があるので、ぜひ確認してみてください。

4. CSVファイルにデータを書き込む

フォロワー数データを取得できたので、このデータをCSVファイルに書き込みます。なお、本コードは毎日一回実行することを目的としているため、フォロワー数の取得日も合わせて書き込んでいきます。

以下コードで、取得日を取得して、フォロワー数とともにCSVファイルに書き込みましょう!

from datetime import datetime
import csv

def csv_writer(n_followers):
    today = datetime.today().timetuple()
    date = f'{today.tm_year}-{today.tm_mon}-{today.tm_mday}'
    with open('./follower.csv', mode='a') as f:
        writer = csv.DictWriter(f, ['Date', 'Followers'])
        writer.writeheader()
        writer.writerow({'Date': f'{date}', 'Followers': f'{n_followers}'})

CSVへの書き込みは、データの取扱が楽になる’DictWriter‘を使用しています。

また、’writer.writeheader()’はカラム名を記載できますが、毎回記載されると邪魔なので、2回目以降はコメントアウトしておきましょう。

5. ローカルでテスト実行

上記の内容をまとめて、’main.py’にコードを記載します。私は以下のようにしてみました。

from datetime import datetime
import csv
import json
import tweepy


def twitter_authorization():
    with open('{twitter.jsonへのpath}') as f:
        twitter_keys = json.load(f)
    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)
    return api


def get_n_followers(api):
    n_followers = api.me().followers_count
    return n_followers


def csv_writer(n_followers):
    today = datetime.today().timetuple()
    date = f'{today.tm_year}-{today.tm_mon}-{today.tm_mday}'
    with open('./follower.csv', mode='a') as f:
        writer = csv.DictWriter(f, ['Date', 'Followers'])
        writer.writeheader()
        writer.writerow({'Date': f'{date}', 'Followers': f'{n_followers}'})


def main():
    api = twitter_authorization()
    n_followers = get_n_followers(api)
    csv_writer(n_followers)


if __name__ == "__main__":
    main()

それでは、ローカルPCのターミナルで上記の’main.py’があるフォルダーに移動して、以下のコマンドを実行します。

$ python3 main.py

エラーなく実行が終わりましたら、’follower.csv’を開いてみてください。以下のようなデータが格納されていたら成功です!

Date,Followers
2021-8-11,500
Baran

テスト環境での確認は以上となります。お疲れさまです。

6. GitHub上での準備 (リポジトリ作成)

ここからは、本番環境を構築し、上記のコードを定期実行していきます。

なにはともあれ、まずはGitHubにアクセスします。アカウントがない方は新たに登録してみてください。登録の参考記事は以下や公式サイトをご確認ください。ここで登録した名前やアドレスは後ほど使用するため、控えていただけると後で楽です。

今回は、GitHubアカウントの作成方法についてステップバイステップ(画面付き)でご紹介していきます。

GitHubアカウントの作成方法 (2021年版)

登録が完了したら、新しくリポジトリを作成します。図2のように’New’をクリックして作成します。

図2 New repository 作成

そうすると以下のような画面に移るので、リポジトリの名前と公開範囲を’Private’にします。リポジトリ名は’twitter-follower-prod’としています。

図3 リポジトリ作成

記入したら、’Create repository’をクリックして作成完了です。

次にローカルPCとGitHubを紐付けます。図4のような画面が表示されたら、’HTTPS’を選択し、URLをコピーします。

図4 GitHubリンク

コピーしたら、ターミナルで先程まで作業していたフォルダーに移ります。移動しましたら、コピーしたURLで以下のコマンドを実行し、GitHubとローカルPCを接続します。

$ git clone https://github.com/{Your Name}/twitter-follower-prod.git

そうすると、以下のように’twitter-follower-prod’のフォルダーが新たに作成されます。今後はこの作成されたフォルダー内で作業を行います

Twitter-follower-test
|─follower.csv
|─main.py
|─secret_twittwer.json
└─twitter-follower-prod
    └─.git

なお、‘HTTPS’でのGitHubへのアクセスは2021年8月13日で終了するため、他の接続方法が必要です。SSHによる認証設定方法は、以下の記事に記載していますのでご参考ください。

7. GitHub上で環境変数を設定する

次に環境変数を設定します。テスト環境では、JSONファイルでTwitterAPIにアクセスするキーを読み込みましたが、GitHub上に情報データをアップロードするのは、セキュリティ上よくありません

そこでGitHubの’Secrets’機能を利用して、GitHubにTwitterAPIにアクセスするキーを登録しておきます。これで、JSONファイルをアップロードすることなく、アクセスキーを利用することが可能です。

まずは、GitHubのリポジトリ内にある’Settingsを選択します。

図5 Settings

そうしたら、’Secrets’ => ‘New repository secret’の順で選択します。

図6 Secrets

以下の画面で、TwitterAPIにアクセスするために必要なキーとその値を入力します。4つすべて別々に作成してください。なお、文字列を表す’ “(ダブルクオテーションなど) ‘は入力する必要はありません。

図7 New Secrets

以下のように設定できていたらOKです。

図8 New Secrets (4つのキーを登録)

また、定期実行を実施するため、GitHub登録時に指定した名前とアドレスを環境変数にしておきます。

これでGitHub上での環境変数の設定は完了です。

8. ローカルPCでの準備 (main_prod.py, main.yml準備)

本番環境用のフォルダー(twitter-follower-prod)に必要なファイルを記載していきます。最終的なフォルダー構成は以下です。

Twitter-follower-test
    └─twitter-follower-prod
        |─.github
        |    └─workflows
        |        └─main.yml
        |─follower.csv
        |─main_prod.py
        └─requirements.txt

まずは、’main_prod.py’を作成します。ほとんどテスト環境で構築したmain.pyと同様ですが、GitHub上に登録した環境変数を利用するために、以下のように一部コードを書き換えます。

osをインポートして、os.environでそれぞれの環境変数を読み込みます。あとは作成した’main_prod.py’を’twitter-follower-prod’フォルダに格納します。

from datetime import datetime
import csv
import os
import tweepy


def twitter_authorization():
  """ 変更箇所 """
    consumer_key = os.environ.get("CONSUMER_KEY")
    consumer_secret = os.environ.get("CONSUMER_SECRET")
    access_token = os.environ.get("ACCESS_TOKEN")
    access_token_secret = os.environ.get("ACCESS_TOKEN_SECRET")
    """ 変更箇所終わり """

    auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
    auth.set_access_token(access_token, access_token_secret)

    api = tweepy.API(auth)
    return api

""" 以下、main.pyと同様 """

次に’requirements.txt’を作成します。このファイルは、今回のコードを実行する際に必要なライブラリを予め指定しておきます。Pythonに付随しているライブラリ(os, csvなど)は記載不要です。

今回は’Tweepy’のみでOKです。

tweepy

最後に定期実行を行うために、’.github/workflows/main.yml’を作成します。

GitHub上で定期実行するためには、’main.py’のファイルパスを’.github/workflows/main.yml’とする必要がある点にご注意ください。詳しくはこちらから。

name: twitter-follower-prod

on:
  push:

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Set up Python 3.8
        uses: actions/setup-python@v1
        with:
          python-version: 3.8
      - name: Install dependencies
        run: |
          python -m pip install --upgrade pip
          if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
      - name: Run main script
        env:
          CONSUMER_KEY: ${{ secrets.CONSUMER_KEY }}
          CONSUMER_SECRET: ${{ secrets.CONSUMER_SECRET }}
          ACCESS_TOKEN: ${{ secrets.ACCESS_TOKEN }}
          ACCESS_TOKEN_SECRET: ${{ secrets.ACCESS_TOKEN_SECRET }}
        run: |
          python main_prod.py
      - name: CSV commit
        run: |
          git config --global user.email ${{ secrets.EMAIL }}
          git config --global user.name ${{ secrets.NAME }}
          git add .
          git commit -m "Update csv file"
          git push origin main

これですべてのファイルが用意できたので、GitHubへpush時にコードがしっかり実行されるか確認します。

9. GitHubにPushする

コードが完成したら、コードファイルをGitHubへpushします。ターミナルで’twitter-follower-prod’のフォルダーに移動し、以下のコマンドを実行します。

$ git add .
$ git commit -m "1st Commit"
$ git push origin main

そうすると、GitHub上の’follower.csv’のデータが以下のように更新されているはずです。

Date,Followers
2021-8-3,513
2021-8-3,513

ここまでできていれば、コードは問題なしです。あとは定期実行させるために、’main.yml’をちょっと変更します。

Baran

あと一息です!

10. 定期実行用にmain.ymlを変更し、再度GitHubにPushする

一度、GitHub上のファイルをpullしておきます。ターミナルで’twitter-follower-prod’のフォルダーに移動し、以下のコマンドを実行します。

$ git pull origin main

では、’main.yml’に変更を加えます。といってもpushを削除して、scheduleを加えるだけです。

name: twitter-follower-prod

on:
  schedule:
    - cron: '0 24 * * *'

# 以下同様

こちらにもありますように、scheduleはUTC時間のみで記載できるため、日本だと9時間の時差を考慮して設定する必要があります。

上記であれば、UTC 24時なので、日本時間で毎朝9時に定期実行することになります。

あとは、先程と同様にGitHubにファイルをpushします。これで次の日の朝9時から、毎日twitterフォロワーを記録する仕組みを作成できました。

$ git add .
$ git commit -m "Update main.yml file"
$ git push origin main
Baran

お疲れさまでした!

11. まとめ

簡単なコードとGitHubだけで、定期実行の仕組みを作成することができました。

その他のAPIを組み合わたり、スクレイピングを活用して多くのデータを自動で収集することできそうですね。

ぜひ、本記事を例に色々な自動化に挑戦してみてください!

Baran

それでは、よいPythonライフを!

Baran

以下の記事も書いています。よかったらご覧ください。

Baran

Twitterもやってまーす。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

ABOUT US

Baran-gizagiza
経歴:浪人→理系大学院卒業→大手製造業に就職(技術職)→アメリカ赴任中 仕事は、研究・設計など上流工程の仕事に携わっています。企業勤務を継続しながら、新しいことにチャレンジしたいと思い、ブログを下記はじめました。 このブログでは、趣味である 筋トレ(健康、ダイエット) AIとデータ(高校数学、プログラミング) 読書(主に自己啓発系) を中心に、人生経験やおすすめ情報の発信しています。