A: 「Christina呦! 我是Lofter的演算法,我猜你喜歡這個。」
B:「欸?你有这么高速運轉的演算法推送給我,那如果被ST◼N淹沒了那些我真的有關注的、很喜歡的作者該怎麽辦呢?」
A:「嗯...所以我發明了 未来道具22号机」
你可能也遇過這種情況:明明按了關注,幾週後卻在偶然點進作者主頁時,才發現對方早就更新了三篇作品、改了簡介,甚至悄悄換了名字。那一刻的心情大概和你在晚上打開扇貝單詞,百詞斬拼寫時打錯無數次單詞字母一樣揪心(?)
於是我做了一個訂閲機,它不是全站資料挖掘機,也不是什麼「一鍵成為賽博千里眼」的神祕黑科技;它的用途很單純:訂閲我自己已經關注、喜歡的公開作者,看看對方的公開主頁最近發生了什麼變化。
用法很簡單:指定一位想追蹤的 Lofter 作者,程式讀取其博客頁面,把這次看到的內容與上次留下的Cache比較,只輸出新增、減少與可見資料變化。它本身不假裝是自帶手機推播的 SaaS,但產生的精簡 JSON 很適合再接進自己的提醒流程。
這個工具到底會看什麼?
對指定作者的公開個人主頁,程式會分別整理六個區域:
- likes
- recommendations
- dynamics
- works (作品)
- following
- followers
並從中整理變量。每次成功同步只維護四個正式檔案:
| 檔案 | 用途 |
|---|---|
cache/reactions.full.json |
喜歡、推薦、動態、作品的詳細快取 |
cache/following.full.json |
關注與粉絲的詳細快取 |
output/reactions.delta.json |
本輪內容類變化的精簡結果 |
output/following.delta.json |
本輪關係類變化的精簡結果 |
內容類 output 只保留:
post_name、publisher_name
關係類 output 只保留:
name、id、bio
所以它不會因為某張縮圖網址更換CDN,就直接改變參數。穩定 ID 沒變、真正關心的可見欄位也沒變,就安靜待在角落,像還沒被點名上臺的後藤一里。
我踩過什麽坑
早期版本的基本想法是順序完整掃描所有頁面。但如果喜歡博主帖子數量很多,一次同步就可能跑上200+頁:時間長、資料大,也容易撞 4009 拒絕。
因此這個發佈版預設採用兩種掃描模式:
| 模式 | 指令 | 行為 |
|---|---|---|
| 日常近期掃描 | sync |
每個分欄最多讀取{config::recent_page_limit}頁 |
| 完整掃描 | sync --full |
在 {config::max_pages} 內讀取全部頁面 |
若某個分欄本來就不足 50 頁,普通同步仍然是完整掃描,可以正常確認新增、更新與移除。只有真的超過 50 頁時,才會進入「近期窗口」語義。
這裡最容易踩坑的地方是:離開前 50 頁,不等於被刪除。
假設一篇舊作品昨天還在第 50 頁,今天因為前面多了新內容,被擠到第 51 頁。程式本輪沒看見它,不能武斷地說作者取消喜歡或刪除了作品。這就像角色暫時離開鏡頭,不代表下一話要在遺照裡見面。
因此這個發佈版把變化分成:
added:相對既有快取,首次觀察到的項目。updated:穩定 ID 相同,但關心的可見欄位改變。removed:只有完整掃描才能確認的真正移除。left_recent_window:離開近期窗口,可能只是滑到第 51 頁以後。scope: "complete":本輪完整,有資格確認移除。scope: "recent_window":本輪截斷,removed必須保持空白。
實現原理:快照、差分與世界線
整體流程可以濃縮成五步:
- 讀取並驗證設定,確認目標作者與 Cookie 狀態。
- 取得作者公開資料與六個分欄。
- 判斷每個分欄是完整結果,還是只覆蓋近期窗口。
- 與上一份快照依穩定鍵比較,產生精簡差分。
- 全部成功後,原子寫入更新四個正式 JSON。
配置和安裝
名称: 訂閲機.zip 大小: 44154 字节 : 43 KiB /SHA256: d1643d19553176cb54654da67bc3de0a0662ffa0c47f9f4a7266beb86f86dd70
和我簽訂契約,成為魔法訂閲機
吧
需要 Python 3.11 或更新版本。
Windows PowerShell:
py -m venv .venv
.venv\Scripts\python -m pip install -e .
.venv\Scripts\python -m playwright install chromium --no-shell
Linux/macOS:
python3 -m venv .venv && .venv/bin/python -m pip install -e . && .venv/bin/python -m playwright install chromium --no-shell
接著在根目錄建立或編輯 config.json:
{
"target_id": "你想追蹤的作者 ID"
}
target_id 可以填純 ID、作者ID.lofter.com,或完整個人主頁網址。
日常同步:
.venv\Scripts\python -m lofter_tracker sync
完整掃描:
.venv\Scripts\python -m lofter_tracker sync --full
第一次需要登入時,程式會開啟 Chromium;你在瀏覽器內自行完成登入,程式只擷取 .lofter.com Cookie 供後續請求使用,不接觸密碼。已有有效 Cookie 時不會反覆開瀏覽器。
發佈版的速度與範圍預設值為:
{
"api": {
"max_concurrency": 6,
"reaction_max_concurrency": 2,
"request_delay_seconds": 0.1,
"persistent_connections": true,
"reaction_page_size": 100,
"works_page_size": 100,
"relationship_page_size": 100,
"relationship_post_count": 1,
"max_pages": 1000
},
"scan": {
"recent_page_limit": 50,
"full_scan_every_runs": 0
}
}
如果
4009仍然反覆出現,先把reaction_max_concurrency降到 1,而不是一味重試。因爲進入中國的機械運轉太高速了
另外如果您不喜歡每次使用命令行輸入命令,可以在根目錄創建批處理文件輔助您快速更新訂閲,我將給予一些參考:
@echo off
cd /d "%~dp0"
".venv\Scripts\python.exe" -m lofter_tracker sync
pause
使用邊界:這是追更工具,不是賽博跟蹤狂養成器
這個專案使用的是 LOFTER 當前網頁/客戶端接口,並非官方開放 API,未來可能隨時改動。請低頻、克制地使用。
我的使用原則是:
- 只讀取作者已經公開展示的資料。
- 追蹤自己確實關注、喜歡、希望不漏更的作者。
- 不繞過隱私設定,不碰私密作品、草稿、私訊或密碼保護內容。
- 不把 Cookie、
config.json、cache 或 output 隨壓縮包公開。
公開不等於「可毫無節制地搬運」。工具的目的,是幫自己整理關心的更新,不是替別人的創作做未經同意的鏡像站。能力邊界與使用邊界都寫清楚,才不會從「我想追更」一路滑坡成《心理測量者》外包監控員。
目前沒有什麼?(如無訂閲應也不會更新
)
- [ ] 沒有穩定的接口
- [ ] 只能串行追蹤一個
target_id - [ ] 它輸出差分 JSON 與終端摘要,本身不是手機推播服務
鸣谢
首先,感謝仍在 Lofter 上創作、整理與分享作品的作者們。這個工具存在的理由,不是資料本身,而是我真的不想漏掉那些值得等待的更新。
&
IshtarTang/lofterSpider:提供了 LOFTER 喜歡、推薦與個人主頁抓取的經驗。
SrakhiuMeow/lofter-getter:對 Android 客戶端接口、合集與內容保存方向做了大量探索。~~可是不知爲何被4009ban了
&
感謝 Lofter給我的不加任何解釋的4009讓我收到了很多麻煩!😡
結語:願喜歡的作者不再被演算法忽略
此訂閲機最開始是因爲youlin365老師的作品太好看了,所以我命令大家都去關注她!(并不敢命令)
這是我第一次純markdown寫作,希望讀者您斧正
我刻意增加了一些有助於閲讀的可愛説法或表情,如果讀者您不喜歡,請告訴我,我會改正
希望讀者您有別的建議,請告訴我,我會改正
希望讀者您關注我...