Getting Data Is All Y0u Need

LOFTER Tracker--一個用於反演算法的作者訂閲機

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 必須保持空白。

實現原理:快照、差分與世界線

整體流程可以濃縮成五步:

  1. 讀取並驗證設定,確認目標作者與 Cookie 狀態。
  2. 取得作者公開資料與六個分欄。
  3. 判斷每個分欄是完整結果,還是只覆蓋近期窗口。
  4. 與上一份快照依穩定鍵比較,產生精簡差分。
  5. 全部成功後,原子寫入更新四個正式 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寫作,希望讀者您斧正

我刻意增加了一些有助於閲讀的可愛説法或表情,如果讀者您不喜歡,請告訴我,我會改正

希望讀者您有別的建議,請告訴我,我會改正

希望讀者您關注我...