82 lines
2.8 KiB
YAML
82 lines
2.8 KiB
YAML
name: refresh event list
|
|
|
|
on:
|
|
schedule:
|
|
- cron: "17 * * * *" # hourly at :17
|
|
workflow_dispatch:
|
|
|
|
permissions:
|
|
contents: write
|
|
|
|
concurrency:
|
|
group: refresh-events
|
|
cancel-in-progress: true
|
|
|
|
jobs:
|
|
refresh:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Fetch Polymarket events + extract negRisk
|
|
shell: bash
|
|
run: |
|
|
set -euo pipefail
|
|
mkdir -p docs/data
|
|
curl -sSLf \
|
|
"https://gamma-api.polymarket.com/events?closed=false&archived=false&active=true&limit=25&order=volume24hr&ascending=false" \
|
|
-o /tmp/raw.json
|
|
python3 - <<'PY'
|
|
import json, os, datetime, pathlib
|
|
raw = json.loads(pathlib.Path('/tmp/raw.json').read_text(encoding='utf-8'))
|
|
neg = [e for e in raw if e.get('negRisk')]
|
|
out = []
|
|
for ev in neg:
|
|
markets = ev.get('markets') or []
|
|
if len(markets) < 2:
|
|
continue
|
|
outcomes = []
|
|
ok = True
|
|
for i, m in enumerate(markets):
|
|
if m.get('closed') or m.get('archived'):
|
|
ok = False; break
|
|
ids = m.get('clobTokenIds')
|
|
if isinstance(ids, str):
|
|
try: ids = json.loads(ids)
|
|
except Exception: ids = None
|
|
if not isinstance(ids, list) or not ids:
|
|
ok = False; break
|
|
name = m.get('groupItemTitle') or m.get('outcome') or m.get('question') or f'Outcome {i+1}'
|
|
outcomes.append({'token_id': str(ids[0]), 'name': str(name)})
|
|
if not ok or len(outcomes) < 2:
|
|
continue
|
|
out.append({
|
|
'id': ev.get('negRiskMarketID') or str(ev.get('id')),
|
|
'title': ev.get('title') or ev.get('slug') or 'Event',
|
|
'slug': ev.get('slug'),
|
|
'outcomes': outcomes,
|
|
})
|
|
if len(out) >= 8:
|
|
break
|
|
payload = {
|
|
'generated_at': datetime.datetime.now(datetime.UTC).isoformat(),
|
|
'events': out,
|
|
}
|
|
pathlib.Path('docs/data/events.json').write_text(
|
|
json.dumps(payload, indent=2, ensure_ascii=False), encoding='utf-8'
|
|
)
|
|
print(f'wrote {len(out)} events')
|
|
PY
|
|
|
|
- name: Commit if changed
|
|
run: |
|
|
if git diff --quiet docs/data/events.json; then
|
|
echo "no change"
|
|
exit 0
|
|
fi
|
|
git config user.name "events-refresh-bot"
|
|
git config user.email "events-refresh-bot@users.noreply.github.com"
|
|
git add docs/data/events.json
|
|
git commit -m "chore(events): refresh snapshot $(date -u +%Y-%m-%dT%H:%MZ)"
|
|
git push
|