Communitygithub.com

amalshaji/cafeblr

班加羅爾的優質咖啡館,由網友發掘——一個從廣受喜愛的X貼文彙整而成的群眾目錄。透過 Issue 或 PR 新增咖啡館。

cafeblr 是什麼?

此技能可從 X (Twitter) 貼文的網址中,自動提取咖啡館資訊並新增到 `data/cafes.json` 資料庫。它專為 crowdsourced 目錄「amalshaji/cafeblr」設計,該目錄收錄了班加羅爾在 X 上被廣大網友喜愛與推薦的咖啡館。使用時需先複製儲存庫、安裝 bun 並通過 GitHub CLI (`gh`) 認證。技能會自動從最新的主分支開始,擷取貼文資料(含文字、媒體、讚數等),並執行嚴格的檢查:確認貼文存在、包含照片、無重複,且來源為真實個人而非品牌或行銷帳號。最後會自動建立包含符合格式之咖啡館條目的 Pull Request。此技能大幅簡化了社群目錄的貢獻流程,確保資料的一致性和完整性。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add amalshaji/cafeblr

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

將 $ARGUMENTS 中推文網址的咖啡館新增到 data/cafes.json 並發起一個 PR。

需求:amalshaji/cafeblr 的複製(如果不在其中,請先複製)、bun、 和已驗證的 gh CLI。

1. 從最新的 main 分支開始

ID 必須根據最新的資料計算,絕不能使用過時的簽出:

git fetch origin && git checkout main && git pull

2. 擷取推文

從網址中提取數字狀態 ID(x.com/<user>/status/<id> 或 twitter.com/...),然後:

bun -e '
import { fetchTweet } from "./scripts/lib/tweet.ts";
const t = await fetchTweet("TWEET_ID");
console.log(JSON.stringify({
  user: t?.user?.screen_name, likes: t?.favorite_count, text: t?.text,
  media: t?.mediaDetails?.map(m => ({ type: m.type, url: m.media_url_https,
    mp4: m.video_info?.variants?.filter(v => v.content_type === "video/mp4")
      .sort((a, b) => (b.bitrate ?? 0) - (a.bitrate ?? 0))[0]?.url })),
}, null, 2));'

3. 防護措施──若任何檢查失敗,請停止並告知使用者

  • 推文遺失或已刪除(適配器回傳 null)。
  • 沒有照片──每個條目都需要一張圖片;純文字的推文無法新增。 當存在多個推文媒體項目時,請檢查它們,並優先選擇食物/飲料的照片; 如果沒有任何照片顯示食物或飲料,則使用可用的最佳推文圖片。
  • 重複──來源網址(或相同的咖啡館)已存在於 data/cafes.json 中。
  • 來源政策──作者必須是真實分享其發現的人。拒絕品牌帳號、 咖啡館自己的帳號、新聞聚合器和行銷帳號。

4. 建立條目

  • name / area──從推文文字中取得(📍 行很常見)。如果名稱不在 推文中,請檢查作者自己在討論串中(瀏覽器)的後續回覆。如果仍然 未知,請詢問使用者,不要猜測。區域是街區名稱 ("Indiranagar"、"HSR Layout"),而不是地址。
  • knownFor──用一句話改寫該貼文本人讚揚的內容。絕不捏造 推文未提及的品質。
  • image──檢查推文媒體,並優先選擇清楚顯示 食物/飲料項目的照片。如果沒有媒體顯示食物或飲料,則使用可用的最佳 推文照片(或影片的海報)。video──如果媒體是影片,則為最佳碼率的 mp4 網址, 否則為 null。
  • mapsUrl──如果推文/討論串中包含 Google Maps 連結(檢查 entities.urls[].expanded_url),則為該連結,否則為 null。
  • googleRating──如果經過驗證,則為該確切地點的 Google Maps 評分,否則為 null。
  • source──標準的 https://x.com/<user>/status/<id>。author──@<user>。
  • postedAt──推文頁面 datePublished 的 ISO 時間戳記。請使用瀏覽器渲染的 X 頁面中繼資料,而非猜測的日期。
  • likes──來自擷取的 favorite_count。addedAt──今天,YYYY-MM-DD。
  • id──從步驟 1 的檔案中取 max + 1;條目保持 ID 順序(結構描述和規則: src/lib/schema.ts,README "Add a cafe")。

附加到 data/cafes.json(2 空格縮排,鍵的順序與現有條目一致)。

5. 驗證

bun run validate
BASE_REF=origin/main bun scripts/validate.ts   # 即時檢查新條目

兩項都必須通過才能推送。

6. 發起 PR

git checkout -b add-cafe-<kebab-name>
git add data/cafes.json
git commit -m "data: add <Name> (<Area>)"
git push -u origin add-cafe-<kebab-name>
gh pr create --title "Add <Name> (<Area>)" --body "..."

PR 主體:咖啡館詳細資訊表格(名稱、區域、來源連結、讚數)加上一個遺失資料 部分,列出任何未知的資訊(通常是 mapsUrl)。如果 mapsUrl 為 null,也請在 PR 中 留下留言,列出遺失的 Maps 連結,以便人類可以填寫它們。在提交或 PR 中不要有 AI/助手屬性。

最後回報 PR 網址。

相關技能