Guida all'API GitHub · Aggiornata il 4 novembre 2026

GitHub GraphQL Contributions API: come interrogare un calendario dei contributi

Leggi il calendario dei contributi di un profilo come dati strutturati tramite la GraphQL di GitHub. La guida illustra query, variabili, campi restituiti, limiti di privacy e risoluzione dei problemi.

Cosa restituisce la GitHub GraphQL Contributions API

La GitHub GraphQL Contributions API legge il calendario di un profilo come date e conteggi strutturati. Indica il login, richiedi contributionsCollection per un intervallo e seleziona contributionCalendar. La risposta contiene il totale e settimane con singoli giorni.

Ogni record giornaliero include date e contributionCount. color e weekday aiutano a riprodurre il calendario; totalContributions aggrega l’intervallo. I valori descrivono l’attività del profilo, non i commit di un repository, una cronologia completa o tutta l’attività privata.

La documentazione di GitHub specifica che i contributi da repository privati e interni sono inclusi solo con lo scope facoltativo read:user. Richiedi tale accesso solo se il prodotto ne ha bisogno; altrimenti mantieni più limitate le autorizzazioni del token.

La richiesta è un POST GraphQL all’endpoint GitHub e richiede autenticazione. Tieni il token su un server o in una variabile locale, limita gli accessi e non inserirlo mai in JavaScript, repository pubblici o query condivise.

I quadrati del calendario dei contributi attraversano un flusso di dati GraphQL e producono un secondo calendario strutturato.
Il calendario si può richiedere come campi strutturati e poi visualizzare con una rappresentazione personalizzata.

Creare una richiesta alla GitHub GraphQL Contributions API

L’endpoint GraphQL GitHub è https://api.github.com/graphql. Invia un POST con token bearer in Authorization e corpo JSON con query e variables. Separarli facilita revisione e riuso con un altro utente o intervallo.

L’esempio richiede il calendario del profilo, non i commit del repository. Seleziona totale, settimane e giorni di contribuzione. Per il solo totale annuale, richiedi totalContributions e ometti i campi annidati.

GraphQL restituisce un involucro JSON. Controlla stato HTTP e array errors: possono esserci dati ed errori insieme. Registra separatamente messaggio e percorso del campo interessato.

Query e variabili

query UserContributionCalendar($login: String!, $from: DateTime!, $to: DateTime!) {
  user(login: $login) {
    contributionsCollection(from: $from, to: $to) {
      contributionCalendar {
        totalContributions
        weeks {
          contributionDays {
            date
            contributionCount
            color
            weekday
          }
        }
      }
    }
  }
}

{
  "login": "octocat",
  "from": "2026-01-01T00:00:00Z",
  "to": "2026-02-01T00:00:00Z"
}

Inserisci la query e l'oggetto variables nel corpo JSON del POST. Tieni un token reale fuori da questo esempio e consulta lo schema ufficiale prima di aggiungere altri campi.

Leggere i campi del calendario dei contributi

Il percorso della risposta è data.user.contributionsCollection.contributionCalendar. Nel codice considera facoltativo ogni livello: l'utente potrebbe non essere risolto, un campo potrebbe non essere disponibile per l'account autenticato o la risposta potrebbe contenere errori. Controlla la risposta prima di accedere alle proprietà annidate.

totalContributions aggrega l’intervallo. weeks raggruppa il calendario e ogni contributionDays indica una data. contributionCount è l’attività del giorno; date è la data; weekday indica il giorno (1 è lunedì); color è esadecimale, con toni scuri per più contributi. Conserva data e conteggio come dati, color come metadato.

Usa i record giornalieri per costruire una tabella, una heatmap o un grafico. Conserva i giorni con conteggio zero: rimuoverli può spostare le date e rappresentare male l'attività.

Un anno di contributi viene ridotto a una settimana di sette giorni; ogni giorno corrisponde a un quadrato d'intensità e a valori strutturati.
Il calendario è raggruppato per settimane, ma una visualizzazione di solito richiede un record normalizzato per ogni giorno.

Scegliere un intervallo di date esplicito

Passa from e to come DateTime ISO 8601. Limiti UTC espliciti rendono riproducibili i report ed evitano scarti di un giorno tra fusi orari. Decidi se usare la data del calendario GitHub o un fuso locale prima di convertire gli orari.

Per i report mobili, salva gli estremi esatti. Confronta intervalli della stessa durata e dividi cronologie lunghe in periodi limitati: una risposta non è un archivio illimitato.

Prova limiti vicini alla mezzanotte UTC e un periodo senza attività visibile. Totale ed elenco devono corrispondere alla finestra richiesta. Zero è un risultato valido, non un errore.

1

Scegli la finestra del calendario

Usa un periodo definito, come un anno solare o gli ultimi 12 mesi, e stabilisci entrambi gli estremi prima di inviare la richiesta.

2

Invia variabili UTC

Usa timestamp ISO 8601 che terminano con Z quando il prodotto richiede un limite UTC stabile.

3

Conserva la finestra della risposta

Salva gli estremi richiesti insieme ai dati, così i grafici successivi possono spiegare cosa copre il totale.

4

Controlla le date di confine

Confronta la prima e l'ultima data restituite con le regole di visualizzazione previste prima di aggregare le settimane.

Normalizzare la risposta prima di creare un grafico

Un modello compatto facilita grafici, CSV o snapshot pianificati. Appiattisci le settimane in una lista ordinata, conserva data e conteggio, poi color o weekday solo se necessari. Ordina per data, non per chiavi dell’oggetto.

Verifica date interpretabili e conteggi finiti e non negativi. Definisci come gestire utenti assenti, raccolte vuote, date duplicate, dati parziali e rate limit. Mostra uno stato vuoto invece di un calendario guasto o zeri inventati.

Il calendario del profilo risponde a una domanda diversa dalla cronologia di un repository. Usa la guida alle regole del grafico dei contributi per i quadrati mancanti o la guida alla cronologia dei commit quando ti servono i record di un repository.

Appiattire le settimane in record giornalieri

const days = (calendar.weeks || [])
  .flatMap((week) => week.contributionDays || [])
  .map(({ date, contributionCount, color, weekday }) => ({
    date,
    count: Number(contributionCount),
    color,
    weekday,
  }))
  .sort((a, b) => a.date.localeCompare(b.date));

Convalida il calendario prima di questo passaggio e gestisci esplicitamente i dati assenti. Conserva i giorni a conteggio zero per mantenere allineata la sequenza temporale.

Risolvere problemi di risposta e limiti GraphQL

In caso di errore, controlla insieme stato HTTP, JSON e errors. GitHub può rifiutare una query invalida o trovare un utente senza attività nell’intervallo. Sii preciso e non registrare il token bearer né l’intera intestazione Authorization.

SintomoControlloAzione successiva
L'utente è nullVerifica la grafia del login e che l'account sia visibile alla richiesta autenticata.Riprova con un account pubblico noto ed esamina gli errori GraphQL.
Campo o argomento sconosciutoConfronta la query con lo schema GraphQL corrente di GitHub.Consulta il riferimento ufficiale Users e richiedi solo campi supportati.
HTTP riesce, ma errors non è vuotoLeggi ogni messaggio e percorso: GraphQL può restituire dati parziali.Gestisci intenzionalmente i dati parziali o correggi il campo rifiutato prima di pubblicare i risultati.
Il calendario è vuotoControlla utente, intervallo, accesso dell'account e se l'assenza di attività è prevista.Mostra uno stato vuoto veritiero; non inventare conteggi giornalieri.
È stato raggiunto il rate limitEsamina le informazioni sul limite e il costo della query nella risposta.Memorizza nella cache i risultati adatti, evita polling e riprova dopo la finestra di ripristino.

Rispettare privacy e significato dei contributi

Il calendario mostra l’attività del profilo, non repository privati né tutto il lavoro di una persona. Le impostazioni GitHub influenzano ciò che è visibile; un’app deve chiedere solo il necessario. Quando condividi un grafico, indica fonte e periodo.

Tratta il token come una credenziale: caricalo da un archivio segreto server o da una variabile locale, limita i permessi, ruota le credenziali esposte e rimuovile dai log. Non inserire token personali in HTML o JavaScript pubblici.

Non usare i conteggi come voto di qualità o produttività: non mostrano revisioni, manutenzione né attività privata. Indica che la visualizzazione è uno snapshot datato del calendario.

FAQ sulla GitHub GraphQL Contributions API

Quale campo GraphQL di GitHub restituisce il calendario dei contributi?

Cerca l’utente tramite login, poi richiedi contributionsCollection e contributionCalendar. Seleziona i campi usati dall’applicazione.

Restituisce i singoli commit dei repository?

No. Restituisce i dati del calendario dei contributi del profilo per un intervallo. Usa la cronologia dei commit del repository o una connessione commit quando ti servono record, file, messaggi o dettagli specifici del repository.

Serve un token per la API GraphQL di GitHub?

Sì. La API GraphQL di GitHub richiede l'autenticazione. Tieni il token fuori dal codice del browser e dai repository pubblici e concedi solo l'accesso necessario alla richiesta.

Che cosa indica contributionCount?

È il conteggio dell'attività che GitHub segnala per un giorno del calendario nella raccolta restituita. Non va interpretato come conteggio di tutti i commit o come misura della qualità del codice.

Posso interrogare un calendario storico completo?

Indica estremi espliciti e verifica l’intervallo supportato. Per cronologie lunghe, richiedi periodi limitati e conserva le relative date.

Perché la API potrebbe non restituire dati del calendario?

Controlla login, campi, autenticazione, date richieste ed errori GraphQL. Una query valida può anche restituire zero contributi per l'utente e l'intervallo selezionati.

Riferimenti ufficiali

Esplora il calendario come visualizzazione

Dopo aver verificato i dati di origine e l'intervallo, usa la visualizzazione nel browser per esplorare un modello pubblico di contributi GitHub. Apri GitHub City