Python初心者がTwitterAPIを使用してにじさんじの新人のフォロワー数を取得する

# 完成形
![にじ新人ツイッターグラフ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118162/0eb47e38-e81b-849a-e5be-7dc9318b4ec2.png)

# 経緯
プログラム経験がないアプリケーションエンジニアだが、僅かなプライドからプログラム教室に通わず、Youtubeの動画にてPythonを学び始めた。
その中でTwitterAPIを説明した動画を視聴し、同時期にデビューが決まったにじさんじのタレント7名のフォロワー数の推移を表せれば面白いと考えた。
プログラム経験がなく、興味の赴くままのコードを使用しての記述のため、ソースコードにてお作法が守れていない、迂遠なロジックな部分が多々ある。
作成版→修正版→習熟版とソースを更新していき、自分の学習段階を図測るものとして使用したい。

# 使い方
①main.py にてTwitterAPIをたたき、ユーザー情報、フォロワー数などを取得し、niji_count.xlsx に更新する。
③test.py にてniji_count.xlsxを参照し、にじ新人ツイッターグラフ.pngを作成する。
③main.py をタスクスケジューラで設定し、毎日0:00に実行することで日々の情報を取得する。
④test.py をたたくと③で集計したデータがグラフとして更新される。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118162/32960faf-a0fe-c812-8f8f-9d805fe1bb49.png)

# ソース
## (作成版）
### main.py

```python:
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

```python:
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
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118162/26586ab1-1d0c-2643-0bd7-dd17a4b6a977.png)

## (修正版）
## (習熟版）


# 参考
主に視聴した動画は下記になる。
未経験でプログラム教室にいかず、動画で学びたい同志がいれば参考に…

https://www.youtube.com/watch?v=yeZ3STy3k44

https://www.youtube.com/watch?v=Fef4GAYq9VA&t=0s

投稿が古いため、現在と使用できるAPIの種類が異なるため、注意が必要

https://www.youtube.com/watch?v=HqvcmkFjVnw&t=651s

https://www.youtube.com/watch?v=0Rk2PhBxHO0&t=1071s