InstagramのプロアカウントとInstagram graph API(version.16)とPython3とpandasとmatplotlibとStreamlitを用いる事ができる状況において、①自分がInstagramで投稿したコンテンツに投稿日を元にした"YYYYMMDD"というIDを付与(同日に複数投稿がある場合には枝番として"_1","_2"と付与)し左ペインにおいてリストから選択できるようにし、対象のコンテンツ画像をInstagramから自動でダウンロードして表示し、コンテンツに対する"いいね"数と"いいね"したユーザー名とユーザー画像の表示と隣にインプレッションから計算した"いいね"の割合のパーセントを表示するのが1列目、コンテンツに対するコメントとそのコメント実施ユーザー名とユーザー画像が2列目、コンテンツがきっかけでフォローを実施したユーザー名とユーザー画像の表示が3列目、これらの情報を右ペインで表示し、②右ペインの下部で、既存のコンテンツの取得可能なすべてのアナリティクス情報の各データをリストから選択し分析でき、インタラクティブなグラフやチャートをStreamlitで表示できるようにし、③毎回の入力が不要なように事前に必要な情報はコードに埋め込んである設定のPythonコードを作成を希望しています。

'''
import instaloader
import pandas as pd
import matplotlib.pyplot as plt
import streamlit as st
import json
import requests
import os

# グローバル変数
INSTAGRAM_PROFILE = ''
ACCESS_TOKEN = ''
USERID = ''
TARGET_DIR = os.path.join(os.getcwd(), 'images')

# インスタグラムAPIからデータを取得
def get_instagram_data(token):
    url = f"https://graph.instagram.com/{USERID}/media?fields=id,media_type,media_url,thumbnail_url,permalink,caption,timestamp,like_count,comments_count,impressions,reach,saved,engagement,username&access_token={token}"
    result = requests.get(url)
    return json.loads(result.text)['data']

# 投稿にIDを付与
def assign_ids(data):
    df = pd.DataFrame(data)
    df['timestamp'] = pd.to_datetime(df['timestamp'])
    df['id_YYYYMMDD'] = df['timestamp'].apply(lambda x: x.strftime("%Y%m%d"))
    df['id_count'] = df.groupby('id_YYYYMMDD').cumcount() + 1
    df['content_id'] = df['id_YYYYMMDD'] + '_' + df['id_count'].astype(str)
    return df

# 画像のダウンロード
def download_images(df):
    L = instaloader.Instaloader()
    L.context.log.setLevel("ERROR")
    profile = instaloader.Profile.from_username(L.context, INSTAGRAM_PROFILE)
    for id, row in df.iterrows():
        if 'image' in row['media_type']:
            media_url = row['media_url']
        elif 'video' in row['media_type']:
            media_url = row['thumbnail_url']
        else:
            continue
        content_id = row['content_id']
        filename = f"{content_id}.jpg"
        filepath = os.path.join(TARGET_DIR, filename)
        if not os.path.exists(filepath):
            L.download_url(media_url, filepath)

# オプションを表示
def select_content_id(df):
    content_ids = sorted(df["content_id"].tolist(), reverse=True)
    return st.sidebar.selectbox("Instagram Content ID:", content_ids)

# 画像を表示
def show_content_image(content_id, df):
    filepath = os.path.join(TARGET_DIR, f"{content_id}.jpg")
    image = plt.imread(filepath)
    st.image(image, caption=f"{content_id}'s Instagram image")

# アナリティクス情報を表示
def show_analytics(df):
    st.subheader("Instagram Analytics")
    raw_data = df.loc[df.content_id == selected_content_id, :].drop(["id", "id_YYYYMMDD", "id_count"], axis=1).T
    st.write(raw_data)

# インタラクティブなチャートを表示
def create_interactive_charts(df):
    st.subheader("Interactive Charts")
    chosen_metrics = st.sidebar.multiselect("Choose Metrics for Analysis:", df.columns.tolist()[:-4])
    plt_metrics = df[selected_content_id][chosen_metrics]
    st.line_chart(plt_metrics)

if __name__ == "__main__":
    data = get_instagram_data(ACCESS_TOKEN)
    df = assign_ids(data)

    download_images(df)

    st.title("Instagram Content Analysis")

    selected_content_id = select_content_id(df)

    show_content_image(selected_content_id, df)

    show_analytics(df)

    create_interactive_charts(df)


‘’‘

上記コードを実行すると下記のエラーが発生します。行頭にPython用のインデントを付与した修正済みのコードを省略せずにすべて表示してください。もしコード内に"_"を使用するのであれば、出力時に不可視にされてしまうので"＿"に置換し、シングルクォーテーション(‘,’)を使用するのであれば(')を、ダブルクォーテーション(“,”)を使用するのであれば(")を用いて表示してください。

‘’‘

2023-04-12 12:03:43.889 Uncaught app exception
Traceback (most recent call last):
  File "/home/walhalax/PycharmProjects/pythonProject/venv/Python3.9/lib/python3.10/site-packages/streamlit/runtime/scriptrunner/script_runner.py", line 565, in _run_script
    exec(code, module.__dict__)
  File "/home/walhalax/PycharmProjects/pythonProject/その他/Instargram/instagram_analytics.py", line 72, in <module>
    if name == "main":
NameError: name 'name' is not defined
2023-04-12 12:04:04.904 Uncaught app exception
Traceback (most recent call last):
  File "/home/walhalax/PycharmProjects/pythonProject/venv/Python3.9/lib/python3.10/site-packages/streamlit/runtime/scriptrunner/script_runner.py", line 565, in _run_script
    exec(code, module.__dict__)
  File "/home/walhalax/PycharmProjects/pythonProject/その他/Instargram/instagram_analytics.py", line 72, in <module>
    if name == "main":
NameError: name 'name' is not defined
^Z
[1]+  停止                  streamlit run instagram_analytics.py
(Python3.9) walhalax@wal-Hi10-X:~/PycharmProjects/pythonProject/その他/Instargram$ streamlit run instagram_analytics.py

  You can now view your Streamlit app in your browser.

  Local URL: http://localhost:8502
  Network URL: http://192.168.11.22:8502

2023-04-12 12:19:38.839 Uncaught app exception
Traceback (most recent call last):
  File "/home/walhalax/PycharmProjects/pythonProject/venv/Python3.9/lib/python3.10/site-packages/streamlit/runtime/scriptrunner/script_runner.py", line 565, in _run_script
    exec(code, module.__dict__)
  File "/home/walhalax/PycharmProjects/pythonProject/その他/Instargram/instagram_analytics.py", line 73, in <module>
    data = get_instagram_data(ACCESS_TOKEN)
  File "/home/walhalax/PycharmProjects/pythonProject/その他/Instargram/instagram_analytics.py", line 19, in get_instagram_data
    return json.loads(result.text)['data']
  File "/usr/lib/python3.10/json/__init__.py", line 346, in loads
    return _default_decoder.decode(s)
  File "/usr/lib/python3.10/json/decoder.py", line 337, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/lib/python3.10/json/decoder.py", line 355, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

'''