尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證Small runnable Python examples for the OddsRelay odds API: an oddsmatcher, an odds screen, a racing board, conditional polling and CSV export.
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗Small Python programs that read the OddsRelay odds API, one folder each.
Python 3.9 or later and nothing else: there are no packages to install. The one exception is
flumine-bookmaker-prices, which runs inside flumine (Python 3.10 or later). The three n8n- folders hold
n8n workflows instead, built on n8n's own HTTP Request node: import the JSON file into n8n. And
val-town-price-drops is a Val Town val in TypeScript, which runs on a schedule there.
| Folder | What it shows |
|---|---|
| oddsmatcher-50 | Each bookmaker back price on a matched board beside the lowest exchange lay price, sorted by a rating the script calculates. |
| odds-screen | The best back price for each selection across every venue on the raw board, and which venues offer it. |
| conditional-polling | Polling a board with ETag and If-None-Match: an unchanged board comes back as an empty 304 Not Modified that costs nothing. |
| csv-export | Any matched board written to CSV, one row per back or lay offer. |
| racing-board | The next races' prices from a racing board, posted to a Discord channel or a Telegram chat, and only when the board has changed. |
| flumine-bookmaker-prices | UK and Irish bookmakers' win prices beside Betfair's in a flumine strategy: a background worker polls the raw board and hands each new board to the strategy. |
| n8n-oddsmatcher-sheets | An n8n workflow that keeps a Google Sheet of bookmaker back prices beside the lowest exchange lay, rated: on a schedule it adds new rows, updates the ones it wrote before and removes those that have left the board. |
| n8n-back-lay-log-sheets | An n8n workflow that logs close back and lay pairs to Google Sheets, with a new row only when a pair is new or one of its prices has moved since its last row. |
| n8n-price-moves-telegram | An n8n workflow that sends a Telegram message when a bookmaker's price moves past a threshold you set, comparing each check with the last. |
| val-town-price-drops | A Val Town val that emails you, or posts to a webhook, when a bookmaker's price drops by a percentage you set since the last run. |
Sign up at app.oddsrelay.io/signup and copy your key from the dashboard. Free gives you 50,000 tokens for 14 days from sign-up, with no card, then no tokens until you choose a plan, on the same key. Plans and token prices.
export ODDSRELAY_KEY="your API key"
cd oddsmatcher-50
python3 main.py --sports tennis
Every script takes --help. The docs cover routes and parameters.
ODDSRELAY_KEY and sends it as Authorization: Bearer. It never goes in a URL and is
never printed.Accept-Encoding: gzip and unzips what comes back. Python's urllib asks for an uncompressed reply
unless told otherwise, and the standard, dutching and raw boards refuse that.quote=true, which costs nothing. If the request has a price, the script asks
before spending it; pass --max-tokens to set a ceiling and run without the prompt.429 for as long as Retry-After says, and stops on any other error with the API's error code
and request id. flumine-bookmaker-prices runs as a long-lived worker instead: it logs the error, clears its
bookmaker prices and polls again.The HTTP helper is api.py. Each folder keeps an identical copy, so any folder can be lifted out on its own.
The n8n workflows keep the key in an n8n Header Auth credential (x-api-key) and price each call with
quote=true before they read, stopping above the cap set in their Settings node. The two Google Sheets
workflows also try a failed call three times, then stop with the API's error code and request id. The Val Town
val reads the key from the val's environment variables and does the same against MAX_TOKENS_PER_RUN.
The tests run each example's logic on the response examples published in the API's OpenAPI file (fixtures/).
They make no network calls and need no key. The flumine example's tests are skipped unless flumine is installed
(pip install -r flumine-bookmaker-prices/requirements.txt).
for m in */main.py; do (cd "$(dirname "$m")" && python3 -m unittest -v) || break; done
for t in */test.mjs; do node --test "$t" || break; done
The second line runs the n8n workflows' Code nodes on the same fixtures (Node.js 18 or later), and the Val Town val with its storage and email stood in for (Node.js 22.18 or later, which runs TypeScript as it is).
pip install oddsrelaynpm install oddsrelay