Google Analytics не работает с приложением Streamlit

Я создал веб-приложение с использованием Streamlit и разместил его на Google Cloud Platform (App Engine). URL-адрес похож на https://xxx-11111.uc.r.appspot.com/, который указывается для URL-адреса потока.

Я включил Google Analytics 2 дня назад, но, видимо, он настроен неправильно.

Было дано, что мне нужно добавить в тег head.

Это код, в который я добавил тег Google Analytics...

Что не так??

def page_header():
    st.set_page_config(page_title = "xx", page_icon = "images/logo.png")
    header = st.container()
    with header:
        # Add banner image
        logo = Image.open("images/logo.png")
        st.image(logo, width=300)

        # Add Google Analytics code to the header
        ga_code = """
        <!-- Google tag (gtag.js) -->
        <script async src = "https://www.googletagmanager.com/gtag/js?id=G-xxxxxx"></script>
        <script>
            window.dataLayer = window.dataLayer || [];
            function gtag(){dataLayer.push(arguments);}
            gtag('js', new Date());

            gtag('config', 'G-xxxxxx');
        </script>
        """
        st.markdown(ga_code, unsafe_allow_html=True)


# Define the main function to run the app
def main():

    # Render the page header
    page_header()

    .....

if __name__ == "__main__":
    main()
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
119
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Один из способов внедрить Google Analytics в ваше приложение GAE Streamlit — добавить JS-код глобального тега сайта GA в файл по умолчанию /site-packages/streamlit/static/index.html.

ПРИМЕЧАНИЕ. Этот сценарий следует запускать до запуска сервера Streamlit.

from bs4 import BeautifulSoup
import shutil
import pathlib
import logging
import streamlit as st


def add_analytics_tag():
    # replace G-XXXXXXXXXX to your web app's ID
    
    analytics_js = """
    <!-- Global site tag (gtag.js) - Google Analytics -->
    <script async src = "https://www.googletagmanager.com/gtag/js?id=G-XXXXXXXXXX"></script>
    <script>
        window.dataLayer = window.dataLayer || [];
        function gtag(){dataLayer.push(arguments);}
        gtag('js', new Date());
        gtag('config', 'G-XXXXXXXXXX');
    </script>
    <div id = "G-XXXXXXXXXX"></div>
    """
    analytics_id = "G-XXXXXXXXXX"

    
    # Identify html path of streamlit
    index_path = pathlib.Path(st.__file__).parent / "static" / "index.html"
    logging.info(f'editing {index_path}')
    soup = BeautifulSoup(index_path.read_text(), features = "html.parser")
    if not soup.find(id=analytics_id): # if id not found within html file
        bck_index = index_path.with_suffix('.bck')
        if bck_index.exists():
            shutil.copy(bck_index, index_path)  # backup recovery
        else:
            shutil.copy(index_path, bck_index)  # save backup
        html = str(soup)
        new_html = html.replace('<head>', '<head>\n' + analytics_js) 
        index_path.write_text(new_html) # insert analytics tag at top of head

Я попробовал это. и есть всплывающее окно «Streamlit запускает JavaScript». Затем я заменил строку строкой тега Google, но аналитика Google по-прежнему говорит, что «Сбор данных не активен для вашего веб-сайта». Есть 2 проблемы, которые я считаю возможными: 1. код Google Analytics должен быть первым в заголовке, но также и set_page_config(), я поставил set_page_config() раньше, потому что в противном случае он выдает ошибку. 2. URL-адрес моего веб-сайта является бесплатным с облачной платформы Google, например, xxxx-11111.uc.r.appspot.com

DeadPool 19.04.2023 08:35

см. обновленный ответ - вот как я успешно реализовал тег GA в своем развернутом приложении Streamlit с механизмом приложения. обратите внимание, что этот скрипт должен быть запущен до запуска сервера Streamlit

Doracahl 19.04.2023 17:17

Большое спасибо!! Это работает сейчас! Я добавил ваш код раньше, но в свой основной файл приложения. Ваше примечание: «этот скрипт следует запускать до запуска сервера Streamlit» — вот что решило мою проблему. Я переместил этот код в другой файл Python и отредактировал свой файл докеров.

DeadPool 20.04.2023 08:40

Другие вопросы по теме