三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

telegram-history-dump开发者指南:自定义格式化器实现教程

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_backupend_backup方法。

start_backup方法

start_backup方法在开始处理所有对话前被调用,可以用来进行一些初始化工作,比如创建输出目录:

def start_backup(dialogs) FileUtils.mkdir_p(output_dir) end
format_dialog方法

format_dialog方法是格式化器的核心,它接收对话信息和消息列表作为参数:

def format_dialog(dialog, messages) # 处理对话和消息的代码 end
end_backup方法

end_backup方法在所有对话处理完成后被调用,可以用来进行最终的清理或汇总工作:

def end_backup $log.info('Markdown export finished, see: output/formatted/markdown') end

访问对话和消息数据

format_dialog方法中,你可以访问dialogmessages对象来获取对话和消息数据。

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),仅供参考

← 返回列表