#はじめに
GitHubの草を生やすためにコードを書くようにする「GitHub駆動学習」を最近行なっています。そこで、その日のGitHubの草の色に応じて、リアルタイムでTwitterのアカウント名が変わるようにすれば1、モチベーションが上がるのではないかと思ったので、別用途で常時可動しているRaspberryPiでcronを使ってやってみました(もちろん定期実行が出来れば、RaspberryPi以外でも可能です)。
#ソースコード
import requests, json, pytz, os
from bs4 import BeautifulSoup
from datetime import datetime
from dotenv import load_dotenv
from requests_oauthlib import OAuth1Session
# .envファイルから各種変数を取得
dotenv_path = os.path.join(os.path.dirname(__file__), ".env")
load_dotenv(dotenv_path)
CONSUMER_KEY = os.environ["CONSUMER_KEY"]
CONSUMER_SECRET = os.environ["CONSUMER_SECRET"]
ACCESS_KEY = os.environ["TOKEN"]
ACCESS_SECRET = os.environ["TOKEN_SECRET"]
GitHub_ACCOUNT = os.environ["GitHub_ACCOUNT"]
Twitter_ACCOUNT = os.environ["Twitter_ACCOUNT"]
# GitHubおよびtwiterのURL
url_userpage = "https://github.com/" + GitHub_ACCOUNT
url_get_name = "https://api.twitter.com/1.1/users/show.json?screen_name=" + Twitter_ACCOUNT
url_post_name = "https://api.twitter.com/1.1/account/update_profile.json"
# タイムゾーンを設定
TIMEZONE = "Asia/Tokyo"
jst = pytz.timezone(TIMEZONE)
today_date = datetime.now(jst).strftime("%Y-%m-%d")
# 進捗状況一覧
words_dict = {
"#ebedf0": "進捗ない",
"#c6e48b": "ちょっと頑張っている",
"#7bc96f": "まあまあ頑張っている",
"#239a3b": "結構頑張っている",
"#196127": "かなり頑張っている"
}
# 今日のcontributionを取得し、カラーコードから進捗状況を作成
cookie = {"tz": TIMEZONE}
res_g = requests.get(url_userpage, cookies=cookie)
soup = BeautifulSoup(res_g.text)
today_contribution = soup.find("rect", {"data-date": today_date})
statement = "@今日は" + words_dict[today_contribution['fill']] + "みたい"
# twitterの名前の@以下を書き換える
twitter = OAuth1Session(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_KEY, ACCESS_SECRET)
res_t = twitter.get(url_get_name)
new_name = res_t.json()["name"].split("@")[0] + statement
param = {"name": new_name}
r = twitter.post(url_post_name, param)
#ソースコード解説
GitHubのアカウントページを取得 → 今日の日付に対応する草のカラーコードを取得 → 草の色に対応する文字列でTwitterのアカウント名の@以下の文字列を変更 という流れになっています。
複雑なことは特にしていないのですが、GitHubのアカウントページにGetリクエストをする際に、タイムゾーン "tz" をCookieとして渡している点に気をつけました(この方法が正しいのかどうかはわかりませんが…)。GitHubのcontributionの日付はこのCookieに合わせて変わるようになっているようです。こうすることで、リアルタイムで草の色を正確に知ることが出来ます。
#cronの設定
このソースコード (bot.py) と各種パラメータを記述した.envファイルをscpコマンド等でRaspberryPiへ送り、その後、RaspberryPiでcronの設定を行ないます(他記事等参照)。現在は5分おきに実行されるように設定しています。
#終わりに
以前よりモチベーションが上がるといったようなことは特にありませんでしたが、RaspberryPiを活用できたのでよかったです。
-
ちなみに、Twitterのアカウント名を定期的に変化させるというアイデアは、 Twitterの名前を5分毎に東京の天気⛅☂☃と連動させるサーバレスプログラムを書いたら色々知らないことが出てきた話 という記事を参考にさせていただきました ↩