回答 · Sheets · アラート
Googleスプレッドシートのオッズドロップメール
回答: Apps Scriptの時間トリガーで GET /v1/drops(またはIMPORTDATAボード)を呼び、dropPct が閾値を超えたら MailApp.sendEmail します。ポーリングはFree(30秒遅延)またはHobbyで足り、ライブプッシュはBuilderのWebSocketです。
概要#
キーはScript Properties(共有シートに書かない)。Endpoint:/v1/drops?sport=soccer&minutes=10&min_pct=5。
function dropAlert() {
const key = PropertiesService.getScriptProperties().getProperty('PINNFEED_KEY'); // ps_live_...
const url = 'https://pinnfeed.io/v1/drops?sport=soccer&minutes=5&min_pct=5&limit=20';
const res = UrlFetchApp.fetch(url, { headers: { 'x-api-key': key }, muteHttpExceptions: true });
if (res.getResponseCode() !== 200) { console.log(res.getContentText()); return; }
const drops = JSON.parse(res.getContentText()).drops;
const ss = SpreadsheetApp.getActive();
const sh = ss.getSheetByName('Drops') || ss.insertSheet('Drops');
const seen = new Set(sh.getRange('A:A').getValues().flat().filter(String));
const fresh = drops.filter(d => !seen.has(d.marketId + '|' + d.outcome + '|' + d.movedAt));
if (!fresh.length) return;
fresh.forEach(d => sh.appendRow([d.marketId + '|' + d.outcome + '|' + d.movedAt, d.home, d.away,
d.market, d.outcome, d.from, d.to, d.dropPct, d.movedAt]));
const body = fresh.map(d => `${d.home} v ${d.away}: ${d.market} ${d.outcome} ${d.from} -> ${d.to} (${d.dropPct}%)`).join('\n');
MailApp.sendEmail(Session.getActiveUser().getEmail(), `Pinnacle drops: ${fresh.length}`, body);
}
関連:dropping odds、Sheets time-driven。
CTA#
Builder(99€/月)。3日間トライアル、カード必須。無料REST:signup。
よくある質問#
SheetsはWebSocketを開けますか?#
いいえ — スケジュールRESTを使います。
成人向けの教育コンテンツですか?#
はい(18+)。
18歳以上の方を対象とした教育目的のコンテンツです。予想や利益の約束ではありません。日本では刑法により賭博は原則として禁止されています。