|
|
|
|
git clone https://github.com/qrsp/antenna
uv sync建立本機設定檔:
cp config.toml.example config.toml
cp .env.example .env主要設定位於 config.toml:
[lists].follow:要追蹤的 X/Twitter 帳號清單[scheduler].auto_scan_interval_minutes:自動掃描檢查間隔[scheduler].minimum_scan_interval_minutes:同一帳號最短掃描間隔[scheduler].active_account_interval_minutes:活躍帳號掃描間隔[scheduler].inactive_account_interval_minutes:非活躍帳號掃描間隔[scheduler].inactive_after_days:幾天沒有新推文後視為非活躍[scheduler].rate_limit_pause_minutes:遇到 rate limit 後暫停多久[scheduler].new_account_max_tweets:新帳號初次掃描最多讀取幾則推文[app].database_url:SQLite 資料庫位置,預設sqlite:///data/antenna.db[app].thumbnail_dir:縮圖快取目錄[app].host/[app].port:Web 服務監聽位置
Twitter/X cookies 放在 .env:
ANTENNA_TWITTER_COOKIES=''使用專案入口啟動:
uv run python -m antenna開發時也可以使用 reload 模式:
uv run uvicorn antenna.app:create_app --factory --reload啟動後開啟:
http://127.0.0.1:8000
/:Dashboard,顯示新影片數、封存影片數、最近掃描與下次掃描時間/accounts:帳號掃描狀態,可查看每個帳號的最近掃描、最近推文與下次掃描時間/videos?state=new:新影片 review queue/videos?state=archived:已封存影片/settings:目前載入的設定與排程暫停狀態
GET /api/health回傳服務、資料庫與版本狀態。
POST /api/scans
GET /api/scans/latest
GET /api/scans/{scan_id}POST /api/scans 可建立掃描任務,request body 範例:
{
"force": false,
"limit_accounts": null
}若要只掃描特定帳號:
{
"force": true,
"limit_accounts": ["example_user"]
}GET /api/videos
GET /api/videos/counts
PATCH /api/videos/{url}/state
PATCH /api/videos/stateGET /api/videos 支援 query string:
state:new或archivedpage:頁碼,預設1per_page:每頁筆數,預設50,最多200
批次更新影片狀態:
{
"urls": ["https://www.youtube.com/watch?v=..."],
"state": "archived"
}Antenna 啟動後會建立背景自動掃描服務。排程器會根據帳號狀態決定是否掃描:
- 從未掃描過的帳號會優先進入掃描流程
- 活躍帳號使用較短的掃描間隔
- 長時間沒有新推文的帳號會改用較長的掃描間隔
- 如果遇到 X/Twitter rate limit,會暫停掃描一段時間
- 手動強制掃描可以略過一般排程限制
執行測試:
uv run pytest執行 lint:
uv run ruff check .格式化:
uv run ruff format .


