import streamlit as st import json from googleapiclient.discovery import build # ---------------- Sidebar Configuration ---------------- st.sidebar.header("Configuration") default_api_key = "AIzaSyAYdqy4sQzUPFXuSXVDJn3WHIEaHMXMv5I" API_KEY = st.sidebar.text_input( "Enter your PageSpeed Insights API Key", value=default_api_key, help="Don't have one? Get your API key from [Google PageSpeed Insights Get Started](https://developers.google.com/speed/docs/insights/v5/get-started)." ) url = st.sidebar.text_input("URL", "https://www.ocoya.com/") strategy = st.sidebar.radio("Select Strategy", ("DESKTOP", "MOBILE"), index=0) st.sidebar.markdown("### About") st.sidebar.info( "This app uses the Google PageSpeed Insights API to analyze the performance of a web page. " "You can use your own API key or the default key provided above." ) # ---------------- Helper Functions ---------------- def run_pagespeed(service, url, strategy="DESKTOP"): st.info(f"Running PageSpeed Insights for {url} with strategy {strategy}...") try: result = service.pagespeedapi().runpagespeed(url=url, strategy=strategy).execute() except Exception as e: st.error(f"Error running PageSpeed Insights on {url}: {e}") return None return result def process_result(result): """ Extract key metrics from the API response. Scores are converted to percentages (0-100). """ data = {} try: lighthouse_result = result.get("lighthouseResult", {}) categories = lighthouse_result.get("categories", {}) for cat, details in categories.items(): score = details.get("score", None) data[cat] = round(score * 100, 2) if score is not None else None data["requestedUrl"] = result.get("id", "") config_settings = lighthouse_result.get("configSettings", {}) data["strategy"] = config_settings.get("formFactor", "") data["fetchTime"] = lighthouse_result.get("fetchTime", "") except Exception as e: st.error(f"Error processing result: {e}") return data # ---------------- Main App Content ---------------- st.title("PageSpeed Insights Analyzer") st.write( "Use the sidebar to configure the analysis by entering a URL, selecting a strategy, and providing an API key. " "Then click **Run Analysis** in the sidebar." ) if st.sidebar.button("Run Analysis"): # Build the API service object service = build('pagespeedonline', 'v5', developerKey=API_KEY) with st.spinner("Running analysis..."): result = run_pagespeed(service, url, strategy=strategy) if result: metrics = process_result(result) st.subheader("Extracted Metrics") st.write(metrics) st.subheader("Full JSON Response") st.json(result)