{"id":83966,"date":"2026-05-08T15:19:11","date_gmt":"2026-05-08T14:19:11","guid":{"rendered":"https:\/\/kinsta.com\/it\/?p=83966&#038;preview=true&#038;preview_id=83966"},"modified":"2026-05-11T14:42:30","modified_gmt":"2026-05-11T13:42:30","slug":"api-kinsta-e-google-ai","status":"publish","type":"post","link":"https:\/\/kinsta.com\/it\/blog\/api-kinsta-e-google-ai\/","title":{"rendered":"Automatizza la reportistica dei clienti con Kinsta API e Google AI"},"content":{"rendered":"<p>Per le agenzie moderne, un sistema di reportistica coerente e di alta qualit\u00e0 \u00e8 essenziale per mantenere la fiducia dei clienti e costruire una fedelt\u00e0 a lungo termine. Un report chiaro e informativo permette di monitorare le tendenze di vendita, dimostrare l&#8217;efficacia delle campagne, calcolare il ritorno sugli investimenti (ROI) e molto altro ancora.<\/p>\n<p>Tuttavia, per un&#8217;agenzia che gestisce decine o addirittura centinaia di siti, la generazione di questi report periodici pu\u00f2 diventare un grosso collo di bottiglia, compromettendo la scalabilit\u00e0 delle operazioni.<\/p>\n<p>Ecco perch\u00e9 ottimizzare e automatizzare il recupero dei dati \u00e8 fondamentale. In questo modo si ripristina l&#8217;efficienza e si lascia che il team si concentri su attivit\u00e0 ad alto valore aggiunto, come lo sviluppo di nuovi progetti.<\/p>\n<p>In questo articolo vedremo come sfruttare l&#8217;<a href=\"https:\/\/kinsta.com\/it\/docs\/kinsta-api\/\" target=\"_blank\" rel=\"noopener noreferrer\">API di Kinsta<\/a> per recuperare automaticamente i dati dell&#8217;hosting e generare report strategici con la potenza dell&#8217;intelligenza artificiale.<\/p>\n<p>Non vedi l&#8217;ora di ottimizzare il tuo sistema di reporting? Continua a leggere.<br \/>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc><\/p>\n<h2>Accesso alle statistiche di Kinsta tramite MyKinsta e Kinsta API<\/h2>\n<p>I clienti Kinsta hanno accesso a una grande quantit\u00e0 di dati attraverso la <a href=\"https:\/\/kinsta.com\/it\/mykinsta\/\" target=\"_blank\" rel=\"noopener noreferrer\">dashboard dell&#8217;hosting MyKinsta<\/a>. \u00c8 possibile accedere ai dati del proprio piano nella sezione Statistiche della dashboard.<\/p>\n<figure id=\"attachment_208745\" aria-describedby=\"caption-attachment-208745\" style=\"width: 2568px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-208745\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2026\/04\/mykinsta-analytics.png\" alt=\"Panoramica della sezione Statistiche di MyKinsta.\" width=\"2568\" height=\"774\"><figcaption id=\"caption-attachment-208745\" class=\"wp-caption-text\">Panoramica della sezione Statistiche di MyKinsta.<\/figcaption><\/figure>\n<p>La pagina delle Statistiche \u00e8 suddivisa in diverse schede, ognuna delle quali si concentra su un aspetto specifico dell&#8217;attivit\u00e0 del sito:<\/p>\n<ul>\n<li><strong>Utilizzo del piano<\/strong> &#8211; Mostra il consumo di risorse del piano, sia in modo cumulativo che suddiviso per singolo sito.<\/li>\n<li><strong>Richieste principali<\/strong> &#8211; Permette di identificare le principali richieste al sito, suddivise per larghezza di banda e visualizzazioni.<\/li>\n<li><strong>Cache<\/strong> &#8211; Fornisce una ripartizione dell&#8217;uso della cache, compresa la ripartizione della cache, i componenti della cache del server e i bypass della cache del server.<\/li>\n<li><strong>CDN &#038; edge<\/strong> &#8211; Offre dati sul consumo di banda del CDN, sulla larghezza di banda della cache Edge e gli elenchi dei principali file serviti dalla cache CDN.<\/li>\n<li><strong>Dispersione<\/strong> &#8211; Mostra la percentuale di visite da desktop, tablet e mobile.<\/li>\n<li><strong>Prestazioni<\/strong> &#8211; Include varie metriche sulle prestazioni come il tempo medio di risposta PHP MySQL, il throughput PHP, il limite di thread PHP e altro ancora.<\/li>\n<li><strong>Risposta<\/strong> &#8211; Fornisce statistiche sui codici di risposta, compresa una ripartizione dettagliata dei codici di errore.<\/li>\n<li><strong>Geo &#038; IP<\/strong> &#8211; Mostra gli elenchi dei principali Paesi, citt\u00e0 e client IP da cui provengono le richieste al sito.<\/li>\n<\/ul>\n<p>Puoi accedere a queste stesse analisi a livello di sito navigando su <strong>Siti<\/strong> &gt; <strong>nome del sito<\/strong> &gt; <strong>Statistiche<\/strong>.<\/p>\n<figure id=\"attachment_208746\" aria-describedby=\"caption-attachment-208746\" style=\"width: 2570px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-208746\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2026\/04\/site-analytics.png\" alt=\"Statistiche del sito in MyKinsta.\" width=\"2570\" height=\"1140\"><figcaption id=\"caption-attachment-208746\" class=\"wp-caption-text\">Statistiche del sito in MyKinsta.<\/figcaption><\/figure>\n<p>Le statistiche di Kinsta forniscono una serie di dati sbalorditivi; semplicemente navigando nella dashboard di MyKinsta potrai avere un quadro molto chiaro del consumo di risorse, dell&#8217;efficienza e delle prestazioni di un sito. Saprai esattamente da dove proviene la maggior parte delle richieste e quali sono quelle che consumano pi\u00f9 risorse.<\/p>\n<p>In combinazione con il nostro <a href=\"https:\/\/kinsta.com\/it\/strumento-apm\/\">strumento Kinsta APM<\/a>, le Statistiche di Kinsta ti permettono di ottimizzare le prestazioni dei tuoi siti WordPress.<\/p>\n<p>Non tutti sanno che i dati delle Statistiche di Kinsta sono accessibili anche tramite l&#8217;<a href=\"https:\/\/kinsta.com\/it\/docs\/kinsta-api\/\">API di Kinsta<\/a>. Ci\u00f2 permette di recuperare programmaticamente i dati e di costruire metriche di hosting, che potrai poi utilizzare per generare report automatici da condividere con i tuoi clienti.<\/p>\n<p>Scopriamo qualcosa in pi\u00f9 sugli endpoint dell&#8217;API di Kinsta.<\/p>\n<h3>L&#8217;endpoint Analytics dell&#8217;API di Kinsta<\/h3>\n<p>Con l&#8217;endpoint Analytics dell&#8217;API di Kinsta puoi accedere ai dati grezzi sull&#8217;utilizzo delle risorse e sullo stato di salute del tuo sito web.<\/p>\n<ul>\n<li><a href=\"https:\/\/api-docs.kinsta.com\/api-reference\/analytics\/get-visits-usage\" target=\"_blank\" rel=\"noopener noreferrer\">Utilizzo delle visite<\/a>, <a href=\"https:\/\/api-docs.kinsta.com\/api-reference\/analytics\/get-server-bandwidth-usage\" target=\"_blank\" rel=\"noopener noreferrer\">utilizzo della larghezza di banda del server<\/a> e <a href=\"https:\/\/api-docs.kinsta.com\/api-reference\/analytics\/get-cdn-bandwidth-usage\" target=\"_blank\" rel=\"noopener noreferrer\">utilizzo della larghezza di banda del CDN<\/a>: queste metriche tengono conto dell&#8217;utilizzo delle risorse rispetto al tuo piano di hosting durante il periodo di fatturazione corrente.<\/li>\n<li><a href=\"https:\/\/api-docs.kinsta.com\/api-reference\/analytics\/get-visits\" target=\"_blank\" rel=\"noopener noreferrer\">Visite<\/a>: fornisce il numero totale di visite a un determinato ambiente in un determinato periodo di tempo.<\/li>\n<li><a href=\"https:\/\/api-docs.kinsta.com\/api-reference\/analytics\/get-disk-space\" target=\"_blank\" rel=\"noopener noreferrer\">Spazio su disco<\/a>: fornisce lo spazio totale su disco utilizzato da un determinato ambiente in un determinato periodo di tempo.<\/li>\n<li><a href=\"https:\/\/api-docs.kinsta.com\/api-reference\/analytics\/get-server-bandwidth\" target=\"_blank\" rel=\"noopener noreferrer\">Larghezza di banda del server<\/a>: fornisce la larghezza di banda consumata da un determinato ambiente in un determinato periodo di tempo.<\/li>\n<li><a href=\"https:\/\/api-docs.kinsta.com\/api-reference\/analytics\/get-cdn-bandwidth\" target=\"_blank\" rel=\"noopener noreferrer\">Larghezza di banda CDN<\/a>: fornisce la larghezza di banda CDN consumata da un determinato ambiente in un determinato periodo di tempo.<\/li>\n<li><a href=\"https:\/\/api-docs.kinsta.com\/api-reference\/analytics\/get-top-countries\" target=\"_blank\" rel=\"noopener noreferrer\">Paesi principali<\/a>: fornisce un elenco dei principali Paesi da cui provengono le richieste al sito in un determinato periodo di tempo.<\/li>\n<li><a href=\"https:\/\/api-docs.kinsta.com\/api-reference\/analytics\/get-top-cities\" target=\"_blank\" rel=\"noopener noreferrer\">Citt\u00e0 principali<\/a>: fornisce un elenco delle principali citt\u00e0 da cui provengono le richieste al sito in un determinato periodo di tempo.<\/li>\n<li><a href=\"https:\/\/api-docs.kinsta.com\/api-reference\/analytics\/get-top-client-ips\" target=\"_blank\" rel=\"noopener noreferrer\">Top Client IPs<\/a>: fornisce un elenco dei principali indirizzi IP dei clienti da cui provengono le richieste al sito in un determinato periodo di tempo.<\/li>\n<li><a href=\"https:\/\/api-docs.kinsta.com\/api-reference\/analytics\/get-visits-dispersion\" target=\"_blank\" rel=\"noopener noreferrer\">Dispersione delle visite<\/a>: fornisce dati sulla distribuzione delle visite tra dispositivi desktop, tablet e mobili in un determinato periodo di tempo.<\/li>\n<li><a href=\"https:\/\/api-docs.kinsta.com\/api-reference\/analytics\/get-response-code-breakdown\" target=\"_blank\" rel=\"noopener noreferrer\">Disaggregazione dei codici di risposta<\/a>: Fornisce una ripartizione dei codici di stato HTTP restituiti dal server in un determinato periodo di tempo.<\/li>\n<\/ul>\n<p>Di seguito sono riportati alcuni esempi di utilizzo dell&#8217;endpoint <code>analytics<\/code>.<\/p>\n<h4>Visite<\/h4>\n<p>La seguente richiesta fornisce il numero totale di visite al sito e il numero di indirizzi IP unici che vi hanno avuto accesso negli ultimi 30 giorni:<\/p>\n<pre><code>https:\/\/api.kinsta.com\/v2\/sites\/environments\/{KINSTA_ENV_ID}\/analytics\/visits?time_span=30_days&company_id={KINSTA_COMPANY_ID}<\/code><\/pre>\n<p>La risposta sar\u00e0 strutturata come segue:<\/p>\n<pre><code class=\"language-json\">{\n\t\"analytics\": {\n\t\t\"analytics_response\": {\n\t\t\t\"key\": \"uniqueip\",\n\t\t\t\"data\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"uniqueip\",\n\t\t\t\t\t\"total\": 1000,\n\t\t\t\t\t\"dataset\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"2025-10-28T00:00:00.000Z\",\n\t\t\t\t\t\t\t\"value\": \"1000\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"2025-10-28T00:00:00.000Z\",\n\t\t\t\t\t\t\t\"value\": \"900\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"2025-10-28T00:00:00.000Z\",\n\t\t\t\t\t\t\t\"value\": \"820\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t...\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t}\n}<\/code><\/pre>\n<h4>Larghezza di banda<\/h4>\n<p>Il seguente esempio mostra come interrogare l&#8217;API di Kinsta per recuperare l&#8217;utilizzo della larghezza di banda del server negli ultimi 30 giorni:<\/p>\n<pre><code>https:\/\/api.kinsta.com\/v2\/sites\/environments\/{KINSTA_ENV_ID}\/analytics\/bandwidth?time_span=30_days&company_id={KINSTA_COMPANY_ID}<\/code><\/pre>\n<p>La risposta del server Kinsta fornisce l&#8217;utilizzo giornaliero della larghezza di banda negli ultimi 30 giorni:<\/p>\n<pre><code class=\"language-json\">{\n\t\"analytics\": {\n\t\t\"analytics_response\": {\n\t\t\t\"key\": \"bandwidth\",\n\t\t\t\"data\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"bandwidth\",\n\t\t\t\t\t\"total\": 1000,\n\t\t\t\t\t\"dataset\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"2026-03-11T00:00:00.000Z\",\n\t\t\t\t\t\t\t\"value\": \"37347250\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"2026-03-12T00:00:00.000Z\",\n\t\t\t\t\t\t\t\"value\": \"9276458\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t...\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t}\n}<\/code><\/pre>\n<h4>Larghezza di banda CDN<\/h4>\n<p>In quest&#8217;altro esempio, interroghiamo l&#8217;API di Kinsta per conoscere l&#8217;utilizzo della larghezza di banda CDN negli ultimi 7 giorni:<\/p>\n<pre><code>https:\/\/api.kinsta.com\/v2\/sites\/environments\/{KINSTA_ENV_ID}\/analytics\/cdn-bandwidth?time_span=7_days&company_id={KINSTA_COMPANY_ID}<\/code><\/pre>\n<p>Il server fornir\u00e0 i seguenti dati:<\/p>\n<pre><code class=\"language-json\">{\n\t\"analytics\": {\n\t\t\"analytics_response\": {\n\t\t\t\"key\": \"cdn-bandwidth\",\n\t\t\t\"data\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"cdn-bandwidth\",\n\t\t\t\t\t\"total\": 1000,\n\t\t\t\t\t\"dataset\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"2026-04-02T00:00:00.000Z\",\n\t\t\t\t\t\t\t\"value\": \"753447\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"2026-04-03T00:00:00.000Z\",\n\t\t\t\t\t\t\t\"value\": \"16911\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t...\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t}\n}<\/code><\/pre>\n<p>Puoi provarlo inserendo la tua chiave API Kinsta (bearer token), l&#8217;ID dell&#8217;ambiente e l&#8217;ID dell&#8217;azienda nel <a href=\"https:\/\/api-docs.kinsta.com\/api-reference\/analytics\/get-visits?playground=open\" target=\"_blank\" rel=\"noopener noreferrer\">playground dell&#8217;API<\/a>.<\/p>\n<figure id=\"attachment_208758\" aria-describedby=\"caption-attachment-208758\" style=\"width: 2352px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-208758\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2026\/04\/api-playground.png\" alt=\"Prova l'API Kinsta nell'API playground.\" width=\"2352\" height=\"1218\"><figcaption id=\"caption-attachment-208758\" class=\"wp-caption-text\">Prova l&#8217;API Kinsta nell&#8217;API playground.<\/figcaption><\/figure>\n<p>Ora che sai come accedere ai dati analitici del tuo sito su Kinsta, puoi usarli per automatizzare le tue operazioni. Questo include anche l&#8217;automazione del sistema di reporting.<\/p>\n<p>Nelle sezioni seguenti vedremo come automatizzare il sistema di reporting della tua agenzia utilizzando l&#8217;API di Kinsta. Creeremo uno script Python e sfrutteremo le <a href=\"https:\/\/kinsta.com\/it\/blog\/come-creare-una-pipeline-ci-cd\/\">GitHub Actions<\/a> per automatizzare la creazione e l&#8217;esecuzione. Questo trasformer\u00e0 i dati grezzi restituiti dall&#8217;API in tabelle e grafici e interrogher\u00e0 Google AI per generare un report finale.<\/p>\n<p>Mettiamoci al lavoro.<\/p>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-info\">\n            <h3>Info<\/h3>\n        <p>Il codice completo di questa esercitazione \u00e8 disponibile in <a href=\"https:\/\/github.com\/carlodaniele\/kinsta-gemini-reporting\" target=\"_blank\" rel=\"noopener noreferrer\">questo repository GitHub<\/a>.<\/p>\n<\/aside>\n\n<h2>Costruire un sistema di report automatico utilizzando l&#8217;API di Kinsta e Google AI<\/h2>\n<p>Il nostro obiettivo \u00e8 creare un report automatico che venga generato a intervalli specifici. Il sistema interrogher\u00e0 l&#8217;API di Kinsta per recuperare i dati relativi alle visite, alla larghezza di banda del server e alla larghezza di banda del CDN. Questi dati verranno poi utilizzati per creare grafici e tabelle in un file PDF. Come parte di questo processo, i dati saranno inviati all&#8217;API Gemini per produrre un&#8217;analisi dei dati estratti, che sar\u00e0 poi inclusa nel report.<\/p>\n<figure id=\"attachment_208776\" aria-describedby=\"caption-attachment-208776\" style=\"width: 3355px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-208776\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2026\/04\/automatic-report-preview.png\" alt=\"Anteprima del report automatico generato con GitHub Actions e l'API Kinsta.\" width=\"3355\" height=\"1572\"><figcaption id=\"caption-attachment-208776\" class=\"wp-caption-text\">Anteprima del report automatico generato con GitHub Actions e l&#8217;API Kinsta.<\/figcaption><\/figure>\n<h3>Impostazione del progetto su GitHub<\/h3>\n<p>Nella homepage di GitHub, clicca sul pulsante verde <strong>New<\/strong> per creare un nuovo progetto. Una volta creato un progetto vuoto, vai su <strong>Settings<\/strong> &gt; <strong>Secrets and variables<\/strong> &gt; <strong>Actions<\/strong> e aggiungi i segreti mostrati nell&#8217;immagine seguente.<\/p>\n<figure id=\"attachment_208781\" aria-describedby=\"caption-attachment-208781\" style=\"width: 1580px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-208781\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2026\/04\/repository-secrets-2.png\" alt=\"I segreti del repository GitHub Actions.\" width=\"1580\" height=\"676\"><figcaption id=\"caption-attachment-208781\" class=\"wp-caption-text\">I segreti del repository GitHub Actions.<\/figcaption><\/figure>\n<p>Memorizzare le chiavi API e gli ID in GitHub Secrets li rende inaccessibili a chiunque e contribuisce a garantire la sicurezza del tuo codice.<\/p>\n<h4>GEMINI_API_KEY<\/h4>\n<p>Puoi generare una chiave API di Google AI nella <a href=\"https:\/\/aistudio.google.com\/api-keys\" target=\"_blank\" rel=\"noopener noreferrer\">dashboard di Google AI Studio<\/a>. Per maggiori informazioni, consulta la <a href=\"https:\/\/ai.google.dev\/gemini-api\/docs\/api-key\">documentazione di Google AI<\/a>.<\/p>\n<h4>KINSTA_API-KEY<\/h4>\n<p>Successivamente, segui le istruzioni del nostro articolo per <a href=\"https:\/\/kinsta.com\/it\/blog\/chiave-api-kinsta\/\">generare una chiave API Kinsta<\/a>.<\/p>\n<h4>KINSTA_COMPANY_ID, KINSTA_ENV_ID, KINSTA_SITE_ID<\/h4>\n<p>Puoi trovare l&#8217;ID del sito, l&#8217;ID dell&#8217;ambiente e l&#8217;ID dell&#8217;azienda in <strong>Siti<\/strong> &gt; <strong>nome del sito<\/strong> &gt; <strong>Info<\/strong> nella tua dashboard MyKinsta.<\/p>\n<figure id=\"attachment_208778\" aria-describedby=\"caption-attachment-208778\" style=\"width: 2080px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-208778\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2026\/04\/site-info.png\" alt=\"Informazioni sul sito in MyKinsta.\" width=\"2080\" height=\"828\"><figcaption id=\"caption-attachment-208778\" class=\"wp-caption-text\">Informazioni sul sito in MyKinsta.<\/figcaption><\/figure>\n<p>Ora passiamo ai file del progetto.<\/p>\n<h3>Librerie necessarie e configurazione delle GitHub Actions<\/h3>\n<p>Nella directory principale del progetto GitHub, crea un file chiamato <code>requirements.txt<\/code> e aggiungi quanto segue:<\/p>\n<pre><code>google-genai\nrequests\nmatplotlib\nfpdf2<\/code><\/pre>\n<p>Questo file elenca i componenti necessari per il tuo progetto.<\/p>\n<ul>\n<li><code>google-genai<\/code>: \u00e8 la libreria di Google per interagire con i modelli Gemini.<\/li>\n<li><code>requests<\/code>: una libreria per effettuare richieste HTTP. In questo progetto verr\u00e0 utilizzata per inviare richieste HTTP all&#8217;API di Kinsta.<\/li>\n<li><code>matplotlib<\/code>: una libreria Python per <a href=\"https:\/\/matplotlib.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">creare grafici e visualizzare dati<\/a>.<\/li>\n<li><code>fpdf2<\/code>: \u00e8 una libreria che permette di <a href=\"https:\/\/py-pdf.github.io\/fpdf2\/index.html\" target=\"_blank\" rel=\"noopener noreferrer\">generare file PDF<\/a>.<\/li>\n<\/ul>\n<p>Quindi, crea un file chiamato <code>.github\/workflows\/generate_report.yml<\/code> con il seguente codice:<\/p>\n<pre><code class=\"language-yaml\">name: Generate Kinsta Analytics Report\n\non:\n  push:\n    branches: [main]\n  workflow_dispatch:\n\njobs:\n  build-and-run:\n    runs-on: ubuntu-latest\n    steps:\n      - name: Checkout Repository\n        uses: actions\/checkout@v4\n\n      - name: Set up Python\n        uses: actions\/setup-python@v5\n        with:\n          python-version: '3.12'\n\n      - name: Install dependencies\n        run: |\n          python -m pip install --upgrade pip\n          pip install -r requirements.txt\n\n      - name: Run Report Script\n        env:\n          KINSTA_API_KEY: ${{ secrets.KINSTA_API_KEY }}\n          KINSTA_ENV_ID: ${{ secrets.KINSTA_ENV_ID }}\n          KINSTA_SITE_ID: ${{ secrets.KINSTA_SITE_ID }}\n          KINSTA_COMPANY_ID: ${{ secrets.KINSTA_COMPANY_ID }}\n          GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}\n        run: python main.py\n\n      - name: Upload Report\n        uses: actions\/upload-artifact@v4\n        with:\n          name: Kinsta-Advanced-Report\n          path: \"*.pdf\"<\/code><\/pre>\n<p>GitHub utilizza questo file per eseguire automaticamente il codice tramite le GitHub Actions. Diamo un&#8217;occhiata pi\u00f9 da vicino:<\/p>\n<pre><code class=\"language-yaml\">name: Generate Kinsta Analytics Report\n\non:\n  push:\n    branches: [main]\n  workflow_dispatch:<\/code><\/pre>\n<ul>\n<li><code>name<\/code>: il nome del progetto cos\u00ec come appare nella scheda <strong>Actions<\/strong> di GitHub.<\/li>\n<li><code>on<\/code>: determina quando attivare il workflow.<\/li>\n<li><code>push<\/code>: il workflow viene eseguito ogni volta che si apporta una modifica al codice nel branch principale.<\/li>\n<li><code>workflow_dispatch<\/code>: permette di eseguire il flusso di lavoro manualmente.<\/li>\n<\/ul>\n<pre><code class=\"language-yaml\">jobs:\n  build-and-run:\n    runs-on: ubuntu-latest<\/code><\/pre>\n<ul>\n<li><code>jobs<\/code>: l&#8217;inizio dei task da eseguire.<\/li>\n<li><code>build-and-run<\/code>: un nome arbitrario che identifica una sequenza specifica di azioni.<\/li>\n<li><code>runs-on<\/code>: specifica il sistema su cui il workflow deve essere eseguito.<\/li>\n<li><code>ubuntu-latest<\/code>: imposta l&#8217;ultima versione di Ubuntu Linux.<\/li>\n<\/ul>\n<pre><code class=\"language-yaml\">steps:\n      - name: Checkout Repository\n        uses: actions\/checkout@v4\n\n      - name: Set up Python\n        uses: actions\/setup-python@v5\n        with:\n          python-version: '3.12'<\/code><\/pre>\n<ul>\n<li><code>steps<\/code>: la sequenza di operazioni da eseguire.<\/li>\n<li><code>name<\/code>: il nome dell&#8217;operazione da eseguire<\/li>\n<li><code>uses<\/code>: il modulo GitHub preconfigurato (Action)<\/li>\n<\/ul>\n<pre><code class=\"language-yaml\">     - name: Install dependencies\n        run: |\n          python -m pip install --upgrade pip\n          pip install -r requirements.txt<\/code><\/pre>\n<ul>\n<li><code>python -m pip install --upgrade pip<\/code>: aggiorna pip (il <a href=\"https:\/\/pypi.org\/project\/pip\/\" target=\"_blank\" rel=\"noopener noreferrer\">gestore di pacchetti Python<\/a>) all&#8217;ultima versione disponibile.<\/li>\n<li><code>pip install -r requirements.txt<\/code>: legge il file <code>requirements.txt<\/code> e installa i pacchetti in esso elencati.<\/li>\n<\/ul>\n<pre><code class=\"language-yaml\">     - name: Run Report Script\n        env:\n          KINSTA_API_KEY: ${{ secrets.KINSTA_API_KEY }}\n          KINSTA_ENV_ID: ${{ secrets.KINSTA_ENV_ID }}\n          KINSTA_SITE_ID: ${{ secrets.KINSTA_SITE_ID }}\n          KINSTA_COMPANY_ID: ${{ secrets.KINSTA_COMPANY_ID }}\n          GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}\n        run: python main.py<\/code><\/pre>\n<ul>\n<li><code>env<\/code>: recupera i valori delle variabili d&#8217;ambiente da GitHub Secrets.<\/li>\n<li><code>run: python main.py<\/code>: avvia l&#8217;interprete Python ed esegue il file <code>main.py<\/code>.<\/li>\n<\/ul>\n<pre><code class=\"language-yaml\">     - name: Upload Report\n        uses: actions\/upload-artifact@v4\n        with:\n          name: Kinsta-Advanced-Report\n          path: \"*.pdf\"<\/code><\/pre>\n<ul>\n<li><code>uses<\/code>: actions\/upload-artifact@v4: utilizza l&#8217;azione GitHub per gestire gli artifact, un file o una cartella generati durante l&#8217;esecuzione dello script.<\/li>\n<li><code>with<\/code>: imposta i parametri di configurazione.<\/li>\n<\/ul>\n<p>La configurazione del progetto di automazione \u00e8 completa. Ora \u00e8 il momento di creare gli script Python.<\/p>\n<h3>Interrogare l&#8217;API di Kinsta in modo programmatico<\/h3>\n<p>Una volta completata la configurazione, naviga nella directory principale del progetto GitHub e crea un nuovo file chiamato <code>kinsta_utils.py<\/code> con il seguente codice:<\/p>\n<pre><code class=\"language-python\">import requests\nimport os\n\nKINSTA_API_KEY = os.getenv(\"KINSTA_API_KEY\")\nKINSTA_SITE_ID = os.getenv(\"KINSTA_SITE_ID\")\nKINSTA_ENV_ID = os.getenv(\"KINSTA_ENV_ID\")\nKINSTA_COMPANY_ID = os.getenv(\"KINSTA_COMPANY_ID\")\nBASE_URL = f\"https:\/\/api.kinsta.com\/v2\/sites\/environments\/{KINSTA_ENV_ID}\/analytics\"\n\ndef get_headers():\n    return {\"Authorization\": f\"Bearer {KINSTA_API_KEY}\"}<\/code><\/pre>\n<ul>\n<li>Le prime due dichiarazioni di <code>import<\/code>\u00a0caricano la libreria standard per effettuare le richieste HTTP e il modulo per interagire con il sistema operativo<code>(os<\/code>).<\/li>\n<li>Le quattro righe successive<code> (os.getenv<\/code>) recuperano le credenziali da GitHub Secrets.<\/li>\n<li><code>BASE_URL<\/code> definisce l&#8217;endpoint principale dell&#8217;API di Kinsta utilizzato dallo script.<\/li>\n<li>La funzione <code>get_headers<\/code> genera l&#8217;Authorization Header, che includer\u00e0 la chiave API di Kinsta.<\/li>\n<\/ul>\n<p>Quindi, crea una funzione helper che converta i dati grezzi restituiti dall&#8217;API in megabyte.<\/p>\n<pre><code class=\"language-python\">def format_bytes_to_mb(bytes_value):\n    \"\"\"Converts raw bytes from API to human-readable Megabytes.\"\"\"\n\n    try:\n        # Standard conversion to MB\n        # return round(int(bytes_value) \/ (1024 * 1024), 2)\n\n        # Decimal standard (used in MyKinsta dashboard) \n        return round(int(bytes_value) \/ 1_000_000, 2)\n\n    except (ValueError, TypeError):\n        return 0<\/code><\/pre>\n<ul>\n<li>Questo codice offre due opzioni. La prima utilizza lo standard binario<code>(1024 x 1024<\/code>), mentre la seconda utilizza lo standard decimale. La divisione per <code>1_000_000<\/code> assicura che il numero nel report PDF corrisponda al numero che i tuoi clienti vedranno nelle statistiche di MyKinsta.<\/li>\n<\/ul>\n<p>La seguente funzione interroga l&#8217;API di Kinsta e restituisce una serie di dati grezzi:<\/p>\n<pre><code class=\"language-python\">def fetch_kinsta_metric(endpoint, start_date, end_date):\n\n    url = f\"{BASE_URL}\/{endpoint}\"\n\n    params = {\n        \"company_id\": KINSTA_COMPANY_ID,\n        \"from\": f\"{start_date}T00:00:00.000Z\",\n        \"to\": f\"{end_date}T23:59:59.000Z\"\n    }\n\n    try:\n        response = requests.get(url, headers=get_headers(), params=params)\n        if response.status_code == 200:\n            data_node = response.json()['analytics']['analytics_response']['data'][0]\n            total = data_node.get('total', 0)\n            dataset = data_node.get('dataset', [])[:7]\n            return total, dataset\n\n    except Exception as e:\n        print(f\"Error fetching {endpoint}: {e}\")\n\n    return 0, []<\/code><\/pre>\n<ul>\n<li>La funzione <code>fetch_kinsta_metric<\/code> richiede tre argomenti: <code>endpoint<\/code>, <code>start_date<\/code> e <code>end_date<\/code>. Questi vengono utilizzati per costruire l&#8217;URL della richiesta. L&#8217;endpoint pu\u00f2 essere <code>visits<\/code>, <code>bandwidth<\/code>\u00a0o <code>cdn-bandwidth<\/code>.<\/li>\n<li>L&#8217;array <code>params<\/code> contiene i parametri della richiesta.<\/li>\n<li>La risposta di Kinsta \u00e8 un oggetto JSON annidato<code>(data_node<\/code>) che fornisce i valori aggregati per il periodo<code>(total<\/code>) e un elenco di valori giornalieri<code>(dataset<\/code>).<\/li>\n<\/ul>\n<p>La funzione finale del file <code>kinsta_utils.py<\/code> recupera il nome del sito.<\/p>\n<pre><code class=\"language-python\">def fetch_site_name():\n    url = f\"https:\/\/api.kinsta.com\/v2\/sites\/{KINSTA_SITE_ID}\"\n    \n    try:\n        response = requests.get(url, headers=get_headers())\n        if response.status_code == 200:\n            data = response.json()\n            site_data = data.get('site', {})\n            \n            site_label = site_data.get('display_name', 'Unknown Site')\n            \n            env_label = \"Unknown Env\"\n            envs = site_data.get('environments', [])\n            for env in envs:\n                if env.get('id') == KINSTA_ENV_ID:\n                    env_label = env.get('display_name')\n                    break\n            \n            return f\"{site_label} ({env_label})\"\n        else:\n            print(f\"Kinsta API Error: {response.status_code} - {response.text}\")\n    except Exception as e:\n        print(f\"Error fetching site name: {e}\")\n        \n    return \"Unknown Site\"<\/code><\/pre>\n<p>Questo codice dovrebbe essere autoesplicativo. Per maggiori dettagli sull&#8217;<a href=\"https:\/\/api-docs.kinsta.com\/api-reference\/wordpress-sites\/get-site-by-id\" target=\"_blank\" rel=\"noopener noreferrer\">endpoint <code>sites<\/code><\/a>, consulta la documentazione dell&#8217;API.<\/p>\n<p>Ora non resta che impostare il flusso di lavoro.<\/p>\n<h3>Automatizzare il flusso di lavoro con Python e Gemini<\/h3>\n<p>L&#8217;ultimo file da creare \u00e8 il motore dell&#8217;applicazione. Sempre nella directory principale del progetto GitHub, crea un file <code>main.py.<\/code> Per iniziare, aggiungi il seguente codice:<\/p>\n<pre><code class=\"language-python\">import os\nimport matplotlib\nmatplotlib.use('Agg')\nimport matplotlib.pyplot as plt\nfrom google.genai import Client\nfrom fpdf import FPDF, XPos, YPos\nfrom datetime import datetime, timedelta\nfrom kinsta_utils import fetch_kinsta_metric, format_bytes_to_mb, fetch_site_name\n\nREPORT_LANG = \"en\" \nMODEL_ID = \"gemini-2.5-flash\" \nGEMINI_API_KEY = os.getenv(\"GEMINI_API_KEY\")\nclient = Client(api_key=GEMINI_API_KEY)\n\ntoday = datetime.now()\ncurr_end_dt = today - timedelta(days=1)\ncurr_start_dt = today - timedelta(days=7)\nprev_end_dt = today - timedelta(days=8)\nprev_start_dt = today - timedelta(days=14)\n\nCURR_RANGE = f\"{curr_start_dt.strftime('%b %d')} - {curr_end_dt.strftime('%b %d')}\"\nPREV_RANGE = f\"{prev_start_dt.strftime('%b %d')} - {prev_end_dt.strftime('%b %d')}\"\n\nDATES = [\n    prev_start_dt.strftime(\"%Y-%m-%d\"), \n    prev_end_dt.strftime(\"%Y-%m-%d\"), \n    curr_start_dt.strftime(\"%Y-%m-%d\"), \n    curr_end_dt.strftime(\"%Y-%m-%d\")\n]\n\nCURR_DAYS_LABELS = [(curr_start_dt + timedelta(days=i)).strftime(\"%d %a\") for i in range(7)]\nPREV_DAYS_LABELS = [(prev_start_dt + timedelta(days=i)).strftime(\"%d %a\") for i in range(7)]\nX_AXIS_LABELS = [(curr_start_dt + timedelta(days=i)).strftime(\"%d\") for i in range(7)]<\/code><\/pre>\n<p>Ecco come \u00e8 impostato lo script:<\/p>\n<ul>\n<li>Le istruzioni di <code>import<\/code>\u00a0caricano le librerie necessarie e <code>matplotlib.use('Agg')<\/code> indica a Python di generare i grafici e di tenerli in memoria.<\/li>\n<li>Il blocco successivo imposta la lingua (<code>en<\/code>) e il modello (<code>gemini-2.5-flash<\/code>), quindi inizializza il client Google.<\/li>\n<li>Poi definisce le finestre temporali per confrontare i valori degli ultimi sette giorni con quelli dei sette giorni precedenti.<\/li>\n<li>Infine, imposta le etichette per le tabelle e i grafici.<\/li>\n<\/ul>\n<p>Il passo successivo consiste nel definire una classe <code>KinstaReport<\/code> per generare pagine di report utilizzando la libreria FPDF:<\/p>\n<pre><code class=\"language-python\">class KinstaReport(FPDF):\n    def __init__(self, site_name=\"Unknown Site\"):\n        super().__init__()\n        self.site_name = site_name\n\n    def header(self):\n        self.set_font(\"Helvetica\", \"B\", 8)\n        self.set_text_color(150)\n        # Site name\n        self.cell(100, 10, f\"Site: {self.site_name}\", align=\"L\")\n        # Date generated\n        self.cell(0, 10, f\"Kinsta Analytics Report | Generated: {datetime.now().strftime('%Y-%m-%d')}\", \n                  align=\"R\", new_x=XPos.LMARGIN, new_y=YPos.NEXT)\n\n    def add_metric_page(self, title, chart_path, prev_vals, curr_vals, unit=\"\"):\n        self.add_page()\n        # Page title\n        self.set_font(\"Helvetica\", \"B\", 24)\n        self.set_text_color(83, 51, 237)\n        self.cell(0, 15, title, align=\"C\", new_x=XPos.LMARGIN, new_y=YPos.NEXT)\n        \n        # Subtitle\n        self.set_font(\"Helvetica\", \"I\", 10)\n        self.set_text_color(120)\n        self.cell(0, 5, f\"Comparison: {CURR_RANGE} vs {PREV_RANGE}\", align=\"C\", new_x=XPos.LMARGIN, new_y=YPos.NEXT)\n        \n        self.image(chart_path, x=10, y=42, w=190)\n        \n        # Data tables\n        self.set_y(150)\n        self.set_font(\"Helvetica\", \"B\", 10)\n        self.set_fill_color(245, 245, 255)\n        self.set_text_color(83, 51, 237)\n        \n        # Table header\n        col1, col2 = 35, 60\n        self.cell(col1, 10, \" Day (Prev)\", border=1, align='C', fill=True, new_x=XPos.RIGHT, new_y=YPos.TOP)\n        self.cell(col2, 10, f\"Value {unit}\", border=1, align='C', fill=True, new_x=XPos.RIGHT, new_y=YPos.TOP)\n        self.cell(col1, 10, \" Day (Curr)\", border=1, align='C', fill=True, new_x=XPos.RIGHT, new_y=YPos.TOP)\n        self.cell(col2, 10, f\"Value {unit}\", border=1, align='C', fill=True, new_x=XPos.LMARGIN, new_y=YPos.NEXT)\n        \n        self.set_font(\"Helvetica\", \"\", 10)\n        self.set_text_color(50)\n        for i in range(7):\n            # Zebra striping\n            fill = (i % 2 == 0)\n            if fill: self.set_fill_color(250, 250, 250)\n            else: self.set_fill_color(255, 255, 255)\n            \n            self.cell(col1, 9, f\" {PREV_DAYS_LABELS[i]}\", border=1, align='C', fill=fill, new_x=XPos.RIGHT, new_y=YPos.TOP)\n            self.cell(col2, 9, f\" {prev_vals[i]}\", border=1, align='C', fill=fill, new_x=XPos.RIGHT, new_y=YPos.TOP)\n            self.cell(col1, 9, f\" {CURR_DAYS_LABELS[i]}\", border=1, align='C', fill=fill, new_x=XPos.RIGHT, new_y=YPos.TOP)\n            self.cell(col2, 9, f\" {curr_vals[i]}\", border=1, align='C', fill=fill, new_x=XPos.LMARGIN, new_y=YPos.NEXT)<\/code><\/pre>\n<p>Non ci dilungheremo troppo su questo codice. Per maggiori informazioni sulla libreria FPDF, consulta le risorse online:<\/p>\n<ul>\n<li><a href=\"https:\/\/py-pdf.github.io\/fpdf2\/Tutorial.html\">Tutorial su FPDF<\/a><\/li>\n<li><a href=\"https:\/\/py-pdf.github.io\/fpdf2\/Tables.html\">Creare tabelle<\/a><\/li>\n<li><a href=\"https:\/\/py-pdf.github.io\/fpdf2\/Images.html\">Aggiunta di immagini<\/a><\/li>\n<li><a href=\"https:\/\/py-pdf.github.io\/fpdf2\/Maths.html#charts-graphs\">Grafici e diagrammi<\/a><\/li>\n<\/ul>\n<p>Successivamente, definisci una funzione <code>generated_chart<\/code>. Questa funzione converte i dati grezzi ricevuti da Kinsta in grafici.<\/p>\n<pre><code class=\"language-python\">def generate_chart(labels, curr, prev, title, ylabel, filename, is_bar=False):\n    plt.figure(figsize=(10, 5), dpi=100)\n    ax = plt.gca()\n    \n    ax.spines['top'].set_visible(False)\n    ax.spines['right'].set_visible(False)\n    ax.spines['left'].set_color('#dddddd')\n    ax.spines['bottom'].set_color('#dddddd')\n\n    if is_bar:\n        # Bar Chart for bandwidth\n        bars = plt.bar(labels, curr, color='#00c4b4', alpha=0.6, label='Current Period', width=0.6)\n        # Add labels above the bars\n        for bar in bars:\n            height = bar.get_height()\n            plt.text(bar.get_x() + bar.get_width()\/2., height + 0.02, f'{height}', ha='center', va='bottom', fontsize=8, color='#00a194')\n    else:\n        # Line chart for visits\n        plt.plot(labels, curr, color='#5333ed', marker='o', markersize=6, linewidth=3, label='Current', zorder=3)\n        plt.plot(labels, prev, color='#a1a1a1', linestyle='--', marker='x', markersize=5, linewidth=1.5, label='Previous', alpha=0.6)\n        \n        plt.fill_between(labels, curr, color='#5333ed', alpha=0.1)\n    \n    plt.title(title, fontsize=14, pad=20, color='#333333', fontweight='bold')\n    plt.ylabel(ylabel, color='#666666')\n    plt.xlabel(\"Day of Month\", color='#666666')\n    plt.legend(frameon=False, loc='upper right')\n    plt.grid(axis='y', linestyle='--', alpha=0.3)\n    plt.tight_layout()\n    plt.savefig(filename)\n    plt.close()<\/code><\/pre>\n<p>Questa funzione utilizza la libreria Matplotlib per convertire i dati estratti da Kinsta in grafici da inserire nel report PDF. Per maggiori informazioni sull&#8217;uso della libreria Matplotlib, consulta la documentazione online:<\/p>\n<ul>\n<li><a href=\"https:\/\/matplotlib.org\/stable\/api\/pyplot_summary.html\" target=\"_blank\" rel=\"noopener noreferrer\">Matplotlib Pyplot<\/a><\/li>\n<li><a href=\"https:\/\/matplotlib.org\/stable\/users\/explain\/customizing.html\" target=\"_blank\" rel=\"noopener noreferrer\">Personalizzazione di Matplotlib<\/a><\/li>\n<\/ul>\n<p>Infine, aggiungi la funzione che combina tutte le parti che abbiamo descritto finora.<\/p>\n<pre><code class=\"language-python\">def main():\n    site_display_name = fetch_site_name()\n\n    metrics = {\n        \"visits\": {\"title\": \"Site Visits\", \"unit\": \"\"},\n        \"bandwidth\": {\"title\": \"Server Bandwidth\", \"unit\": \"(MB)\"},\n        \"cdn-bandwidth\": {\"title\": \"CDN Bandwidth\", \"unit\": \"(MB)\"}\n    }\n    \n    report_data = {}\n    for key in metrics:\n        _, data_curr = fetch_kinsta_metric(key, DATES[2], DATES[3])\n        _, data_prev = fetch_kinsta_metric(key, DATES[0], DATES[1])\n        \n        curr_vals = []\n        prev_vals = []\n        for i in range(7):\n            c = float(data_curr[i]['value']) if i &lt; len(data_curr) else 0\n            p = float(data_prev[i]['value']) if i &lt; len(data_prev) else 0\n            \n            if \"bandwidth\" in key:\n                curr_vals.append(format_bytes_to_mb(c))\n                prev_vals.append(format_bytes_to_mb(p))\n            else:\n                curr_vals.append(int(c))\n                prev_vals.append(int(p))\n                \n        report_data[key] = {\"curr\": curr_vals, \"prev\": prev_vals}\n\n    pdf = KinstaReport(site_name=site_display_name)\n    \n    for key, info in metrics.items():\n        chart_file = f\"{key}_chart.png\"\n        generate_chart(X_AXIS_LABELS, report_data[key][\"curr\"], report_data[key][\"prev\"], \n                       f\"{info['title']} Trends\", \"Units\", chart_file, is_bar=(\"bandwidth\" in key))\n        pdf.add_metric_page(info[\"title\"], chart_file, report_data[key][\"prev\"], report_data[key][\"curr\"], info[\"unit\"])\n\n    # Executive Summary\n    pdf.add_page()\n    pdf.set_font(\"Helvetica\", \"B\", 20)\n    pdf.set_text_color(83, 51, 237)\n    pdf.cell(0, 15, \"Executive Summary\", align=\"C\", new_x=XPos.LMARGIN, new_y=YPos.NEXT)\n    \n    curr_visits = sum(report_data['visits']['curr'])\n    prev_visits = sum(report_data['visits']['prev'])\n    curr_bw = sum(report_data['bandwidth']['curr'])\n    prev_bw = sum(report_data['bandwidth']['prev'])\n\n    try:\n        summary_prompt = (\n            f\"Analyze Kinsta performance for site {site_display_name}. \"\n            f\"Current Period ({CURR_RANGE}): {curr_visits} visits, {curr_bw:.2f}MB server bandwidth. \"\n            f\"Previous Period ({PREV_RANGE}): {prev_visits} visits, {prev_bw:.2f}MB server bandwidth. \"\n            f\"Compare these periods and identify trends. Language: {REPORT_LANG}. Max 4 sentences.\"\n        )\n        response = client.models.generate_content(model=MODEL_ID, contents=summary_prompt)\n        summary = response.text\n    except Exception as e:\n        summary = f\"Analytical insights unavailable. Error: {str(e)}\"\n\n    pdf.set_y(40)\n    pdf.set_font(\"Helvetica\", \"\", 12)\n    pdf.set_text_color(0)\n    pdf.multi_cell(0, 8, summary)\n    \n    report_filename = f\"Kinsta_Report_{datetime.now().strftime('%Y-%m-%d')}.pdf\"\n    pdf.output(report_filename)\n    print(f\"Report generated: {report_filename}\")\n\nif __name__ == \"__main__\":\n    main()<\/code><\/pre>\n<p>Ecco cosa fa questo codice:<\/p>\n<ul>\n<li>Il ciclo <code>for<\/code> itera l&#8217;array di <code>metrics<\/code>\u00a0e interroga l&#8217;API di Kinsta due volte: una per la settimana corrente e una per la settimana precedente.<\/li>\n<li>Se i dati riguardano la larghezza di banda, la funzione <code>format_bytes_to_mb()<\/code> converte i dati grezzi in MB.<\/li>\n<li>La funzione <code>report_data()<\/code> memorizza i dati recuperati.<\/li>\n<li><code>KinstaReport<\/code> crea quindi un PDF per ogni sito.<\/li>\n<li>Il ciclo <code>for<\/code> successivo genera immagini PNG per i grafici e crea una nuova pagina per ogni metrica.<\/li>\n<li>La sezione successiva genera il riepilogo, calcola il numero totale di visite e i megabyte totali del periodo e invia un prompt dinamico a Gemini 2.5 Flash. Infine, la risposta viene utilizzata per completare l&#8217;ultima pagina del PDF.<\/li>\n<li>Lo script salva il documento con un nome di file che include la data corrente.<\/li>\n<li>* La condizione finale assicura che il processo venga eseguito solo quando lo script viene eseguito come programma principale.<\/li>\n<\/ul>\n<p>\u00c8 ora di creare ed eseguire l&#8217;applicazione.<\/p>\n<h3>Recuperare l&#8217;artefatto<\/h3>\n<p>Ora puoi eseguire la tua applicazione. Nella pagina del tuo progetto GitHub, clicca sulla scheda <strong>Actions<\/strong>. Cerca il nome dell&#8217;azione nel menu a sinistra (nel nostro esempio \u00e8 <strong>Generate Kinsta Analytics Report<\/strong>, come specificato nel file <code>generate_report.yml<\/code> ).<\/p>\n<figure id=\"attachment_208765\" aria-describedby=\"caption-attachment-208765\" style=\"width: 1998px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-208765\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2026\/04\/github-actions-tab.png\" alt=\"La scheda Actions mostra un elenco di workflow.\" width=\"1998\" height=\"1020\"><figcaption id=\"caption-attachment-208765\" class=\"wp-caption-text\">La scheda Actions mostra un elenco di workflow.<\/figcaption><\/figure>\n<p>Successivamente, clicca sul menu <strong>Run workflow<\/strong> a destra, poi clicca sul pulsante verde <strong>Run workflow<\/strong> (al momento \u00e8 disponibile solo il branch principale).<\/p>\n<figure id=\"attachment_208766\" aria-describedby=\"caption-attachment-208766\" style=\"width: 2558px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-208766\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2026\/04\/run-workflow.png\" alt=\"Eseguire i workflow in GitHub.\" width=\"2558\" height=\"1008\"><figcaption id=\"caption-attachment-208766\" class=\"wp-caption-text\">Eseguire i workflow in GitHub.<\/figcaption><\/figure>\n<p>La pagina successiva mostra il flusso di lavoro corrente. Cliccaci per visualizzare l&#8217;elenco delle operazioni in corso.<\/p>\n<figure id=\"attachment_208767\" aria-describedby=\"caption-attachment-208767\" style=\"width: 1918px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-208767\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2026\/04\/use-workflow-from-branch.png\" alt=\"Usare il flusso di lavoro dal branch.\" width=\"1918\" height=\"884\"><figcaption id=\"caption-attachment-208767\" class=\"wp-caption-text\">Usare il flusso di lavoro dal branch.<\/figcaption><\/figure>\n<p>La sezione <strong>Run Report Script<\/strong> fornisce un elenco delle operazioni eseguite, mentre la sezione <strong>Upload Report<\/strong> fornisce l&#8217;URL di download dell&#8217;artefatto. Clicca su questo link per scaricare il tuo report in formato PDF.<\/p>\n<figure id=\"attachment_208768\" aria-describedby=\"caption-attachment-208768\" style=\"width: 1554px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-208768\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2026\/04\/generate-kinsta-analytics-report-workflow.png\" alt=\"La sezione Upload Report fornisce il link al report in formato PDF.\" width=\"1554\" height=\"816\"><figcaption id=\"caption-attachment-208768\" class=\"wp-caption-text\">La sezione Upload Report fornisce il link al report in formato PDF.<\/figcaption><\/figure>\n<p>Troverai lo stesso link nella sezione <strong>Artifacts<\/strong>, in fondo alla pagina <strong>Summary<\/strong>\u00a0del flusso di lavoro.<\/p>\n<figure id=\"attachment_208769\" aria-describedby=\"caption-attachment-208769\" style=\"width: 1788px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-208769\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2026\/04\/run-report-script-upload-report.png\" alt=\"Le azioni Run Report Script e Upload Report.\" width=\"1788\" height=\"1310\"><figcaption id=\"caption-attachment-208769\" class=\"wp-caption-text\">Le azioni Run Report Script e Upload Report.<\/figcaption><\/figure>\n<p>Le immagini sottostanti mostrano il report completo, compreso l&#8217;<strong>Executive Summary<\/strong>\u00a0generato da Google AI.<\/p>\n<figure id=\"attachment_208770\" aria-describedby=\"caption-attachment-208770\" style=\"width: 2120px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-208770\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2026\/04\/kinsta-analytics-report-1.png\" alt=\"Pagine del report Visite al sito e Larghezza di banda del server.\" width=\"2120\" height=\"1492\"><figcaption id=\"caption-attachment-208770\" class=\"wp-caption-text\">Pagine del report Visite al sito e Larghezza di banda del server.<\/figcaption><\/figure>\n<p>\u00a0<\/p>\n<figure id=\"attachment_208771\" aria-describedby=\"caption-attachment-208771\" style=\"width: 2120px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-208771\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2026\/04\/kinsta-analytics-report-2.png\" alt=\"Pagine del report sulla larghezza di banda CDN e del riepilogo esecutivo.\" width=\"2120\" height=\"1492\"><figcaption id=\"caption-attachment-208771\" class=\"wp-caption-text\">Pagine del report sulla larghezza di banda CDN e del riepilogo esecutivo.<\/figcaption><\/figure>\n<h2>Passi successivi: come migliorare la scalabilit\u00e0 e automatizzare la distribuzione<\/h2>\n<p>Questo \u00e8 solo un assaggio di ci\u00f2 che l&#8217;API di Kinsta pu\u00f2 fare se combinata con strumenti di automazione avanzati come GitHub Actions. L&#8217;integrazione con l&#8217;intelligenza artificiale permette di andare oltre, trasformando i numeri grezzi in rapporti approfonditi pronti per essere condivisi con i tuoi clienti.<\/p>\n<p>Puoi migliorare ulteriormente i tuoi report in diversi modi:<\/p>\n<ul>\n<li>Puoi configurare la tua applicazione aggiungendo una riga al file YAML (<code>schedule: '0 9 * * 1'<\/code>) per generare il report ogni luned\u00ec mattina alle 9:00.<\/li>\n<li>Puoi integrare una libreria come <code>smtplib<\/code> o un servizio come SendGrid per inviare il report direttamente al cliente.<\/li>\n<li>Se hai un&#8217;agenzia con decine o addirittura centinaia di siti, potresti implementare un ciclo che itera su un elenco di ID di siti per generare tutti i report in un&#8217;unica esecuzione.<\/li>\n<li>Puoi arricchire ulteriormente il contenuto del report utilizzando l&#8217;API di Kinsta per recuperare dati geografici, codici HTTP, log del server e qualsiasi altro dato tu voglia includere. Analizzando questi dati, l&#8217;intelligenza artificiale pu\u00f2 identificare i tentativi di attacco (codici 4xx) o i picchi di traffico provenienti da regioni inaspettate.<\/li>\n<li>Puoi perfezionare la tua richiesta per ottenere risposte dell&#8217;IA pi\u00f9 dettagliate e complete.<\/li>\n<li>Puoi personalizzare il template PDF con i loghi della tua agenzia e del tuo cliente.<\/li>\n<\/ul>\n<p>Il reporting automatico riduce il carico di lavoro del tuo team e la coerenza e la precisione che ne derivano rafforzano la fiducia e la fedelt\u00e0 dei tuoi clienti.<\/p>\n<p>Vuoi iniziare subito ad automatizzare i report per i tuoi clienti? <a href=\"https:\/\/kinsta.com\/it\/prezzi\/\">Scegli il piano<\/a> pi\u00f9 adatto alle tue esigenze e inizia subito a costruire con l&#8217;API di Kinsta.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Per le agenzie moderne, un sistema di reportistica coerente e di alta qualit\u00e0 \u00e8 essenziale per mantenere la fiducia dei clienti e costruire una fedelt\u00e0 a &#8230;<\/p>\n","protected":false},"author":36,"featured_media":83967,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[26284,26232,25947],"class_list":["post-83966","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","topic-agenzie","topic-api","topic-statistiche"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Crea report automatici per i clienti con l&#039;API di Kinsta e Google AI<\/title>\n<meta name=\"description\" content=\"Trasforma i dati grezzi di hosting in grafici PDF professionali e sintesi esecutive basate sull&#039;AI con l&#039;API di Kinsta e Google AI.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/it\/blog\/api-kinsta-e-google-ai\/\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Automatizza la reportistica dei clienti con Kinsta API e Google AI\" \/>\n<meta property=\"og:description\" content=\"Trasforma i dati grezzi di hosting in grafici PDF professionali e sintesi esecutive basate sull&#039;AI con l&#039;API di Kinsta e Google AI.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/it\/blog\/api-kinsta-e-google-ai\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinstaitalia\/\" \/>\n<meta property=\"article:published_time\" content=\"2026-05-08T14:19:11+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-05-11T13:42:30+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2026\/05\/automate-client-reporting-with-kinsta-api-and-google-ai.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1470\" \/>\n\t<meta property=\"og:image:height\" content=\"735\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Carlo Daniele\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"Trasforma i dati grezzi di hosting in grafici PDF professionali e sintesi esecutive basate sull&#039;AI con l&#039;API di Kinsta e Google AI.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2026\/05\/automate-client-reporting-with-kinsta-api-and-google-ai.png\" \/>\n<meta name=\"twitter:creator\" content=\"@carlodaniele\" \/>\n<meta name=\"twitter:site\" content=\"@Kinsta_IT\" \/>\n<meta name=\"twitter:label1\" content=\"Scritto da\" \/>\n\t<meta name=\"twitter:data1\" content=\"Carlo Daniele\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo di lettura stimato\" \/>\n\t<meta name=\"twitter:data2\" content=\"17 minuti\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/api-kinsta-e-google-ai\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/api-kinsta-e-google-ai\/\"},\"author\":{\"name\":\"Carlo Daniele\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/person\/962dde02ea6f5df089b5d8d0853bbc63\"},\"headline\":\"Automatizza la reportistica dei clienti con Kinsta API e Google AI\",\"datePublished\":\"2026-05-08T14:19:11+00:00\",\"dateModified\":\"2026-05-11T13:42:30+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/api-kinsta-e-google-ai\/\"},\"wordCount\":2793,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/it\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/api-kinsta-e-google-ai\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2026\/05\/automate-client-reporting-with-kinsta-api-and-google-ai.png\",\"inLanguage\":\"it-IT\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/api-kinsta-e-google-ai\/\",\"url\":\"https:\/\/kinsta.com\/it\/blog\/api-kinsta-e-google-ai\/\",\"name\":\"Crea report automatici per i clienti con l'API di Kinsta e Google AI\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/it\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/api-kinsta-e-google-ai\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/api-kinsta-e-google-ai\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2026\/05\/automate-client-reporting-with-kinsta-api-and-google-ai.png\",\"datePublished\":\"2026-05-08T14:19:11+00:00\",\"dateModified\":\"2026-05-11T13:42:30+00:00\",\"description\":\"Trasforma i dati grezzi di hosting in grafici PDF professionali e sintesi esecutive basate sull'AI con l'API di Kinsta e Google AI.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/api-kinsta-e-google-ai\/#breadcrumb\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/it\/blog\/api-kinsta-e-google-ai\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/api-kinsta-e-google-ai\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2026\/05\/automate-client-reporting-with-kinsta-api-and-google-ai.png\",\"contentUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2026\/05\/automate-client-reporting-with-kinsta-api-and-google-ai.png\",\"width\":1470,\"height\":735},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/api-kinsta-e-google-ai\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/it\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"API\",\"item\":\"https:\/\/kinsta.com\/it\/argomenti\/api\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Automatizza la reportistica dei clienti con Kinsta API e Google AI\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/it\/#website\",\"url\":\"https:\/\/kinsta.com\/it\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Soluzioni di hosting premium, veloci e sicure\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/it\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/it\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"it-IT\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/it\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/it\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinstaitalia\/\",\"https:\/\/x.com\/Kinsta_IT\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/person\/962dde02ea6f5df089b5d8d0853bbc63\",\"name\":\"Carlo Daniele\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/429e5568f88110fd9a409b84cb22197e?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/429e5568f88110fd9a409b84cb22197e?s=96&d=mm&r=g\",\"caption\":\"Carlo Daniele\"},\"description\":\"Carlo is a passionate lover of webdesign and front-end development. He has been playing with WordPress for more than 20 years, also in collaboration with Italian and European universities and educational institutions. He has written hundreds of articles and guides about WordPress, published both on Italian and international websites, as well as on printed magazines. You can find him on LinkedIn.\",\"sameAs\":[\"https:\/\/frammentidicodice.com\/\",\"https:\/\/x.com\/carlodaniele\"],\"url\":\"https:\/\/kinsta.com\/it\/blog\/author\/carlodaniele\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Crea report automatici per i clienti con l'API di Kinsta e Google AI","description":"Trasforma i dati grezzi di hosting in grafici PDF professionali e sintesi esecutive basate sull'AI con l'API di Kinsta e Google AI.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinsta.com\/it\/blog\/api-kinsta-e-google-ai\/","og_locale":"it_IT","og_type":"article","og_title":"Automatizza la reportistica dei clienti con Kinsta API e Google AI","og_description":"Trasforma i dati grezzi di hosting in grafici PDF professionali e sintesi esecutive basate sull'AI con l'API di Kinsta e Google AI.","og_url":"https:\/\/kinsta.com\/it\/blog\/api-kinsta-e-google-ai\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstaitalia\/","article_published_time":"2026-05-08T14:19:11+00:00","article_modified_time":"2026-05-11T13:42:30+00:00","og_image":[{"width":1470,"height":735,"url":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2026\/05\/automate-client-reporting-with-kinsta-api-and-google-ai.png","type":"image\/png"}],"author":"Carlo Daniele","twitter_card":"summary_large_image","twitter_description":"Trasforma i dati grezzi di hosting in grafici PDF professionali e sintesi esecutive basate sull'AI con l'API di Kinsta e Google AI.","twitter_image":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2026\/05\/automate-client-reporting-with-kinsta-api-and-google-ai.png","twitter_creator":"@carlodaniele","twitter_site":"@Kinsta_IT","twitter_misc":{"Scritto da":"Carlo Daniele","Tempo di lettura stimato":"17 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/it\/blog\/api-kinsta-e-google-ai\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/it\/blog\/api-kinsta-e-google-ai\/"},"author":{"name":"Carlo Daniele","@id":"https:\/\/kinsta.com\/it\/#\/schema\/person\/962dde02ea6f5df089b5d8d0853bbc63"},"headline":"Automatizza la reportistica dei clienti con Kinsta API e Google AI","datePublished":"2026-05-08T14:19:11+00:00","dateModified":"2026-05-11T13:42:30+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/it\/blog\/api-kinsta-e-google-ai\/"},"wordCount":2793,"publisher":{"@id":"https:\/\/kinsta.com\/it\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/it\/blog\/api-kinsta-e-google-ai\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2026\/05\/automate-client-reporting-with-kinsta-api-and-google-ai.png","inLanguage":"it-IT"},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/it\/blog\/api-kinsta-e-google-ai\/","url":"https:\/\/kinsta.com\/it\/blog\/api-kinsta-e-google-ai\/","name":"Crea report automatici per i clienti con l'API di Kinsta e Google AI","isPartOf":{"@id":"https:\/\/kinsta.com\/it\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/it\/blog\/api-kinsta-e-google-ai\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/it\/blog\/api-kinsta-e-google-ai\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2026\/05\/automate-client-reporting-with-kinsta-api-and-google-ai.png","datePublished":"2026-05-08T14:19:11+00:00","dateModified":"2026-05-11T13:42:30+00:00","description":"Trasforma i dati grezzi di hosting in grafici PDF professionali e sintesi esecutive basate sull'AI con l'API di Kinsta e Google AI.","breadcrumb":{"@id":"https:\/\/kinsta.com\/it\/blog\/api-kinsta-e-google-ai\/#breadcrumb"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/it\/blog\/api-kinsta-e-google-ai\/"]}]},{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinsta.com\/it\/blog\/api-kinsta-e-google-ai\/#primaryimage","url":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2026\/05\/automate-client-reporting-with-kinsta-api-and-google-ai.png","contentUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2026\/05\/automate-client-reporting-with-kinsta-api-and-google-ai.png","width":1470,"height":735},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/it\/blog\/api-kinsta-e-google-ai\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/it\/"},{"@type":"ListItem","position":2,"name":"API","item":"https:\/\/kinsta.com\/it\/argomenti\/api\/"},{"@type":"ListItem","position":3,"name":"Automatizza la reportistica dei clienti con Kinsta API e Google AI"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/it\/#website","url":"https:\/\/kinsta.com\/it\/","name":"Kinsta\u00ae","description":"Soluzioni di hosting premium, veloci e sicure","publisher":{"@id":"https:\/\/kinsta.com\/it\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/it\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"it-IT"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/it\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/it\/","logo":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinstaitalia\/","https:\/\/x.com\/Kinsta_IT","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/it\/#\/schema\/person\/962dde02ea6f5df089b5d8d0853bbc63","name":"Carlo Daniele","image":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinsta.com\/it\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/429e5568f88110fd9a409b84cb22197e?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/429e5568f88110fd9a409b84cb22197e?s=96&d=mm&r=g","caption":"Carlo Daniele"},"description":"Carlo is a passionate lover of webdesign and front-end development. He has been playing with WordPress for more than 20 years, also in collaboration with Italian and European universities and educational institutions. He has written hundreds of articles and guides about WordPress, published both on Italian and international websites, as well as on printed magazines. You can find him on LinkedIn.","sameAs":["https:\/\/frammentidicodice.com\/","https:\/\/x.com\/carlodaniele"],"url":"https:\/\/kinsta.com\/it\/blog\/author\/carlodaniele\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts\/83966","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/users\/36"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/comments?post=83966"}],"version-history":[{"count":5,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts\/83966\/revisions"}],"predecessor-version":[{"id":83974,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts\/83966\/revisions\/83974"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/83966\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/83966\/translations\/it"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/83966\/translations\/fr"},{"href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/83966\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/media\/83967"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/media?parent=83966"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/tags?post=83966"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/topic?post=83966"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}