Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

はじめに

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分毎に東京の天気⛅☂☃と連動させるサーバレスプログラムを書いたら色々知らないことが出てきた話 という記事を参考にさせていただきました 

Why do not you register as a user and use Qiita more conveniently?
  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
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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