Я создал веб-приложение с использованием 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()






Один из способов внедрить 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
см. обновленный ответ - вот как я успешно реализовал тег GA в своем развернутом приложении Streamlit с механизмом приложения. обратите внимание, что этот скрипт должен быть запущен до запуска сервера Streamlit
Большое спасибо!! Это работает сейчас! Я добавил ваш код раньше, но в свой основной файл приложения. Ваше примечание: «этот скрипт следует запускать до запуска сервера Streamlit» — вот что решило мою проблему. Я переместил этот код в другой файл Python и отредактировал свой файл докеров.
Я попробовал это. и есть всплывающее окно «Streamlit запускает JavaScript». Затем я заменил строку строкой тега Google, но аналитика Google по-прежнему говорит, что «Сбор данных не активен для вашего веб-сайта». Есть 2 проблемы, которые я считаю возможными: 1. код Google Analytics должен быть первым в заголовке, но также и set_page_config(), я поставил set_page_config() раньше, потому что в противном случае он выдает ошибку. 2. URL-адрес моего веб-сайта является бесплатным с облачной платформы Google, например, xxxx-11111.uc.r.appspot.com