2023年8月25日 星期五

linespector: 半手動備份 line 文字對話內容與低解析度圖片

Line 沒有很好的文字搜尋的功能、 在電腦版 (chrome 擴充套件) 上面只能保留兩週的訊息、 即使是公開的群組也沒有 https 的網址可以分享、 ... 有各種不方便。 最近寫了一隻小程式 "linespector" 可以從電腦版把某個群組的近期文字對話內容與 (低解析度) 圖片全部合併儲存到一個 sqlite 資料庫檔案裡面, 再用 php 以網頁的方式呈現。 我拿它來把社區的 line 群組轉成網頁, 在內部的網站公告。 (當然事先已徵得群組管理員與成員同意) 如果你發現它有其他的用途, 也請留言分享。

我的開發環境是: linux mint debian edition 5 (elsie)、 apache2 2.4 (已啟用 php)、 chromium 103、 python 3.9。

  1. 下載我的程式碼: linespector 並解壓縮到某個目錄。
  2. 安裝 debian 套件: apt install chromium-driver
  3. 安裝 python3 套件: pip3 install litecli selenium bs4
  4. 假設想把資料庫存檔在 /home/ckhung/ntu-b73.sqlite , 那就這樣建立資料庫: litecli /home/ckhung/ntu-b73.sqlite < create_db.sql
  5. 我的程式採用 selenium, 需要依附在 chromium (的 debug mode) 上面執行, 所以請關掉 chromium 視窗、 改從命令列啟動: chromium --remote-debugging-port=9222 & 其中 port # 可以任選。
  6. 建議不要開太多分頁。 (見下面解釋) 從 chromium 打開 line 擴充套件、 切換到想要備份的那一個對話串。
  7. 把目前的對話備份到資料庫: python3 linespector.py -p 9222 /home/ckhung/ntu-b73.sqlite 我找不到在 selenium 裡該如何直接切換到指定分頁, 我的程式只好把 chrome 目前打開的所有分頁遍尋一次、 記下每個分頁的 id 跟 title, 再切換到名為 "LINE" 的分頁。 如果當初開太多分頁, 會很煩。
  8. (可略過) 手動檢查資料庫內容: 進入 litecli, 執行: select strftime("%m-%d %H:%M",time_stamp,'unixepoch','localtime') as time, chat_title, user_name, msg_type from messages 應該可以看到近期發言時間與用戶名稱等等 meta data。
  9. 如果想從瀏覽器看, 就必須安裝 php7.4-sqlite3 套件。
  10. 把兩個 php 檔跟一個 css 檔放到 apache2 看得到的地方, 並且修改設定檔 config.php 裡面的兩個參數。
  11. 用瀏覽器透過 apache2 伺服器查看你的網頁。 呵呵, 一如我平常的作品, 沒什麼設計美感, 能看就好。

我從 這篇超讚文章 學會寫我的這個第一個 selenium 程式。 為了把所有圖片直接存在同一個資料庫裡面、 省得管理一堆小小的圖檔, 這也是我第一次使用 sqlite blob。 Linespector 功能很陽春, 它無法顯示高解析度的原始圖片、 按讚人數、 影片等等, 而且需要使用者每隔一段時間自行手動執行以便更新資料庫。 目前沒有興趣研究互動的部分, 例如模擬使用者按鍵盤、 滑鼠點選某處等等。 如果可以找到 (除我之外的) 第二位用戶, 我再來聽取建議改進 linespector 的功能。 歡迎在此留言或到 github 開 issue。

1 則留言:

  1. 如果手機有root權限,可直接拿line sqlite db
    路徑,/data/data/jp.naver.line.android/databases/naver_line

    回覆刪除

因為垃圾留言太多,現在改為審核後才發佈,請耐心等候一兩天。