1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

GitHubの草の色に合わせて、Twitterのアカウント名をPythonとRaspberryPiを使って定期的に変更する

Posted at

#はじめに
GitHubの草を生やすためにコードを書くようにする「GitHub駆動学習」を最近行なっています。そこで、その日のGitHubの草の色に応じて、リアルタイムでTwitterのアカウント名が変わるようにすれば1、モチベーションが上がるのではないかと思ったので、別用途で常時可動しているRaspberryPiでcronを使ってやってみました(もちろん定期実行が出来れば、RaspberryPi以外でも可能です)。

#ソースコード

bot.py
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を活用できたのでよかったです。

  1. ちなみに、Twitterのアカウント名を定期的に変化させるというアイデアは、 Twitterの名前を5分毎に東京の天気⛅☂☃と連動させるサーバレスプログラムを書いたら色々知らないことが出てきた話 という記事を参考にさせていただきました

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?