Vai al contenuto
mcserverscout

API dei voti

Premia in gioco i giocatori che votano. L'API restituisce i voti ricevuti dal tuo server, con nickname e orari. È gratuita e non richiede alcuna chiave.

Nozioni di base

  • Le risposte sono in JSON. Invia l'header Accept: application/json con ogni richiesta.
  • Non è richiesta alcuna autenticazione.
  • Limite: 30 richieste al minuto per indirizzo IP.
  • Tutti gli orari sono in UTC.
  • Un giocatore può votare un server una volta al giorno, e un server può ricevere al massimo 30 voti al giorno.

L'UUID del tuo server

Ogni server in lista ha un UUID permanente che lo identifica nell'API, quindi continua a funzionare anche se l'indirizzo del server cambia. L'UUID viene mostrato ai proprietari sulla pagina del server. Se non riesci a trovarlo, contattaci indicando l'indirizzo del tuo server e te lo invieremo.

Elenco dei voti

GET https://mcserverscout.com/api/servers/{uuid}/votes

Restituisce i voti del server, dai più recenti. I voti anonimi (senza nickname) non sono inclusi.

Parametri della query

Tutti i parametri sono facoltativi.

Parametro Tipo Descrizione
nick string Solo i voti di esattamente questo nickname (distingue maiuscole e minuscole, 2–128 caratteri).
date_from date Voti espressi in questa data o dopo, YYYY-MM-DD.
date_to date Voti espressi entro la fine di questa data, YYYY-MM-DD.
limit integer Risultati per pagina, 1–200. Predefinito: 100.
page integer Numero di pagina, 1–100.

Esempio di richiesta

curl -H "Accept: application/json" \
  "https://mcserverscout.com/api/servers/9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d/votes?nick=Steve&date_from=2026-10-23"

Esempio di risposta

{
  "data": [
    {
      "nick": "Steve",
      "created_at": "2026-10-23T14:30:00+00:00"
    }
  ],
  "links": {
    "first": "https://mcserverscout.com/api/servers/9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d/votes?page=1",
    "last": "https://mcserverscout.com/api/servers/9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d/votes?page=1",
    "prev": null,
    "next": null
  },
  "meta": {
    "current_page": 1,
    "from": 1,
    "last_page": 1,
    "per_page": 100,
    "to": 1,
    "total": 1
  }
}

Usa links.next o il parametro page per recuperare le pagine successive. L'oggetto meta contiene anche i campi di paginazione standard path e links.

Errori

  • 404: nessun server con questo UUID. Controlla di aver copiato l'UUID per intero.
  • 422: un parametro non è valido, ad esempio limit=500. L'oggetto errors della risposta indica il parametro e cosa c'è che non va.
  • 429: più di 30 richieste in un minuto. Attendi il tempo indicato nell'header Retry-After.

Premiare i voti con un plugin

L'approccio più semplice: quando un giocatore esegue un comando come /vote claim, chiedi all'API se quel nickname ha votato oggi e consegna la ricompensa se ha votato e non l'ha ancora riscattata. Salva la data di riscatto per ogni giocatore, così un voto non può essere riscattato due volte.

Un controllo minimo per un plugin Paper o Spigot (Java 11+), da eseguire fuori dal thread principale:

// Returns true if the player has voted today (UTC).
CompletableFuture<Boolean> hasVotedToday(String nick) {
    String today = LocalDate.now(ZoneOffset.UTC).toString();
    URI uri = URI.create(API_URL
        + "?limit=1&date_from=" + today
        + "&nick=" + URLEncoder.encode(nick, StandardCharsets.UTF_8));

    HttpRequest request = HttpRequest.newBuilder(uri)
        .header("Accept", "application/json")
        .build();

    return HttpClient.newHttpClient()
        .sendAsync(request, HttpResponse.BodyHandlers.ofString())
        .thenApply(response -> response.statusCode() == 200
            && !response.body().contains("\"data\":[]"));
}

Imposta API_URL su https://mcserverscout.com/api/servers/{uuid}/votes con l'UUID del tuo server. Consegna la ricompensa di nuovo sul thread principale, ad esempio con Bukkit.getScheduler().runTask(...). Se preferisci premiare i giocatori in automatico, interroga l'API ogni pochi minuti con date_from impostato sulla data di oggi ed elabora i nickname che non hai ancora visto. Resta ben al di sotto del limite di 30 richieste al minuto.