LoginSignup
8
11

More than 3 years have passed since last update.

Twitterで投稿した勉強記録をPixelaで可視化

Posted at

作ったもの

Twitterで、ある日の、特定のワードを含むツイートを収集し、その数をPixelaに反映させるアプリ。

例えば、本を読んだよとか、勉強したよとかをTwitterで報告する。
その時、何か特定のワードを含ませるようにしておく(例えば「#勉強記録」)。

それを毎日収集し、Pixelaに記録して、可視化する→さらなる勉強モチベの向上を狙う。

例えばこんな感じ
https://twitter.com/veFrkC841DN0I8Q/status/1378200472213811200?s=20

必要なもの/こと

手順

まずは、TwitterAPIを使用するための登録をする
これは公式ドキュメント※英語が参考になる

次にPixelaの諸々の事前準備を済ませる

これは、公式サイトの下の方「使い方」が参考になる

そして、TwitterAPIとPixelaの利用に必要な情報を環境変数に登録する
コード※下記参照 にベタ打ちでも良いが、git管理とかするなら、環境変数に登録したほうがセキュア

というより、ベタ打ちするとGitGuardianから怒られるはず

最後に、以下のコードをcronなり、手打ちなりで実行する

sample.py
import tweepy
from os import environ as env
from pixela import Pixela
from datetime import datetime


def get_twitter_api(
        api_key,
        api_secret_key,
        access_token,
        access_secret_token):
    auth = tweepy.OAuthHandler(api_key, api_secret_key)
    auth.set_access_token(access_token, access_secret_token)
    return tweepy.API(auth)


def get_target_str_num(twitter_api, user_id, date, target_str):
    user_tweets = twitter_api.user_timeline(user_id)
    date_str = date.strftime("%Y%m%d")

    target_str_num = 0
    for tweet in user_tweets:
        tweet_date = tweet.created_at.strftime("%Y%m%d")
        if ((date_str == tweet_date) and (target_str in tweet.text)):
            target_str_num += 1

    return target_str_num


def create_pixel(user_name, token, graph_id, quantity, date):
    pixela = Pixela(username=user_name, token=token)

    pixela.create_pixel(
        graph_id=graph_id,
        quantity=quantity,
        date=date)


if __name__ == "__main__":
    pixela_user_name = "box16"
    pixela_graph_id = "study-record"
    graph_url = "https://pixe.la/v1/users/box16/graphs/study-record.html"
    target_str = "勉強記録"
    today = datetime.today()

    twitter_api = get_twitter_api(env.get("TWITTER_API_KEY"),
                                  env.get("TWITTER_API_SECRET_KEY"),
                                  env.get("TWITTER_ACCESS_TOKEN"),
                                  env.get("TWITTER_ACCESS_SECRET_KEY"))

    target_str_num = get_target_str_num(twitter_api,
                                        env.get("TWITTER_MY_ID"),
                                        today,
                                        target_str)

    create_pixel(pixela_user_name,
                 env.get('PIXELA_TOKEN'),
                 pixela_graph_id,
                 target_str_num,
                 today)

    twitter_api.update_status(
        f"本日の記録数 : {target_str_num} \n {graph_url}")

8
11
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
8
11