'''

import requests
import json
import datetime
import streamlit as st
from itertools import zip_longest
import os
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd

def basic_info():
    config = dict()
    config["access_token"] = st.secrets["access_token"]
    config['instagram_account_id'] = st.secrets.get("instagram_account_id", "")
    config["version"] = 'v16.0'
    config["graph_domain"] = 'https://graph.facebook.com/'
    config["endpoint_base"] = config["graph_domain"] + config["version"] + '/'
    return config

def InstaApiCall(url, params, request_type):
    if request_type == 'POST':
        req = requests.post(url, params)
    else:
        req = requests.get(url, params)
    res = dict()
    res["url"] = url
    res["endpoint_params"] = params
    res["endpoint_params_pretty"] = json.dumps(params, indent=4)
    res["json_data"] = json.loads(req.content)
    res["json_data_pretty"] = json.dumps(res["json_data"], indent=4)
    return res

def getUserMedia(params, pagingUrl=''):
    Params = dict()
    Params['fields'] = 'id,caption,media_type,media_url,permalink,thumbnail_url,timestamp,username,like_count,comments_count'
    Params['access_token'] = params['access_token']

    if not params['endpoint_base']:
        return None

    if pagingUrl == '':
        url = params['endpoint_base'] + params['instagram_account_id'] + '/media'
    else:
        url = pagingUrl

    return InstaApiCall(url, Params, 'GET')

def getUser(params):
    Params = dict()
    Params['fields'] = 'followers_count'
    Params['access_token'] = params['access_token']

    if not params['endpoint_base']:
        return None

    url = params['endpoint_base'] + params['instagram_account_id']

    return InstaApiCall(url, Params, 'GET')

def saveCount(count, filename):
    with open(filename, 'w') as f:
        json.dump(count, f, indent=4)

def getCount(filename):
    try:
        with open(filename, 'r') as f:
            return json.load(f)
    except (FileNotFoundError, json.decoder.JSONDecodeError):
        return {}

st.set_page_config(layout="wide")
params = basic_info()

count_filename = "count.json"

if not params['instagram_account_id']:
    st.write('.envファイルでinstagram_account_idを確認')
else:
    response = getUserMedia(params)
    user_response = getUser(params)
    if not response or not user_response:
        st.write('.envファイルでaccess_tokenを確認')
    else:
        posts = response['json_data']['data'][::-1]
        user_data = user_response['json_data']
        followers_count = user_data.get('followers_count', 0)

        NUM_COLUMNS = 6
        MAX_WIDTH = 1000
        BOX_WIDTH = int(MAX_WIDTH / NUM_COLUMNS)
        BOX_HEIGHT = 400

        yesterday = (datetime.datetime.now(datetime.timezone(datetime.timedelta(hours=9))) - datetime.timedelta(days=1)).strftime('%Y-%m-%d')
        follower_diff = followers_count - getCount(count_filename).get(yesterday, {}).get('followers_count', followers_count)
        st.markdown(f'''
        Follower: {followers_count} ({'+' if follower_diff >= 0 else ''}{follower_diff})
        ''', unsafe_allow_html=True)

        show_description = st.checkbox("キャプションを表示")
        show_summary_chart = st.checkbox("サマリーチャートを表示")
        show_like_comment_chart = st.checkbox("いいね/コメント数グラフを表示")

        posts.reverse()
        post_groups = [list(filter(None, group)) for group in zip_longest(*[iter(posts)] * NUM_COLUMNS)]

        count = getCount(count_filename)
        today = datetime.datetime.now(datetime.timezone(datetime.timedelta(hours=9))).strftime('%Y-%m-%d')

        if today not in count:
            count[today] = {}

        count[today]['followers_count'] = followers_count

        if datetime.datetime.now(datetime.timezone(datetime.timedelta(hours=9))).strftime('%H:%M') == '23:59':
            count[yesterday] = count[today]

        max_like_diff = 0
        max_comment_diff = 0
        summary_chart_data = {"Date": [], "Count": [], "Type": []}
        for post_group in post_groups:
            for post in post_group:
                like_count_diff = post['like_count'] - count.get(yesterday, {}).get(post['id'], {}).get('like_count', post['like_count'])
                comment_count_diff = post['comments_count'] - count.get(yesterday, {}).get(post['id'], {}).get('comments_count', post['comments_count'])
                max_like_diff = max(like_count_diff, max_like_diff)
                max_comment_diff = max(comment_count_diff, max_comment_diff)

        if show_summary_chart:
            for date in count.keys():
                if date != today:
                    summary_chart_data["Date"].append(datetime.datetime.strptime(date, '%Y-%m-%d').strftime('%m/%d'))
                    summary_chart_data["Count"].append(count[date].get("followers_count", 0))
                    summary_chart_data["Type"].append("Follower")
                for post_id in count[date].keys():
                    if post_id not in ["followers_count"]:
                        summary_chart_data["Date"].append(datetime.datetime.strptime(date, '%Y-%m-%d').strftime('%m/%d'))
                        summary_chart_data["Count"].append(count[date][post_id].get("like_count", 0))
                        summary_chart_data["Type"].append("Like")
                        summary_chart_data["Date"].append(datetime.datetime.strptime(date, '%Y-%m-%d').strftime('%m/%d'))
                        summary_chart_data["Count"].append(count[date][post_id].get("comments_count", 0))
                        summary_chart_data["Type"].append("Comment")

            summary_chart_df = pd.DataFrame(summary_chart_data)
            plt.figure(figsize=(15, 10))
            summary_chart_palette = {"Follower": "lightblue", "Like": "orange", "Comment": "green"}
            sns.lineplot(data=summary_chart_df, x="Date", y="Count", hue="Type", palette=summary_chart_palette)
            plt.xlabel("Date")
            plt.ylabel("Count")
            plt.title("日別 サマリーチャート")
            st.pyplot()

        for post_group in post_groups:
            with st.container():
                columns = st.columns(NUM_COLUMNS)
                for i, post in enumerate(post_group):
                    with columns[i]:
                        st.image(post['media_url'], width=BOX_WIDTH, use_column_width=True)
                        st.write(f"{datetime.datetime.strptime(post['timestamp'], '%Y-%m-%dT%H:%M:%S%z').astimezone(datetime.timezone(datetime.timedelta(hours=9))).strftime('%Y-%m-%d %H:%M:%S')}")
                        like_count_diff = post['like_count'] - count.get(yesterday, {}).get(post['id'], {}).get('like_count', post['like_count'])
                        comment_count_diff = post['comments_count'] - count.get(yesterday, {}).get(post['id'], {}).get('comments_count', post['comments_count'])
                        st.markdown(
                        f"👍: {post['like_count']} <span style='{'' if like_count_diff != max_like_diff or max_like_diff == 0 else 'color:green;'}'>({'+1' if like_count_diff >= 0 else ''}{like_count_diff})"
                        f"\n💬: {post['comments_count']} <span style='{'' if comment_count_diff != max_comment_diff or max_comment_diff == 0 else 'color:green;'}'>({'+1' if comment_count_diff >= 0 else ''}{comment_count_diff})",
                        unsafe_allow_html=True)

                        if show_like_comment_chart:
                            like_comment_chart_data = {"Date": [], "Count": [], "Type": []}
                            for date in count.keys():
                                if date != today and post["id"] in count[date]:
                                    like_comment_chart_data["Date"].append(datetime.datetime.strptime(date, '%Y-%m-%d').strftime('%m/%d'))
                                    like_comment_chart_data["Count"].append(count[date][post["id"].get("like_count", 0)])
                                    like_comment_chart_data["Type"].append("Like")
                                    like_comment_chart_data["Date"].append(datetime.datetime.strptime(date, '%Y-%m-%d').strftime('%m/%d'))
                                    like_comment_chart_data["Count"].append(count[date][post]["id"].get("comments_count", 0))
                                    like_comment_chart_data["Type"].append("Comment")

                            if like_comment_chart_data["Date"]:
                                like_comment_chart_df = pd.DataFrame(like_comment_chart_data)
                                plt.figure(figsize=(5, 3))
                                like_comment_chart_palette = {"Like": "orange", "Comment": "green"}
                                sns.lineplot(data=like_comment_chart_df, x="Date", y="Count", hue="Type", palette=like_comment_chart_palette)
                                plt.xlabel("Date")
                                plt.ylabel("Count")
                                plt.title("日別 いいね/コメント数")
                                st.pyplot()

                        caption = post['caption']
                        if caption is not None:
                            caption = caption.strip()
                            if "[Description]" in caption:
                                caption = caption.split("[Description]")[1].lstrip()
                            if "[Tags]" in caption:
                                caption = caption.split("[Tags]")[0].rstrip()
                            caption = caption.replace("#", "")
                            caption = caption.replace("[model]", "👗")
                            caption = caption.replace("[Equip]", "📷")
                            caption = caption.replace("[Develop]", "🖨")
                            if show_description:
                                st.write(caption or "No caption provided")
                            else:
                                st.write(caption[:0] if caption is not None and len(caption) > 50 else caption or "No caption provided")
                    count[today][post['id']] = {'like_count': post['like_count'], 'comments_count': post['comments_count']}

            saveCount(count, count_filename)

'''

上記コードを実行すると下記のエラーが発生します。下記のすべての要件に従って修正してください。

- Python用のインデントを行頭に付与して、正常に表示されるかチェックしてから出力する
- コードの説明文は表示しない
- コードの最前部と最後尾に'''をつけコード様式で出力する
- 修正済みのコード全体を省略せずに表示する
- 指示のないコードの改変はしない
- "caption = post['caption']"以降のブロックについては改変しない


- "いいね/コメント数グラフを表示"を押下し表示しようとした際のエラー

'''

AttributeError: 'str' object has no attribute 'get'
Traceback:
File "/home/walhalax/anaconda3/lib/python3.9/site-packages/streamlit/runtime/scriptrunner/script_runner.py", line 565, in _run_script
    exec(code, module.__dict__)
File "/home/walhalax/PycharmProjects/pythonProject/その他/Instargram/inst_tileview/inst_tileview.py", line 170, in <module>
    like_comment_chart_data["Count"].append(count[date][post["id"].get("like_count", 0)])

'''    

- "サマリーチャートを表示"を押下し表示しようとした際のエラー

'''

PyplotGlobalUseWarning: You are calling st.pyplot() without any arguments. After December 1st, 2020, we will remove the ability to do this as it requires the use of Matplotlib's global figure object, which is not thread-safe.

To future-proof this code, you should pass in a figure as shown below:

>>> fig, ax = plt.subplots()
>>> ax.scatter([1, 2, 3], [1, 2, 3])
>>>    ... other plotting actions ...
>>> st.pyplot(fig)

You can disable this warning by disabling the config option: deprecation.showPyplotGlobalUse

st.set_option('deprecation.showPyplotGlobalUse', False)

or in your .streamlit/config.toml

[deprecation]
showPyplotGlobalUse = false

'''