完成形
経緯
プログラム経験がないアプリケーションエンジニアだが、僅かなプライドからプログラム教室に通わず、Youtubeの動画にてPythonを学び始めた。
その中でTwitterAPIを説明した動画を視聴し、同時期にデビューが決まったにじさんじのタレント7名のフォロワー数の推移を表せれば面白いと考えた。
プログラム経験がなく、興味の赴くままのコードを使用しての記述のため、ソースコードにてお作法が守れていない、迂遠なロジックな部分が多々ある。
作成版→修正版→習熟版とソースを更新していき、自分の学習段階を図測るものとして使用したい。
使い方
①main.py にてTwitterAPIをたたき、ユーザー情報、フォロワー数などを取得し、niji_count.xlsx に更新する。
③test.py にてniji_count.xlsxを参照し、にじ新人ツイッターグラフ.pngを作成する。
③main.py をタスクスケジューラで設定し、毎日0:00に実行することで日々の情報を取得する。
④test.py をたたくと③で集計したデータがグラフとして更新される。
ソース
(作成版)
main.py
import json
from requests_oauthlib import OAuth1Session
import re
import pandas as pd
import datetime
from glob import glob
#TwitterのアカウントKEY
CONSUMER_KEY="xxxxxxxxxxxxx"
CONSUMER_SELECT="xxxxxxxxxx"
ACCESS_TOKEN="xxxxxxxxxxxxx"
ACCESS_TOKEN_SELECT="xxxxxx"
twitter = OAuth1Session(CONSUMER_KEY,CONSUMER_SELECT,ACCESS_TOKEN,ACCESS_TOKEN_SELECT)
now_time=datetime.datetime.now()
filepath_order=glob("D:\\python\\niji_count\\*.elsx")
url="https://api.twitter.com/2/users/by"
params={"usernames":"1garashi_Rika,SophiaV214,k_meruto,I_Nozomi_,toru_2434,44do_akari,65_kaburaki","user.fields":"public_metrics,created_at"}
res=twitter.get(url,params=params)
res_text=json.loads(res.text)
results=res_text["data"]
twwiter_counts=[]
for result in results:
twwiter_count={}
twwiter_count["id"]=result["id"]
twwiter_count["date"]=now_time
twwiter_count["followers_counts"]=result["public_metrics"]["followers_count"]
twwiter_count["tweet_counts"]=result["public_metrics"]["tweet_count"]
twwiter_counts.append(twwiter_count)
twwiter_counts=pd.DataFrame(twwiter_counts)
#ディレクトリのエクセル抽出
filepath_order=glob("D:\\python\\niji_count\\*.xlsx")
#1つ目のエクセル選択(ツイッターカウントのみ想定)
filepath=filepath_order[0]
#エクセル読み込み
try:
df_old=pd.read_excel(filepath)
with pd.ExcelWriter(filepath, engine="openpyxl", mode="a", if_sheet_exists="overlay") as writer:
twwiter_counts.to_excel(writer,index=False,header= False,startrow=len(df_old)+1)
except PermissionError:
print(f"Excel開いてる:{filepath}")
test.py
from glob import glob
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
#ディレクトリのエクセル抽出
filepath_order=glob("D:\\python\\niji_count\\*.xlsx")
#1つ目のエクセル選択(ツイッターカウントのみ想定)
filepath=filepath_order[0]
#エクセル読み込み
df_order=pd.read_excel(filepath)
#ID変換辞書
user={
1613865731812388864: "五十嵐梨花",
1613886358774513667: "ソフィア・ヴァレンタイン",
1613885249209118720: "倉持めると",
1613885926484365317: "石神のぞみ",
1613870048300654593: "小清水透",
1613886640111620098: "獅子堂あかり",
1613883487442046983: "鏑木ろこ"
}
df_order=df_order.replace(user)
df_followers_counts = df_order.pivot(index='date', columns='id', values='followers_counts')
df_tweet_counts = df_order.pivot(index='date', columns='id', values='tweet_counts')
#pltにて日本語エラーにならないため、フォント指定
plt.rcParams['font.family'] = 'MS Gothic'
fig, axes = plt.subplots(1,2,squeeze=False, figsize=(12, 6))
df_followers_counts.plot(ax=axes[0, 0],title="フォロワー数").legend(loc='upper left')
df_tweet_counts.plot(ax=axes[0, 1],legend=False,title="つぶやき数")
#plt.xlim(df_order["date"].min(), df_order["date"].max())
plt.savefig('D:\\python\\niji_count\\にじ新人ツイッターグラフ.png')
niji_count.xlsx
(修正版)
(習熟版)
参考
主に視聴した動画は下記になる。
未経験でプログラム教室にいかず、動画で学びたい同志がいれば参考に…
投稿が古いため、現在と使用できるAPIの種類が異なるため、注意が必要