Rafraîchir les cotes Pinnacle dans Google Sheets sur minuteur
Réponse : utilisez Apps Script UrlFetchApp contre GET /v1/odds, puis installez un déclencheur temporel (toutes les 15 minutes). Script complet : guide Google Sheets. Le plan Free suffit (30 s de retard, 1 000 req/jour).
Extrait déclencheur#
const KEY = PropertiesService.getScriptProperties().getProperty("PINNFEED_KEY");
const SPORT = "soccer";
function refreshOdds() {
const url = "https://pinnfeed.io/v1/odds"
+ "?sport=" + encodeURIComponent(SPORT)
+ "&market=moneyline&main=true&limit=30";
const res = UrlFetchApp.fetch(url, {
headers: { "x-api-key": KEY, accept: "application/json" },
muteHttpExceptions: true,
});
if (res.getResponseCode() !== 200) throw new Error(res.getContentText());
const events = JSON.parse(res.getContentText()).events || [];
const sheet = SpreadsheetApp.getActive().getSheetByName("Odds");
const rows = [["home", "away", "home_dec", "away_dec", "fair_home", "updated"]];
for (const ev of events) {
const m = (ev.markets || []).find((x) => x.type === "moneyline");
if (!m) continue;
const by = Object.fromEntries((m.outcomes || []).map((o) => [o.name, o]));
rows.push([
ev.home, ev.away,
by.home?.decimal, by.away?.decimal, by.home?.fair,
new Date().toISOString(),
]);
}
sheet.clearContents();
sheet.getRange(1, 1, rows.length, rows[0].length).setValues(rows);
}
/** Run once from the editor to install the 15-minute trigger. */
function installTrigger() {
ScriptApp.getProjectTriggers().forEach((t) => ScriptApp.deleteTrigger(t));
ScriptApp.newTrigger("refreshOdds").timeBased().everyMinutes(15).create();
}
Stockez la clé dans Paramètres du projet → Propriétés du script, jamais dans les cellules. Pour Excel, voir Power Query (EN). Le push en direct demande encore Builder (99 €/mois). Plans payants : essai de 3 jours ; carte requise, débitée après le jour 3 sauf résiliation.
Contenu éducatif pour adultes (18+) : ni pronostics ni promesse de gain. En France, seuls les opérateurs agréés par l'ANJ peuvent proposer des paris en ligne.
Questions fréquentes#
15 minutes brûlent-elles le quota Free ?#
96 appels/jour si le déclencheur est seul — sous le plafond Free de 1 000/jour. Ajoutez des sports avec prudence.
IMPORTDATA peut-il le faire ?#
IMPORTDATA ne peut pas envoyer x-api-key. Utilisez Apps Script (cette page) ou la réponse IMPORTDATA uniquement avec un proxy public que vous contrôlez — nous n'en fournissons pas.