telegram-history-dump开发者指南:自定义格式化器实现教程
telegram-history-dump开发者指南:自定义格式化器实现教程
【免费下载链接】telegram-history-dumpBackup Telegram chat logs using telegram-cli项目地址: https://gitcode.com/gh_mirrors/te/telegram-history-dump
telegram-history-dump是一款基于telegram-cli的聊天记录备份工具,它允许用户将Telegram聊天记录导出为多种格式。本教程将详细介绍如何为该工具创建自定义格式化器,让你能够按照自己的需求定制聊天记录的输出样式。
为什么需要自定义格式化器?
默认情况下,telegram-history-dump提供了多种格式化器,包括HTML、纯文本、PISG等。但有时你可能需要特定格式的输出,比如Markdown、CSV或者其他自定义格式。这时,创建自己的格式化器就显得尤为重要。
格式化器基础
在开始编写自定义格式化器之前,让我们先了解一下格式化器的基本结构。所有格式化器都继承自FormatterBase类,该类定义了格式化器的基本接口。
FormatterBase类
FormatterBase类位于formatters/lib/formatter_base.rb文件中,它提供了以下核心方法:
start_backup(dialogs): 在开始备份前调用,可用于初始化操作format_dialog(dialog, messages): 格式化单个对话,必须实现end_backup(): 在备份完成后调用,可用于清理或最终处理
创建自定义格式化器的步骤
步骤1:创建格式化器文件
首先,在formatters目录下创建一个新的Ruby文件。文件名应该与你的格式化器名称相对应,例如markdown.rb。
步骤2:继承FormatterBase
在新创建的文件中,需要引入FormatterBase并创建一个继承自它的类。类名应该采用驼峰式命名,例如MarkdownFormatter。
require_relative 'lib/formatter_base' class MarkdownFormatter < FormatterBase # 你的代码将在这里 end步骤3:设置格式化器名称
每个格式化器都需要一个唯一的名称,这通过设置NAME常量来实现:
NAME = 'markdown'步骤4:实现必要的方法
至少需要实现format_dialog方法,该方法负责处理单个对话的格式化。你也可以选择性地实现start_backup和end_backup方法。
start_backup方法
start_backup方法在开始处理所有对话前被调用,可以用来进行一些初始化工作,比如创建输出目录:
def start_backup(dialogs) FileUtils.mkdir_p(output_dir) endformat_dialog方法
format_dialog方法是格式化器的核心,它接收对话信息和消息列表作为参数:
def format_dialog(dialog, messages) # 处理对话和消息的代码 endend_backup方法
end_backup方法在所有对话处理完成后被调用,可以用来进行最终的清理或汇总工作:
def end_backup $log.info('Markdown export finished, see: output/formatted/markdown') end访问对话和消息数据
在format_dialog方法中,你可以访问dialog和messages对象来获取对话和消息数据。
dialog对象
dialog对象包含对话的基本信息,如:
print_name: 对话名称title: 对话标题type: 对话类型(用户、群组等)
messages对象
messages是一个包含所有消息的数组,每个消息是一个哈希,包含:
text: 消息文本date: 消息时间戳out: 是否为发送的消息from: 发送者信息media: 媒体信息(如果有)
输出目录
格式化器应该将输出文件保存到output_dir目录中,这个目录可以通过output_dir方法获取:
def format_dialog(dialog, messages) filename = File.join(output_dir, "#{get_safe_name(dialog['print_name'])}.md") File.open(filename, 'w:UTF-8') do |file| # 写入格式化内容 end end配置格式化器
要使用你的自定义格式化器,需要在config.yaml文件中添加相应的配置:
formatters: markdown: # 格式化器选项示例:简单的Markdown格式化器
下面是一个简单的Markdown格式化器示例,它将对话导出为Markdown格式的文件:
require_relative 'lib/formatter_base' require 'cgi' class MarkdownFormatter < FormatterBase NAME = 'markdown' def start_backup(dialogs) FileUtils.remove_dir(output_dir, true) FileUtils.mkdir_p(output_dir) end def format_dialog(dialog, messages) safe_name = get_safe_name(dialog['print_name']) filename = File.join(output_dir, "#{safe_name}.md") File.open(filename, 'w:UTF-8') do |file| # 写入对话标题 if dialog['type'] != 'user' file.puts "# Group chat: #{CGI::escapeHTML(dialog['title'])}" else file.puts "# Chat with #{CGI::escapeHTML(dialog['print_name'])}" end file.puts "---\n" # 写入消息 messages.reverse_each do |msg| next unless msg['text'] date = Time.at(msg['date']).strftime('%Y-%m-%d %H:%M') author = msg['out'] ? 'You' : get_full_name(msg['from']) file.puts "**#{author}** [#{date}]: #{CGI::escapeHTML(msg['text'])}" file.puts end end end def end_backup $log.info('Markdown export finished, see: output/formatted/markdown') end end测试自定义格式化器
要测试你的自定义格式化器,只需在运行telegram-history-dump时指定它:
git clone https://gitcode.com/gh_mirrors/te/telegram-history-dump cd telegram-history-dump ruby telegram-history-dump.rb --format markdown总结
创建自定义格式化器是扩展telegram-history-dump功能的强大方式。通过继承FormatterBase类并实现必要的方法,你可以将Telegram聊天记录导出为任何你需要的格式。无论是简单的文本格式还是复杂的HTML报告,自定义格式化器都能满足你的需求。
希望本教程能帮助你开始创建自己的格式化器。如果你有任何问题或需要进一步的帮助,请参考项目中的示例格式化器,如formatters/html.rb和formatters/plaintext.rb。
【免费下载链接】telegram-history-dumpBackup Telegram chat logs using telegram-cli项目地址: https://gitcode.com/gh_mirrors/te/telegram-history-dump
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
