Initial commit.

This commit is contained in:
2026-06-08 19:26:06 +08:00
commit 94274abdcf
4 changed files with 173 additions and 0 deletions
+10
View File
@@ -0,0 +1,10 @@
# The Wikimedia Taiwan Internation Brief Generator.
# Copyright 2026 imacat. All rights reserved.
# Authors:
# imacat@mail.imacat.idv.tw (imacat), 2026/6/8
.DS_Store
.idea
.claude
excludes
+60
View File
@@ -0,0 +1,60 @@
# 維基國際短訊 自動化
每週自動產生維基媒體運動「國際短訊」,用本機 `mail` 寄給秘書長過目、篩選後採用至月訊。
台灣維基媒體協會用。
短訊的**產生規則**(來源、挑選、翻譯、格式、收件人、寄送方式)全部寫在 `wmtw-briefs.md`
本文件不重複,只談簡介、部署與維護。
運作方式:cron 每週觸發一次 Claude Code headless`claude -p`),把 `wmtw-briefs.md` 當提示
餵進去,它讀 wikimedia-l 過去七天內容、產繁中純文字短訊、用本機 `mail` 寄出,全程無人工介入。
用訂閱登入憑證執行,不另計付費 API。
## 部署
### 前置需求
執行 cron 的主機需具備:
- **Claude Code CLI**,且已用會員帳號 `/login` 過(headless 才有訂閱憑證、不另計費);
cron 須掛在這個已登入的使用者底下。
- **本機 mail**(如 exim4sendmail,免 SMTP 認證即可送出)。
- **locale `zh_TW.UTF-8`**(中文主旨與內文才正常)。
### 步驟
部署位置(系統路徑、crontab)為固定處所,以下用絕對路徑;其餘指涉本專案檔案處皆用相對路徑。
1. 把指示檔放到系統位置:
```
sudo cp wmtw-briefs.md /etc/wmtw-briefs.md
```
2. 找出 claude 執行檔的完整路徑(cron 的 PATH 很精簡,必須寫完整路徑):
```
command -v claude
```
3. 在**已登入會員帳號的使用者**底下 `crontab -e`,加入下列一行
(把 `<claude完整路徑>` 換成上一步結果):
```
0 18 * * 1 <claude完整路徑> -p "$(cat /etc/wmtw-briefs.md)" --allowedTools WebFetch Bash >> /tmp/wmtw-briefs.log 2>&1
```
- `0 18 * * 1`:每週一 18:00,可自行調整時段。
- headless 放行的工具:`WebFetch`、`Bash`。
- 收件人寫在 `/etc/wmtw-briefs.md` 裡,不在 crontab。
## 維護
- **改產生規則或收件人**:編輯部署後的 `/etc/wmtw-briefs.md`,不必動 crontab。
- **沒收到信**:查 crontab 導向的 log;確認郵件佇列沒卡(`mailq`);
確認 claude 訂閱憑證未過期(在該使用者底下重跑互動式 `claude`,若要求重新登入即為過期)。
- **中文亂碼**:檢查 crontab 那行有沒有帶 `LANG=zh_TW.UTF-8`。
- **內容偏少**wikimedia-l 某些週本來就稀疏,指示檔已交代據實產短、不硬湊,屬正常。
- **上線前測試**:複製一份指示檔、把收件人改成自己(勿寄秘書長),手動跑
`<claude完整路徑> -p "$(cat <測試指示檔>)" --allowedTools WebFetch Bash`
確認中文、純文字排版與內容無誤後再正式啟用。
+16
View File
@@ -0,0 +1,16 @@
# Wikimedia Taiwan International Brief Generator
# Copyright 2026 imacat. All rights reserved.
# Authors:
# imacat@wikimedia.tw (imacat), 2026/6/10
# The configuration example for the International Brief Generator.
# Install this file as config in the /etc/wmtw-briefs directory.
#
# sudo mkdir -p /etc/wmtw-briefs
# sudo cp config.example /etc/wmtw-briefs/config
#
# The recipients.
TO=recipient1@wikimedia.tw,recipient2@wikimedia.tw
# The CC recipients.
CC=cc1@wikimedia.tw,cc2@wikimedia.tw
+87
View File
@@ -0,0 +1,87 @@
# 維基國際短訊(國際短訊)週度產生器
讀 wikimedia-l 郵件論壇過去七天的內容,挑出值得入訊者,譯成繁體中文純文字,
用本機 `mail` 寄給秘書長。秘書長過目、篩選後採用至月訊。
**唯一來源是 wikimedia-l,不要 WebSearch、也不要抓其他網站。**
全程自動執行到「寄出」為止,不要中途停下來問問題。
## 步驟一:時間範圍
每週執行,蒐集過去七天有活動的討論串。短訊標題用當週日期範圍,例如「2026/6/1–6/7」。
## 步驟二:來源——wikimedia-l 封存頁(HyperKitty 網頁,用 WebFetch 讀)
- 最近活動(優先):
`https://lists.wikimedia.org/hyperkitty/list/wikimedia-l@lists.wikimedia.org/latest`
- 當月封存(月份不補零,如 6 月為 `/6/`):
`https://lists.wikimedia.org/hyperkitty/list/wikimedia-l@lists.wikimedia.org/{YYYY}/{M}/`
- 執行日落在月初七天內時,一併抓上個月封存頁以涵蓋滿七天。
做法:先列出過去七天有活動的討論串(主旨、日期、連結),再對相關者開其討論串頁
`.../thread/<ID>/`)讀內文取得細節與日期。
## 步驟三:挑選(以維基會議與期程為主)
從討論串中挑出會議與活動消息,目標約 8–15 則。每則盡量蒐齊**期程**:
會議日期、地點;補助/獎學金、投稿/提案、報名等各截止日;以及本週(這七天)的新進展。
三個範圍維度盡量都照顧(以清單實際有的內容為準):
- **全球性**Wikimania、Wikimedia Summit、全球徵件與補助等。
- **地區性(ESEAP**ESEAP ConferenceSummit、區域內各國活動與徵件。
- **主題性**Wikidata、WikiWomenWomen in Red 等)、Wikimedia LGBT+Wiki Loves Pride 等),及其他維基計畫。
各範圍、各則同等重要,不分優先高低。
已截止的期程,除非會議本身仍將舉行且具參考價值,否則略過或註明「已截止」;
但務必確保**即將截止**的期程被列出。若該週清單幾乎沒有會議內容,就據實產一份簡短短訊
說明「本週無重要會議期程消息」,可摘一兩則受關注的討論,不要硬湊。
## 步驟四:翻譯與用語
全部譯成**繁體中文、台灣用語**;多語內容一律譯為中文。日期一律寫清楚(年/月/日),
不用「下週」「月底」這類相對說法。
避免中國大陸用語:軟體(非軟件)、行動(非移動)、應用程式/App、社群(非社區)、
使用者(非用戶)、專案/計畫(非項目)、資訊(非信息)、影片(非視頻)。
專有名詞:維基媒體基金會/維基百科/維基數據(Wikidata)/維基共享資源(Commons)等;
Wikimania、ESEAP、Women in Red、Wiki Loves Pride 等慣用原文者保留原文;
不確定的正式譯名保留原文、可加註,不要硬譯。
## 步驟五:查證標記
- 期程日期說法不一或不確定:於日期後加「(待確認)」。
- 僅為討論/提議、尚未定案:註明「討論中」。
## 步驟六:內容格式(純文字)
開頭放一段**「近期截止提醒」**:把一兩週內即將截止的投稿/補助/報名期程,
依截止日由近到遠條列(會議名稱 — 期程類別 — 截止日)。本週若無迫近期程,註明即可。
其後分三區塊(無內容者可省略),每則連續編號:
```
近期截止提醒
一、全球性會議與活動
二、地區性(ESEAP)會議與活動
三、主題性社群活動(WikidataWikiWomenWikimedia LGBT+ 等)
```
每則:**名稱**(範圍標註)/會議日期、地點/重要期程(有哪些列哪些)/
本週動態(若有)/來源連結(該討論串網址)。
純文字排版,用分隔線與編號即可,不要 HTML。
頂部加一行:「本則由 Claude Code AI 自動整理自 wikimedia-l 郵件論壇過去七天內容。」底部註明「來源:wikimedia-l」。
## 步驟七:寄出(純文字,本機 mail)
不要用 shell 變數存檔名。跑 `mktemp` 後,
記下它印出的**實際檔名**,後續都用那個字面檔名操作:
1.`mktemp /tmp/wmtw-brief.XXXXXX`,記下它印出的實際檔名。
2. 把整理好的純文字短訊寫到該檔名。收件人與副本名單存在 `/etc/wmtw-briefs/config`
(該檔每行一項:`TO=收件人``CC=副本`,位址以逗號分隔)。直接讀該檔,取出 `TO``CC`
兩行等號後的字面值,再用本機 `mail` 從該檔名寄出(`-c` 帶副本、收件人放最後):
`mail -s "【維基國際短訊】{YYYY/M/D}{YYYY/M/D}" -c <CC的值> <TO的值> < <實際檔名>`
3. 刪除該檔名:`rm -f <實際檔名>`
寄出後回報:共幾則、各區塊則數、有哪些即將截止的期程。