开山以来, tg 里搜索中文糟糕地令人发指.
多少年了, 改进过吗?
都说 Telegram 官方永远不重视 CJK 用户.
难道广大的 CJK 朋友会坐以待毙?
哦, 我的上帝, 看在帕维尔.杜若这么帅的份上, 当然是选择原……
不可能!
8012 年 11 月 更新:
基于 tg 官方数据导出工具(桌面客户端导出)的中文搜索解决方案, 现已全新呈现于本项目 lite 分支
目前只能搜索单个 peer_chat 的聊天记录。
- 你有一台 24/7 在线的电脑, 且运行 Linux/Unix 系统
- 你了解一点建网站的原理
- 你看得懂英语
- 万一看不懂, 还懂得通过非"Baidu"的搜索引擎查找资料
- 胶水工程, 数据库暴搜, 无分词/同义词/模糊. 技术含量低.
- 原生态网页界面.
- 数据源需手动备份, 和真实数据相比有延时.
- 取得所有匹配消息后才加载结果.
巧妇难为无米炊, 搜索须有数据源.
备份, 导出, 提取, 是我们获取自己聊天记录的三种, 不, 一种方法.
我们今天采用 gumblex/tg-export 将你全部聊天记录存入一份数据库文件中.
该导出工具依赖 telegram-cli, 因此运行平台受限于 *inx 系统.
备份过程请参考如下 debian/ubuntu 的 bash:
如何把大象关进冰箱
# 1. install telegram-cli and other dependencies
sudo apt update && sudo apt install sudo tmux nano vim make git zlib1g-dev libreadline-dev libconfig-dev libssl-dev lua5.2 liblua5.2-dev libevent-dev libjansson-dev libpython-dev python3-pip -y
git clone --recursive https://github.com/gumblex/tg.git && cd tg
./configure
make
## FOR BEBIAN 9 with openssl problem: https://github.com/freifunk-gluon/gluon/issues/973#issuecomment-265910812
# 2. log into tg-cli
bin/telegram-cli
# make sure you have logged-in your account
# 3. fight with memory leak (if you have enough RAM, feel free to skip this step)
sudo fallocate -l 1G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
# 4. now let's export tg history
cd ..
git clone https://github.com/gumblex/tg-export.git && cd tg-export
export LC_ALL=C.UTF-8
python3 export.py -d "tgsearch.db" -e "../tg/bin/telegram-cli"
[此处应有截图]
注意事项:
- 每个 peer_chat 每次只能获取 3000 条. 3000 条到顶后, 他会报个小错, 莫慌, 没事.
- 万一 tg-cli 编译不通过, 通常要降 openssl 版本 (如果是此库的锅). 上面脚本给了个参考链接
- 另, 试过在树莓派 (ARM) 上编译. 结果天坑勿试, x86 保平安
- 同理请勿尝试 wsl 或者 msys2 上编译. 活着不好么
- 记录条数过多, 可能延长备份时间. 主要耗时在建索引. 感觉等不起的, 理论上可以从py脚本里去掉
建索引
那步. 我没试过, 可能有不良后果.
golang 首作.
部署, 就是啧么自信.
找个文件夹,
把软件 tgsearch
放进去,
把网页模版 main.tmpl
放进去,
把文件配置 config.json
放进去,
把数据库文件 tgsearch.db
放进去,
然后运行,
chmod +x ./tg-search
./tg-search
接着
打开网页,
比如 http://123.123.123.123:8082
或者 http://example.com:8082
见证奇迹的时刻到了.
不急
因为我把数据库文件名写死了🌚.
端口也写死了🌚.
(已经可以自定义数据库文件名和端口号了, 在 "config.json" 里面改.)
且只编译了 linux_amd64 下的二进制包🌚.
如不适请自编
虽无必要, 但万一谁想
不开编译呢
# 1. 装go, 抄自 https://github.com/astaxie/build-web-application-with-golang/blob/master/zh/01.1.md
sudo add-apt-repository ppa:gophers/go
sudo apt-get update
sudo apt-get install golang-stable git-core mercurial
# 2 装sqlite依赖, 出自 https://github.com/mattn/go-sqlite3
go get github.com/mattn/go-sqlite3
go install github.com/mattn/go-sqlite3
# 3. 下源码编译
git clone https://github.com/cxumol/tg-search
cd tg-search
go build --tags "libsqlite3 linux" -o tgsearch
# 4. 运行
./tgsearch
人的需求有时不那么容易填满,
因为我们还想查找某条消息的来源, 对象, 发言时间等等.
那么请您把搜到的那条消息, 囫囵复制到 telegram 客户端搜索框里,
更重要的是, 定位到原消息后, 可以直接对该消息进行 reply, forward 等操作.
防火防盗, 搜索完了随手关站. 随用随开.
- 灵活配置端口, 数据库文件名
- 前端装修
- 静态 (网页模版等) 打包到二进制
- 访问密码
- 加钱上
elasticsearch
, 妙妙妙! - 查询加速: 尝试每找到一条消息, 立马在网页上加载一条 (channel 通信 + 轮询)
- 整合 travis 云编译
- 求路过的高手指点, 求前端网页装修方案
以上是伪.后续计划
真.后续计划: 坐等有缘人接手
基于不可靠的 tg-cli,
以 ruby 脚本为运作形式,
产出 ${print-name}.jsonl
基于 Webogram, 以 Chrome extension 为运作形式, 产出 ??? (未测试)
基于不可靠的改版 gumblex/tg-cli
(gumblex 大佬打了防炸补丁)
,
以 python 脚本为运作形式,
产出 .db (sqlite)
搜索当前群历史, bot 界面.
搜索 ##Orz 的记录, bot 界面.
- 本项目
搜索你备份过了的聊天记录, 网页界面.