同步 Venera 進度到 Bangumi

其實我一直在 iPad 上用魔改的 venera (漫閱 [1]) 看漫畫,他其實已經提供了追蹤器跟蹤的功能,只是不太好用(需要手動關聯,總是失敗),加上開發者長時間不修,也不看羣,我感覺已經不再維護。

一致挺喜歡 venera 的,得益於 Flutter 跨平臺,它提供了 ipa,可以在 iPad 上測載看漫畫,體驗上和 Mihon [2] 非常接近,配合上 WebDev 同步,已經是一個不錯的全平臺解決方案了。

只是上個月 4 號,非常遺憾,它居然存檔了!雖然已經有人 接手 了,但還不確定未來在哪裏。

Why not PR

我其實構想過一個比較好的未來:就是 venera-app 可以把後續發展給社區,其實你能看到之前的大部分工作都是 @wgh136@ynyxx 來做的,可能負擔比較重?

然後,漫閱拿去做付費其實不在 GPL 協議違規範圍內,其實他可以開源另一個版本,然後靠 AppStore 繼續盈利,一來遵守維持協議,二來也能保持項目之間協作。前提是 AppStore 可以容忍這種軟件存在,不會被人舉報下架。

在這方面我們和 Apple 還有很長的路要走,

一方面是能方便我這樣的小白,另一方面也能讓 venera 可以走的更遠,現在我想提 PR,也不知道改提給我,而且我用 iOS 魔改的 venera,已經只差臨門一腳的修復了,如果可以,我不太想重複造輪子。

解析 Venera 數據

一開始還糾結怎麼打開 venera 導出的格式,直接用 VSCode 打開是一坨亂碼,直到看到 venera 的導出實現:

// lib/utils/data.dart
Future<File> exportAppData([bool sync = true]) async {
  var time = DateTime.now().millisecondsSinceEpoch ~/ 1000;
  var cacheFilePath = FilePath.join(App.cachePath, '$time.venera');
  var cacheFile = File(cacheFilePath);
  var dataPath = App.dataPath;
  if (await cacheFile.exists()) {
    await cacheFile.delete();
  }
  await Isolate.run(() {
    var zipFile = ZipFile.open(cacheFilePath);
    var historyFile = FilePath.join(dataPath, "history.db");
    var localFavoriteFile = FilePath.join(dataPath, "local_favorite.db");
    var appdata = FilePath.join(dataPath, sync ? "syncdata.json" : "appdata.json");
    var cookies = FilePath.join(dataPath, "cookie.db");
    zipFile.addFile("history.db", historyFile);
    zipFile.addFile("local_favorite.db", localFavoriteFile);
    zipFile.addFile("appdata.json", appdata);
    zipFile.addFile("cookie.db", cookies);
    for (var file
        in Directory(FilePath.join(dataPath, "comic_source")).listSync()) {
      if (file is File) {
        zipFile.addFile("comic_source/${file.name}", file.path);
      }
    }
    zipFile.close();
  });
  return cacheFile;
}

明朗多了,是一個壓縮包,改名 zip,解壓之後我們可以得到

❯ tree . -L 3
.
├── appdata.json
├── comic_source # js 漫畫源,忽略
├── cookie.db
├── history.db
└── local_favorite.db

2 directories, 43 files

於是我們就能拿到 local_favorite.db 內部的數據,用於數據同步。接着我們就能進行數據解析,最終查庫把這些數據全部轉化爲一個可讀的 JSON:

python3 src/parser.py dump 20575-2273.venera --include-rows --pretty -o venera_dump.json

匹配 Bangumi

想要接入 Bangumi,一個比較大的問題是 Venera 天然不與 bangumi 綁定:

{
  "author": "",
  "cover_path": "https://public.komiic.com/comics/4eba50e2fe4d6752d334e7bb943e1455/cover.jpg",
  "display_order": 72,
  "has_new_update": null,
  "id": "1407",
  "last_check_time": 1777659880559,
  "last_update_time": "2026-1-11",
  "name": "青之驅魔師",
  "tags": "作者:加藤和惠,標籤:校園,標籤:冒險,標籤:魔幻,標籤:魔法,標籤:格鬥",
  "time": "2026-04-08 00:19:02",
  "translated_tags": "",
  "type": 637999886
},

所以最大的一個問題其實變成了如何匹配 Bangumi 的數據,存在非常多情況:

  1. 簡繁體不匹配:全部轉化爲簡體對比
  2. 符號差異:去掉一般符號
  3. 別名纔是中文名:請求條目,拿到別名進行對比
  4. 無關搜索(最多):調大分頁數

這些一一解決之後,我的樣本數據基本也都跑完了,一共也才 70 多條,所以沒有辦法保證未來新增的數據依然有效,但是隻能這樣一點點迭代了。

如何使用

直接安裝

pipx install venera-parser-bangumi

或者選擇從源碼 https://github.com/bgzo/playground/tree/2026/05/venera-parser-bangumi-sync 構建

git clone --branch 2026/05/venera-parser-bangumi-sync https://github.com/bGZo/playground.git
cd playground
pipx install .

然後按照 README 說明進行同步。

Source via: https://note.bgzo.cc/weekly/20260503-venera-to-bangumi


  1. 一個魔改的 venera,違反 GPL-3.0 協議(直接閉源了),25 年末上架的時候賣 6 塊永久買斷,我當時還在 Mihon 的戒斷期間,就付費了,只希望他能同步上游代碼,就當付個 Apple 證書費用,現在轉爲訂閱了,永久買斷要 15 刀,比較離譜,我看作者也沒同步上游代碼,價格一些功能也不痛不癢,BUG 還一堆不休,現在已經停更好久了。這個作者手下也有一堆類似的軟件(書閱、雲映等等),只不過大部分已經在國區下架了,外區也是遲早的事情,真想舉報他啊。 ↩︎

  2. Mihon 只提供了 Android,因爲它就是原生寫的,插件也是用 APK 寫的。如果他要跨平臺需要走 Kotlin Multiplatform 那一套。 ↩︎

posted @ 2026-05-06 00:09  菜就多練練  阅读(54)  评论(0)    收藏  举报