0
0

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 1 year has passed since last update.

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

Posted at

完成形

にじ新人ツイッターグラフ.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

ソース

(作成版)

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

image.png

(修正版)

(習熟版)

参考

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

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

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?