Last active
February 24, 2026 08:41
-
-
Save aborruso/b02ae9b45e5e6fd656e06079a2067ee8 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <!doctype html> | |
| <html lang="it"> | |
| <head> | |
| <meta charset="utf-8" /> | |
| <meta name="viewport" content="width=device-width, initial-scale=1" /> | |
| <title>API nascoste: guida rapida per data journalist</title> | |
| <style> | |
| :root { | |
| --bg: #f3f5f8; | |
| --ink: #1e2a33; | |
| --muted: #5f6b75; | |
| --card: #ffffff; | |
| --accent: #0b6bcb; | |
| --accent-2: #0a9d7a; | |
| --warn: #934c00; | |
| --border: #d8dee5; | |
| --code: #0f1720; | |
| } | |
| * { box-sizing: border-box; } | |
| body { | |
| margin: 0; | |
| font-family: "Titillium Web", "Segoe UI", sans-serif; | |
| background: radial-gradient(circle at 90% -10%, #d9ecff 0%, transparent 40%), var(--bg); | |
| color: var(--ink); | |
| line-height: 1.45; | |
| } | |
| .wrap { max-width: 980px; margin: 0 auto; padding: 1rem; } | |
| header { | |
| background: linear-gradient(120deg, #0f3b66, #0b6bcb); | |
| color: #fff; | |
| border-radius: 12px; | |
| padding: 1.2rem; | |
| margin: 1rem 0; | |
| } | |
| h1 { margin: 0 0 .3rem 0; font-size: 1.7rem; } | |
| h2 { margin: 0 0 .6rem 0; font-size: 1.25rem; } | |
| p { margin: .35rem 0; } | |
| .grid { display: grid; gap: 1rem; grid-template-columns: 1fr; } | |
| .card { | |
| background: var(--card); | |
| border: 1px solid var(--border); | |
| border-radius: 12px; | |
| padding: 1rem; | |
| box-shadow: 0 2px 10px rgba(0,0,0,.04); | |
| } | |
| .tag { | |
| display: inline-block; | |
| background: #eaf4ff; | |
| color: #13477a; | |
| border: 1px solid #cde0f6; | |
| border-radius: 999px; | |
| padding: .18rem .55rem; | |
| font-size: .8rem; | |
| margin-right: .3rem; | |
| margin-bottom: .35rem; | |
| } | |
| .lead { color: #ecf6ff; max-width: 76ch; } | |
| .goal { border-left: 5px solid var(--accent); padding-left: .7rem; } | |
| .note { | |
| background: #fff7e8; | |
| border: 1px solid #ffd8a8; | |
| color: var(--warn); | |
| padding: .7rem; | |
| border-radius: 10px; | |
| } | |
| pre { | |
| margin: .6rem 0; | |
| background: var(--code); | |
| color: #d5e6ff; | |
| border-radius: 10px; | |
| padding: .8rem; | |
| overflow: auto; | |
| white-space: pre-wrap; | |
| word-break: break-word; | |
| overflow-wrap: anywhere; | |
| font-size: .85rem; | |
| } | |
| a.link { | |
| color: var(--accent); | |
| text-decoration: underline; | |
| text-underline-offset: 2px; | |
| } | |
| code { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; } | |
| .example-head { | |
| display: flex; | |
| flex-wrap: wrap; | |
| align-items: center; | |
| justify-content: space-between; | |
| gap: .5rem; | |
| margin-bottom: .35rem; | |
| } | |
| button.copy { | |
| border: 1px solid #b8d5f5; | |
| background: #eef7ff; | |
| color: #154a7a; | |
| border-radius: 8px; | |
| padding: .35rem .6rem; | |
| cursor: pointer; | |
| font-size: .82rem; | |
| } | |
| button.copy:hover { background: #dff0ff; } | |
| .ok { color: var(--accent-2); font-weight: 700; } | |
| .muted { color: var(--muted); } | |
| footer { | |
| margin: 1rem 0 2rem; | |
| color: var(--muted); | |
| font-size: .9rem; | |
| text-align: center; | |
| } | |
| @media (min-width: 880px) { | |
| .grid.two { grid-template-columns: 1fr 1fr; } | |
| } | |
| </style> | |
| </head> | |
| <body> | |
| <div class="wrap"> | |
| <header> | |
| <h1>Dal sito web ai dati interrogabili</h1> | |
| <p class="lead">Mini-guida per data journalist: come verificare se una pagina che mostra dati usa API richiamabili in modo automatico, con metodo trasparente e replicabile.</p> | |
| <span class="tag">single-file HTML</span> | |
| <span class="tag">no build step</span> | |
| <span class="tag"><a class="link" href="https://agent-browser.dev/" target="_blank" rel="noopener noreferrer">agent-browser</a></span> | |
| </header> | |
| <main class="grid"> | |
| <section class="card"> | |
| <h2>1) Obiettivo dell'analisi</h2> | |
| <p class="goal">Dato un sito che espone dati via interfaccia grafica, capire se esiste un meccanismo di accesso automatizzabile (API/chiamate HTTP) per estrazione, verifica e riuso.</p> | |
| <p>Nel caso specifico: pagina <strong>"Bandi, avvisi ed esiti di gara"</strong> di <a class="link" href="https://www.serviziocontrattipubblici.it/it/consultazione/bandi-avvisi-ed-esiti-di-gara/" target="_blank" rel="noopener noreferrer">Servizio Contratti Pubblici</a>.</p> | |
| </section> | |
| <section class="card"> | |
| <h2>2) Prompt iniziale (semplice) e strumento usato</h2> | |
| <p>È stato usato un prompt molto semplice per avviare l'esplorazione, citando la skill <a class="link" href="https://agent-browser.dev/" target="_blank" rel="noopener noreferrer"><code>agent-browser</code></a>:</p> | |
| <pre><code>usa agent-browser skill per vedere se in questa pagina ci sono api non documentate. | |
| se sì, documentale e crea script ciao mondo.</code></pre> | |
| <p class="muted">Con <a class="link" href="https://agent-browser.dev/" target="_blank" rel="noopener noreferrer"><code>agent-browser</code></a> si osservano richieste di rete durante i click utente (es. "Cerca Bandi").</p> | |
| </section> | |
| <section class="card"> | |
| <h2>3) Cosa si è scoperto</h2> | |
| <p class="ok">Alcune informazioni sono effettivamente estraibili via chiamate HTTP dirette.</p> | |
| <p>Endpoint emersi: <code>/WSConsultBandi/rest/Bandi/Lista</code>, <code>/WSConsultBandi/rest/Esiti/Lista</code>, <code>/WSConsultBandi/rest/Bandi/Dettaglio</code>, <code>/WSConsultBandi/rest/Esiti/Dettaglio</code>, e altri.</p> | |
| <p>Per <strong>Atti</strong>, nel test sullo stesso CIG i risultati sono stati <code>total: 0</code>: informazione utile perché indica copertura non completa o filtri lato backend non chiari.</p> | |
| </section> | |
| <section class="card note"> | |
| <strong>Non sovraccaricare il servizio:</strong> evitare polling aggressivo, inserire pause tra le richieste, limitare il numero di chiamate e preferire batch piccoli. | |
| </section> | |
| <section class="card"> | |
| <h2>4) Guida pratica con esempi (chiamata + reply)</h2> | |
| <p class="muted">Base URL: <code>https://www.serviziocontrattipubblici.it</code></p> | |
| </section> | |
| <section class="grid two"> | |
| <article class="card"> | |
| <div class="example-head"> | |
| <h2>Esempio A: Bandi (stesso CIG)</h2> | |
| <button class="copy" data-copy="cmd-bandi">Copia chiamata</button> | |
| </div> | |
| <p><strong>Chiamata</strong></p> | |
| <pre id="cmd-bandi"><code>curl -k -X POST \ | |
| "https://www.serviziocontrattipubblici.it/WSConsultBandi/rest/Bandi/Lista?page_limit=5&offset=0&stato=3&cig=7383208FF8" \ | |
| -H "Content-Type: application/x-www-form-urlencoded"</code></pre> | |
| <p><strong>Esempio di reply</strong></p> | |
| <pre><code>{ | |
| "total": 1, | |
| "data": [ | |
| { | |
| "id": 172810, | |
| "oggetto": "Affidamento del servizio di manutenzioni meccaniche impianti", | |
| "dataPubblicazione": "20/02/2018", | |
| "importo": 432000.0, | |
| "dataScadenza": "15/03/2018" | |
| } | |
| ] | |
| }</code></pre> | |
| <details> | |
| <summary><strong>Output completo Bandi/Lista (CIG 7383208FF8)</strong></summary> | |
| <pre id="bandi-full-output"><code></code></pre> | |
| </details> | |
| <p class="muted">Esempio machine-to-machine “Lista → Dettaglio” (CIG <code>A02B7B4D94</code>):</p> | |
| <pre><code>curl -k -X POST \ | |
| "https://www.serviziocontrattipubblici.it/WSConsultBandi/rest/Bandi/Lista?page_limit=1&offset=0&stato=3&cig=A02B7B4D94" \ | |
| -H "Content-Type: application/x-www-form-urlencoded"</code></pre> | |
| <pre><code>curl -k -X POST \ | |
| "https://www.serviziocontrattipubblici.it/WSConsultBandi/rest/Bandi/Dettaglio" \ | |
| -H "Content-Type: application/json" \ | |
| --data "739222"</code></pre> | |
| <details> | |
| <summary><strong>Output completo Bandi/Dettaglio (id=739222)</strong></summary> | |
| <pre id="bandi-detail-output"><code></code></pre> | |
| </details> | |
| </article> | |
| <article class="card"> | |
| <div class="example-head"> | |
| <h2>Esempio B: Esiti (stesso CIG)</h2> | |
| <button class="copy" data-copy="cmd-esiti">Copia chiamata</button> | |
| </div> | |
| <p><strong>Chiamata</strong></p> | |
| <pre id="cmd-esiti"><code>curl -k -X POST \ | |
| "https://www.serviziocontrattipubblici.it/WSConsultBandi/rest/Esiti/Lista?page_limit=5&offset=0&stato=3&cig=7383208FF8" \ | |
| -H "Content-Type: application/x-www-form-urlencoded"</code></pre> | |
| <p><strong>Esempio di reply</strong></p> | |
| <pre><code>{ | |
| "total": 1, | |
| "data": [ | |
| { | |
| "idGara": 172810, | |
| "numeroPubblicazione": 2, | |
| "cig": "7383208FF8-", | |
| "dataPubblicazione": "25/09/2018", | |
| "importo": 400795.42 | |
| } | |
| ] | |
| }</code></pre> | |
| <p class="muted">Differenza informativa: qui emerge la fase di esito/aggiudicazione, non solo il bando iniziale.</p> | |
| <details> | |
| <summary><strong>Output completo Esiti/Lista (CIG 7383208FF8)</strong></summary> | |
| <pre id="esiti-full-output"><code></code></pre> | |
| </details> | |
| <p class="muted">Flusso machine-to-machine “Lista → Dettaglio” per Esiti:</p> | |
| <pre><code>curl -k -X POST \ | |
| "https://www.serviziocontrattipubblici.it/WSConsultBandi/rest/Esiti/Dettaglio?numeroPubblicazione=2" \ | |
| -H "Content-Type: application/json" \ | |
| --data "172810"</code></pre> | |
| <details> | |
| <summary><strong>Output completo Esiti/Dettaglio (idGara=172810, numeroPubblicazione=2)</strong></summary> | |
| <pre id="esiti-detail-output"><code></code></pre> | |
| </details> | |
| </article> | |
| </section> | |
| <section class="card"> | |
| <div class="example-head"> | |
| <h2>Esempio D: Avvisi (Lista -> Dettaglio)</h2> | |
| <button class="copy" data-copy="cmd-avvisi-lista">Copia chiamata</button> | |
| </div> | |
| <p><strong>Chiamata lista</strong></p> | |
| <pre id="cmd-avvisi-lista"><code>curl -k -X POST \ | |
| "https://www.serviziocontrattipubblici.it/WSConsultBandi/rest/Avvisi/Lista?page_limit=1&offset=0&stato=3" \ | |
| -H "Content-Type: application/x-www-form-urlencoded"</code></pre> | |
| <p><strong>Esempio di reply</strong></p> | |
| <pre><code>{ | |
| "total": 166570, | |
| "data": [ | |
| { | |
| "id": 41655, | |
| "codiceSA": "00161090428", | |
| "codiceSistema": 1, | |
| "descrizione": "LAVORI DI MANUTENZIONE STRAORDINARIA DEI PIANI VIABILI ...", | |
| "ente": "COMUNE DI MONTEMARCIANO - COMUNE DI MONTEMARCIANO" | |
| } | |
| ] | |
| }</code></pre> | |
| <details> | |
| <summary><strong>Output completo Avvisi/Lista (sample)</strong></summary> | |
| <pre id="avvisi-full-output"><code></code></pre> | |
| </details> | |
| <p class="muted">Con i dati della lista (`id`, `codiceSistema`, `codiceSA`) fai il dettaglio:</p> | |
| <pre id="cmd-avvisi-dettaglio"><code>curl -k -X POST \ | |
| "https://www.serviziocontrattipubblici.it/WSConsultBandi/rest/Avvisi/Dettaglio?codiceSistema=1&codiceSA=00161090428" \ | |
| -H "Content-Type: application/json" \ | |
| --data "41655"</code></pre> | |
| <p><strong>Esempio di reply dettaglio</strong></p> | |
| <pre><code>{ | |
| "id": 41655, | |
| "cig": "7722018AD5", | |
| "cup": "C17H18000250001", | |
| "rup": "GRASSUCCI FABIO", | |
| "documenti": [{ "titolo": "AFFIDAMENTO" }] | |
| }</code></pre> | |
| <details> | |
| <summary><strong>Output completo Avvisi/Dettaglio (id=41655)</strong></summary> | |
| <pre id="avvisi-detail-output"><code></code></pre> | |
| </details> | |
| </section> | |
| <section class="card"> | |
| <div class="example-head"> | |
| <h2>Esempio C: Atti (con CIG reale)</h2> | |
| <button class="copy" data-copy="cmd-atti">Copia chiamata</button> | |
| </div> | |
| <p><strong>Chiamata</strong></p> | |
| <pre id="cmd-atti"><code>curl -k -X POST \ | |
| "https://www.serviziocontrattipubblici.it/WSConsultBandi/rest/Bandi/Lista?page_limit=20" \ | |
| -H "Content-Type: application/x-www-form-urlencoded"</code></pre> | |
| <pre><code>--data "page_limit=20&atto=S&stato=1"</code></pre> | |
| <p><strong>Esempio di reply</strong></p> | |
| <pre><code>{ | |
| "total": 214, | |
| "data": [ | |
| { | |
| "id": 336589, | |
| "oggetto": "Stampanti multifunzione e monitor multimediali", | |
| "ente": "ATER DELLA PROVINCIA DI GORIZIA", | |
| "provincia": "GO", | |
| "dataPubblicazione": "30/06/2021" | |
| } | |
| ] | |
| }</code></pre> | |
| <p class="muted">Per estrarre il CIG dell'atto, usa il dettaglio con l'id:</p> | |
| <pre><code>curl -k -X POST \ | |
| "https://www.serviziocontrattipubblici.it/WSConsultBandi/rest/Bandi/Dettaglio" \ | |
| -H "Content-Type: application/json" \ | |
| --data "336589"</code></pre> | |
| <p class="muted">Qui sopra c'è un estratto. Sotto trovi l'output completo in accordion.</p> | |
| <pre><code>{ | |
| "id": 336589, | |
| "lotti": [{ "cig": "8678320836" }], | |
| "atti": [{ "listaCig": "8678320836-" }] | |
| }</code></pre> | |
| <details> | |
| <summary><strong>Output completo Bandi/Dettaglio (id=336589)</strong></summary> | |
| <pre id="atti-full-output"><code></code></pre> | |
| </details> | |
| </section> | |
| <section class="card"> | |
| <h2>5) Perché questo deve essere documentato pubblicamente</h2> | |
| <p>Se un portale pubblico espone dati via API (anche se usate internamente dal frontend), è buona pratica rendere <strong>ufficiali e pubbliche</strong> almeno:</p> | |
| <ul> | |
| <li>lista endpoint e metodi HTTP;</li> | |
| <li>parametri supportati e significato;</li> | |
| <li>schema delle risposte e codici errore;</li> | |
| <li>limiti d'uso, rate-limit e policy etiche;</li> | |
| <li>esempi di query replicabili.</li> | |
| </ul> | |
| <p>Questo aumenta trasparenza, qualità del controllo civico e riduce scraping fragile.</p> | |
| </section> | |
| </main> | |
| <footer> | |
| Pagina dimostrativa per formazione data journalism. Verificare sempre termini d'uso e basi giuridiche prima di automatizzare. | |
| </footer> | |
| </div> | |
| <script type="application/json" id="bandi-full-json"> | |
| { | |
| "total": 1, | |
| "page_limit": 1, | |
| "offset": 0, | |
| "data": [ | |
| { | |
| "id": 172810, | |
| "oggetto": "Affidamento del servizio di manutenzioni meccaniche impianti", | |
| "ente": "CONSORZIO OBBLIGATORIO SMALTIMENTO RIFIUTI - TECNICO", | |
| "provincia": "MC", | |
| "dataPubblicazione": "20/02/2018", | |
| "importo": 432000.0, | |
| "dataScadenza": "15/03/2018" | |
| } | |
| ] | |
| } | |
| </script> | |
| <script type="application/json" id="bandi-detail-json"> | |
| { | |
| "id": 739222, | |
| "ente": "UNIONE MONTANA POTENZA ESINO MUSONE - CENTRALE UNICA DI COMMITTENZA", | |
| "cfente": "01874330432", | |
| "settore": "O", | |
| "realizzazione": 1, | |
| "oggetto": "CUC p/c COMUNE DI FIUMINATA: PROCEDURA APERTA TELEMATICA A RILEVANZA COMUNITARIA PER L'AFFIDAMENTO DEI SERVIZI TECNICI DI ARCHITETTURA E INGEGNERIA PER LA PROGETTAZIONE DI FATTIBILIT TECNICA ED ECONOMICA, ESECUTIVA, RELAZIONE GEOLOGICA, COORDINAMENTO DELLA SICUREZZA IN FASE DI PROGETTAZIONE CON RISERVA DI AFFIDAMENTO DELLE ATTIVITA' DI DIREZIONE DEI LAVORI E COORDINAMENTO DELLA SICUREZZA IN FASE DI ESECUZIONE RELATIVI ALL'INTERVENTO DI MIGLIORAMENTO SISMICO DELL'EDIFICIO DENOMINATO EX FONDERIA SITO IN LOC. COLLE SAN PIETRO PER ATTIVITA' SOCIO CULTURALI IDENTIFICATIVO OPERA N. 283 - OO.PP._F1_2021_MAR_0238 - ALL. A1 ORD. N. 137 DEL 29.03.2023", | |
| "rup": "FOLCHI VICI D'ARCEVIA IOLE-ANNA", | |
| "importoGara": 381761.22, | |
| "lotti": [ | |
| { | |
| "numero": 1, | |
| "oggetto": "SERVIZI TECNICI DI ARCHITETTURA E INGEGNERIA PER LA PROGETTAZIONE DI FATTIBILITA TECNICA ED ECONOMICA, ESECUTIVA, RELAZIONE GEOLOGICA, COORDINAMENTO DELLA SICUREZZA IN FASE DI PROGETTAZIONE CON RISERVA DI AFFIDAMENTO DELLE ATTIVITA DI DIREZIONE DEI LAVORI E COORDINAMENTO DELLA SICUREZZA IN FASE DI ESECUZIONE RELATIVI ALL'INTERVENTO DI MIGLIORAMENTO SISMICO DELL'EDIFICIO DENOMINATO EX FONDERIA SITO IN LOC. COLLE SAN PIETRO PER ATTIVITA' SOCIO CULTURALI - IDENTIFICATIVO OPERA N. 283 - OO.PP._F1_2021_MAR_0238 - ALL. A1 ORD. N. 137 DEL 29.03.2023", | |
| "cig": "A02B7B4D94", | |
| "cup": "I42C21000340001", | |
| "importoSicurezza": 0, | |
| "importoLotto": 381761.22, | |
| "cpv": "71250000-5 - Servizi architettonici, di ingegneria e misurazione", | |
| "categoria": "FS", | |
| "classe": null, | |
| "tipoAppalto": "S", | |
| "tipoProcedura": 1, | |
| "criterioAggiudicazione": 2, | |
| "luogoIstat": "011043015", | |
| "luogoNuts": "ITI33", | |
| "luogoEsecuzione": "FIUMINATA", | |
| "urlProfiloComm": null, | |
| "cpvSecondari": [], | |
| "categorieScorporabili": [] | |
| } | |
| ], | |
| "atti": [ | |
| { | |
| "numeroPubblicazione": 1, | |
| "tipoDocumento": 1, | |
| "dataPubblicazione": "04/12/2023", | |
| "dataScadenza": null, | |
| "dataProvvedimento": "27/11/2023", | |
| "numeroProvvedimento": "179/528", | |
| "listaCig": "A02B7B4D94-" | |
| }, | |
| { | |
| "numeroPubblicazione": 2, | |
| "tipoDocumento": 3, | |
| "dataPubblicazione": "04/12/2023", | |
| "dataScadenza": "11/01/2024", | |
| "dataProvvedimento": null, | |
| "numeroProvvedimento": null, | |
| "listaCig": "A02B7B4D94-" | |
| } | |
| ] | |
| } | |
| </script> | |
| <script type="application/json" id="avvisi-full-json"> | |
| { | |
| "total": 166570, | |
| "page_limit": 1, | |
| "offset": 0, | |
| "data": [ | |
| { | |
| "id": 41655, | |
| "codiceSA": "00161090428", | |
| "codiceSistema": 1, | |
| "descrizione": "LAVORI DI MANUTENZIONE STRAORDINARIA DEI PIANI VIABILI DI VIA OLIVETO, VIA CASSIANO, VIA DANTE ALIGHIERI (CUP: C17H18000280001) - AFFIDAMENTO TRAMITE ADESIONE CONVENZIONE CUC -", | |
| "ente": "COMUNE DI MONTEMARCIANO - COMUNE DI MONTEMARCIANO", | |
| "provincia": "AN", | |
| "dataPubblicazione": "22/02/2109", | |
| "tipologia": 6 | |
| } | |
| ] | |
| } | |
| </script> | |
| <script type="application/json" id="avvisi-detail-json"> | |
| { | |
| "id": 41655, | |
| "codiceSA": "00161090428", | |
| "codiceSistema": 1, | |
| "ente": "COMUNE DI MONTEMARCIANO - COMUNE DI MONTEMARCIANO", | |
| "codiceFiscaleSA": "00161090428", | |
| "tipologia": 6, | |
| "descrizione": "LAVORI DI MANUTENZIONE STRAORDINARIA DEI PIANI VIABILI DI VIA OLIVETO, VIA CASSIANO, VIA DANTE ALIGHIERI (CUP: C17H18000280001) - AFFIDAMENTO TRAMITE ADESIONE CONVENZIONE CUC -", | |
| "cig": "7722018AD5", | |
| "cup": "C17H18000250001", | |
| "cui": null, | |
| "rup": "GRASSUCCI FABIO", | |
| "data": "22/02/2109", | |
| "dataScadenza": "09/03/2019", | |
| "pubblicazioni": [ | |
| { | |
| "codice": 408026, | |
| "data": "22/02/2019", | |
| "tipoInvio": 1 | |
| } | |
| ], | |
| "documenti": [ | |
| { | |
| "codiceSA": "00161090428", | |
| "id": 41655, | |
| "codiceSistema": 1, | |
| "nrDoc": 1, | |
| "titolo": "AFFIDAMENTO", | |
| "url": "http://www.comune.montemarciano.ancona.it/c042027/zf/index.php/bandi-di-gara/bandi-di-gara/bando/sezione/attivi/cigBando/7722018AD5/serialBando/2631" | |
| } | |
| ], | |
| "idGenerato": 561887 | |
| } | |
| </script> | |
| <script type="application/json" id="esiti-detail-json"> | |
| { | |
| "idGara": 172810, | |
| "ente": "CONSORZIO OBBLIGATORIO SMALTIMENTO RIFIUTI - TECNICO", | |
| "cfente": "80010900431", | |
| "settore": "O", | |
| "realizzazione": 1, | |
| "oggetto": "Affidamento del servizio di manutenzioni meccaniche impianti", | |
| "rup": "Giampaoli Giuseppe", | |
| "importoAggiudicazione": 400795.42, | |
| "lotti": [ | |
| { | |
| "numero": 1, | |
| "oggetto": "Affidamento del servizio di manutenzioni meccaniche impianti", | |
| "cig": "7383208FF8", | |
| "cup": null, | |
| "importoSicurezza": 8600.0, | |
| "importoLotto": 432000.0, | |
| "cpv": "45259000-7 - Riparazione e manutenzione di impianti", | |
| "categoria": "FS", | |
| "classe": null, | |
| "tipoAppalto": "F", | |
| "tipoProcedura": 1, | |
| "criterioAggiudicazione": 2, | |
| "luogoIstat": "011043053", | |
| "luogoNuts": null, | |
| "luogoEsecuzione": "TOLENTINO", | |
| "urlProfiloComm": "www.cosmarimc.it", | |
| "cpvSecondari": [], | |
| "categorieScorporabili": [] | |
| } | |
| ], | |
| "esito": { | |
| "numeroPubblicazione": 2, | |
| "tipoDocumento": 20, | |
| "eventualeSpecificazione": null, | |
| "dataPubblicazione": "25/09/2018", | |
| "dataScadenza": null, | |
| "dataDecreto": null, | |
| "dataProvvedimento": null, | |
| "numeroProvvedimento": null, | |
| "dataStipula": null, | |
| "numeroRepertorio": null, | |
| "ribassoAggiudicazione": 7.37, | |
| "offertaAumento": null, | |
| "importoAggiudicazione": 400795.42, | |
| "dataAggiudicazione": "15/05/2018", | |
| "urlCommittente": null, | |
| "urlEProcurement": null, | |
| "listaCig": null, | |
| "documenti": [ | |
| { | |
| "id": 172810, | |
| "numeroPubblicazione": 2, | |
| "nrDoc": 1, | |
| "titolo": "Esito di gara", | |
| "url": "https://www.serviziocontrattipubblici.it/PubbAvvisiBandiEsiti/VisualizzaAllegato.do?codice=161120&entita=ESITI&nr_doc=1" | |
| } | |
| ], | |
| "aggiudicatari": [ | |
| { | |
| "number": 1, | |
| "name": "C.S.T. - S.R.L.", | |
| "ruolo": null | |
| } | |
| ], | |
| "pubblicazioni": [ | |
| { | |
| "codice": 368202, | |
| "data": "25/09/2018", | |
| "tipoInvio": 1 | |
| } | |
| ], | |
| "idGenerato": 517587 | |
| }, | |
| "idGenerato": 213366 | |
| } | |
| </script> | |
| <script type="application/json" id="esiti-full-json"> | |
| { | |
| "total": 1, | |
| "page_limit": 1, | |
| "offset": 0, | |
| "data": [ | |
| { | |
| "idGara": 172810, | |
| "numeroPubblicazione": 2, | |
| "oggetto": "Affidamento del servizio di manutenzioni meccaniche impianti", | |
| "ente": "CONSORZIO OBBLIGATORIO SMALTIMENTO RIFIUTI - TECNICO", | |
| "provincia": "MC", | |
| "dataPubblicazione": "25/09/2018", | |
| "importo": 400795.42, | |
| "cig": "7383208FF8-" | |
| } | |
| ] | |
| } | |
| </script> | |
| <script type="application/json" id="atti-full-json"> | |
| { | |
| "id": 336589, | |
| "ente": "ATER DELLA PROVINCIA DI GORIZIA", | |
| "cfente": "00051390318", | |
| "settore": "O", | |
| "realizzazione": 1, | |
| "oggetto": "Stampanti multifunzione e monitor multimediali", | |
| "rup": "Gargiulo Alessandra ", | |
| "importoGara": 127000.0, | |
| "lotti": [ | |
| { | |
| "numero": 1, | |
| "oggetto": "Stampanti multifunzione e monitor multimediali", | |
| "cig": "8678320836", | |
| "cup": null, | |
| "importoSicurezza": 0.0, | |
| "importoLotto": 127000.0, | |
| "cpv": "30230000-0 - Apparecchiature informatiche", | |
| "categoria": "FS", | |
| "classe": null, | |
| "tipoAppalto": "S", | |
| "tipoProcedura": 28, | |
| "criterioAggiudicazione": 4, | |
| "luogoIstat": null, | |
| "luogoNuts": "ITH43", | |
| "luogoEsecuzione": "Gorizia", | |
| "urlProfiloComm": null, | |
| "cpvSecondari": [ | |
| { | |
| "code": "30120000-6", | |
| "value": "Fotocopiatrici e stampanti offset" | |
| } | |
| ], | |
| "categorieScorporabili": [] | |
| } | |
| ], | |
| "atti": [ | |
| { | |
| "numeroPubblicazione": 1, | |
| "tipoDocumento": 1, | |
| "eventualeSpecificazione": null, | |
| "dataPubblicazione": "29/01/2021", | |
| "dataScadenza": "31/12/2026", | |
| "dataDecreto": null, | |
| "dataProvvedimento": "25/11/2020", | |
| "numeroProvvedimento": "170", | |
| "dataStipula": null, | |
| "numeroRepertorio": null, | |
| "ribassoAggiudicazione": null, | |
| "offertaAumento": null, | |
| "importoAggiudicazione": null, | |
| "dataAggiudicazione": null, | |
| "urlCommittente": null, | |
| "urlEProcurement": null, | |
| "listaCig": "8678320836-", | |
| "documenti": [ | |
| { | |
| "id": 336589, | |
| "numeroPubblicazione": 1, | |
| "nrDoc": 1, | |
| "titolo": "Provvedimento del Direttore n. 170 del 25.11.2020 di avvio della procedura di affidamento", | |
| "url": "https://bandi-gara.regione.fvg.it/ater-gorizia/provvedimenti?p_p_id=it_insiel_bandigara_portlet_PortletBandigara_INSTANCE_3IpwnpnVNv1l&p_p_lifecycle=0&p_p_state=normal&p_p_mode=view&_it_insiel_bandigara_portlet_PortletBandigara_INSTANCE_3IpwnpnVNv1l_mvcRenderCommandName=%2Fdettaglio&_it_insiel_bandigara_portlet_PortletBandigara_INSTANCE_3IpwnpnVNv1l_id=9813" | |
| } | |
| ], | |
| "aggiudicatari": [], | |
| "pubblicazioni": [ | |
| { | |
| "codice": 761963, | |
| "data": "22/04/2021", | |
| "tipoInvio": 1 | |
| } | |
| ], | |
| "idGenerato": 1017887 | |
| }, | |
| { | |
| "numeroPubblicazione": 2, | |
| "tipoDocumento": 1, | |
| "eventualeSpecificazione": null, | |
| "dataPubblicazione": "22/04/2021", | |
| "dataScadenza": "31/12/2026", | |
| "dataDecreto": null, | |
| "dataProvvedimento": "22/03/2021", | |
| "numeroProvvedimento": "35", | |
| "dataStipula": null, | |
| "numeroRepertorio": null, | |
| "ribassoAggiudicazione": null, | |
| "offertaAumento": null, | |
| "importoAggiudicazione": null, | |
| "dataAggiudicazione": null, | |
| "urlCommittente": null, | |
| "urlEProcurement": null, | |
| "listaCig": "8678320836-", | |
| "documenti": [ | |
| { | |
| "id": 336589, | |
| "numeroPubblicazione": 2, | |
| "nrDoc": 1, | |
| "titolo": "Provvedimento del Direttore di approvazione del CSA e invio della Lettera di invito", | |
| "url": "https://bandi-gara.regione.fvg.it/ater-gorizia/provvedimenti?p_p_id=it_insiel_bandigara_portlet_PortletBandigara_INSTANCE_3IpwnpnVNv1l&p_p_lifecycle=0&p_p_state=normal&p_p_mode=view&_it_insiel_bandigara_portlet_PortletBandigara_INSTANCE_3IpwnpnVNv1l_mvcRenderCommandName=%2Fdettaglio&_it_insiel_bandigara_portlet_PortletBandigara_INSTANCE_3IpwnpnVNv1l_id=10934" | |
| } | |
| ], | |
| "aggiudicatari": [], | |
| "pubblicazioni": [ | |
| { | |
| "codice": 761969, | |
| "data": "22/04/2021", | |
| "tipoInvio": 1 | |
| } | |
| ], | |
| "idGenerato": 1017896 | |
| }, | |
| { | |
| "numeroPubblicazione": 3, | |
| "tipoDocumento": 6, | |
| "eventualeSpecificazione": null, | |
| "dataPubblicazione": "24/05/2021", | |
| "dataScadenza": "31/12/2026", | |
| "dataDecreto": null, | |
| "dataProvvedimento": null, | |
| "numeroProvvedimento": null, | |
| "dataStipula": null, | |
| "numeroRepertorio": null, | |
| "ribassoAggiudicazione": 44.635350319, | |
| "offertaAumento": null, | |
| "importoAggiudicazione": 70938.0, | |
| "dataAggiudicazione": null, | |
| "urlCommittente": null, | |
| "urlEProcurement": null, | |
| "listaCig": "8678320836-", | |
| "documenti": [ | |
| { | |
| "id": 336589, | |
| "numeroPubblicazione": 3, | |
| "nrDoc": 1, | |
| "titolo": "Procedura negoziata per l’affidamento del servizio di noleggio full service di stampanti multifunzione e di apparati ed impianti monitor multimediali per la durata di 60 mesi. - Lettera di invito (12/05/2021)", | |
| "url": "https://bandi-gara.regione.fvg.it/ater-gorizia/procedure?p_p_id=it_insiel_bandigara_portlet_PortletBandigara_INSTANCE_3IpwnpnVNv1l&p_p_lifecycle=0&p_p_state=normal&p_p_mode=view&_it_insiel_bandigara_portlet_PortletBandigara_INSTANCE_3IpwnpnVNv1l_mvcRenderCommandName=%2FdettaglioProc&_it_insiel_bandigara_portlet_PortletBandigara_INSTANCE_3IpwnpnVNv1l_id=cig_23257" | |
| } | |
| ], | |
| "aggiudicatari": [ | |
| { | |
| "number": 1, | |
| "name": "CENTRO FRIULI SRL CON SOCIO UNICO", | |
| "ruolo": null | |
| } | |
| ], | |
| "pubblicazioni": [ | |
| { | |
| "codice": 786303, | |
| "data": "24/05/2021", | |
| "tipoInvio": 1 | |
| } | |
| ], | |
| "idGenerato": 1051359 | |
| }, | |
| { | |
| "numeroPubblicazione": 4, | |
| "tipoDocumento": 18, | |
| "eventualeSpecificazione": null, | |
| "dataPubblicazione": "24/05/2021", | |
| "dataScadenza": "31/12/2021", | |
| "dataDecreto": null, | |
| "dataProvvedimento": "11/05/2021", | |
| "numeroProvvedimento": "48", | |
| "dataStipula": null, | |
| "numeroRepertorio": null, | |
| "ribassoAggiudicazione": 44.635350319, | |
| "offertaAumento": null, | |
| "importoAggiudicazione": 70938.0, | |
| "dataAggiudicazione": null, | |
| "urlCommittente": null, | |
| "urlEProcurement": null, | |
| "listaCig": "8678320836-", | |
| "documenti": [ | |
| { | |
| "id": 336589, | |
| "numeroPubblicazione": 4, | |
| "nrDoc": 1, | |
| "titolo": "Provvedimento di aggiudicazione relativo al servizio di noleggio full servizio di stampanti multifunzione e monitor multimediali", | |
| "url": "https://bandi-gara.regione.fvg.it/ater-gorizia/avvisi-sui-risultati-delle-procedure-di-affidamento?p_p_id=it_insiel_bandigara_portlet_PortletBandigara_INSTANCE_3IpwnpnVNv1l&p_p_lifecycle=0&p_p_state=normal&p_p_mode=view&_it_insiel_bandigara_portlet_PortletBandigara_INSTANCE_3IpwnpnVNv1l_mvcRenderCommandName=%2Fdettaglio&_it_insiel_bandigara_portlet_PortletBandigara_INSTANCE_3IpwnpnVNv1l_id=11327" | |
| } | |
| ], | |
| "aggiudicatari": [ | |
| { | |
| "number": 1, | |
| "name": "CENTRO FRIULI SRL CON SOCIO UNICO", | |
| "ruolo": null | |
| } | |
| ], | |
| "pubblicazioni": [ | |
| { | |
| "codice": 786316, | |
| "data": "24/05/2021", | |
| "tipoInvio": 1 | |
| } | |
| ], | |
| "idGenerato": 1051377 | |
| }, | |
| { | |
| "numeroPubblicazione": 5, | |
| "tipoDocumento": 20, | |
| "eventualeSpecificazione": "EDG-SER-8678320836-062021", | |
| "dataPubblicazione": "30/06/2021", | |
| "dataScadenza": "31/12/2026", | |
| "dataDecreto": null, | |
| "dataProvvedimento": null, | |
| "numeroProvvedimento": null, | |
| "dataStipula": null, | |
| "numeroRepertorio": null, | |
| "ribassoAggiudicazione": 44.635350319, | |
| "offertaAumento": null, | |
| "importoAggiudicazione": 70938.0, | |
| "dataAggiudicazione": null, | |
| "urlCommittente": null, | |
| "urlEProcurement": null, | |
| "listaCig": "8678320836-", | |
| "documenti": [ | |
| { | |
| "id": 336589, | |
| "numeroPubblicazione": 5, | |
| "nrDoc": 1, | |
| "titolo": "Avviso esito procedura di affidamento del servizio di noleggio full service stampanti multifunzione e monitor multimediali per 60 mesi", | |
| "url": "https://bandi-gara.regione.fvg.it/ater-gorizia/avvisi-sui-risultati-delle-procedure-di-affidamento?p_p_id=it_insiel_bandigara_portlet_PortletBandigara_INSTANCE_3IpwnpnVNv1l&p_p_lifecycle=0&p_p_state=normal&p_p_mode=view&_it_insiel_bandigara_portlet_PortletBandigara_INSTANCE_3IpwnpnVNv1l_mvcRenderCommandName=%2Fdettaglio&_it_insiel_bandigara_portlet_PortletBandigara_INSTANCE_3IpwnpnVNv1l_id=12002" | |
| } | |
| ], | |
| "aggiudicatari": [ | |
| { | |
| "number": 1, | |
| "name": "CENTRO FRIULI SRL CON SOCIO UNICO", | |
| "ruolo": null | |
| } | |
| ], | |
| "pubblicazioni": [ | |
| { | |
| "codice": 813248, | |
| "data": "30/06/2021", | |
| "tipoInvio": 1 | |
| } | |
| ], | |
| "idGenerato": 1088056 | |
| } | |
| ], | |
| "idGenerato": 1017886 | |
| } | |
| </script> | |
| <script> | |
| async function copyText(text) { | |
| try { | |
| await navigator.clipboard.writeText(text); | |
| } catch (_) { | |
| const ta = document.createElement('textarea'); | |
| ta.value = text; | |
| ta.style.position = 'fixed'; | |
| ta.style.opacity = '0'; | |
| document.body.appendChild(ta); | |
| ta.select(); | |
| document.execCommand('copy'); | |
| document.body.removeChild(ta); | |
| } | |
| } | |
| document.querySelectorAll('button.copy').forEach((btn) => { | |
| btn.addEventListener('click', async () => { | |
| const id = btn.getAttribute('data-copy'); | |
| const pre = document.getElementById(id); | |
| if (!pre) return; | |
| const text = pre.innerText.trim(); | |
| await copyText(text); | |
| const old = btn.textContent; | |
| btn.textContent = 'Copiato'; | |
| setTimeout(() => (btn.textContent = old), 1200); | |
| }); | |
| }); | |
| function bindFullJson(sourceId, targetId) { | |
| const src = document.getElementById(sourceId); | |
| const dst = document.getElementById(targetId); | |
| if (src && dst) dst.textContent = src.textContent.trim(); | |
| } | |
| bindFullJson('bandi-full-json', 'bandi-full-output'); | |
| bindFullJson('bandi-detail-json', 'bandi-detail-output'); | |
| bindFullJson('avvisi-full-json', 'avvisi-full-output'); | |
| bindFullJson('avvisi-detail-json', 'avvisi-detail-output'); | |
| bindFullJson('esiti-full-json', 'esiti-full-output'); | |
| bindFullJson('esiti-detail-json', 'esiti-detail-output'); | |
| bindFullJson('atti-full-json', 'atti-full-output'); | |
| </script> | |
| </body> | |
| </html> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment