电报:从电报客户端获取文件ID
Posted
技术标签:
【中文标题】电报:从电报客户端获取文件ID【英文标题】:Telegram: get fileid from telegram client 【发布时间】:2017-05-10 15:58:29 【问题描述】:Telegram 机器人使用fileid
下载文件。我怎样才能从 Telegram 客户端(我的非官方版本)获得这个 fileid
? mtproto
中的文件有 this location class 表示它们的地址。
文件位置参数
dc_id int 保存文件的数据中心编号 volume_id 长服务器音量 local_id int 文件 ID 秘密长校验和以访问文件问题是我不知道如何生成适用于来自File Location
类的机器人的fileid
。
更新 1:
我尝试做一些逆向工程。所以,我发现File Location
类和FileId
之间存在某种关系。
这是我的File Location
示例地址。
0
// 此字段仅适用于私密聊天
access_hash:0
// 此字段仅适用于秘密聊天
volume_id:429640340
(199BCA94 HEX
)
secret: -3528741004939935589
(CF0764C08833409B HEX
) // 根据 TG 文档,它应该是文件 CheckSum
local_id:6005
(1775 HEX
)
这是我根据 FileID
从我的 Bot 检索到的前 FileLocation
类:
AgADBAADL6gxG06L8w0nhNO87UW3iZTKmxkABJtAM4jAZAfPdRcAAgI
很明显FileID
的值是Base64
的格式。所以我已经解码了:
0200030400032FA8311B4E8BF30D2784D3BCED45B78994CA9B1900049B403388C06407CF7517000202
现在我们可以在这个十六进制值中看到FileLocation
值:
0200030400032FA8311B4E8BF30D2784D3BCED45B789
VolumeId:94CA9B19 HEX
未知:0004
秘密:9B403388C06407CF HEX
local_id:7517 Hex
未知:000202
注意:这些值以Big-Endian
格式存储。
现在我们需要解码Unknown
值。我感谢任何有助于解码这些值的努力。
【问题讨论】:
Telegram-API 的PhotoSize.location
和 Bot-API 的 PhotoSize.file_id
似乎没有关系
【参考方案1】:
这是机器人 API 文件 ID 的 TL 方案:https://github.com/danog/MadelineProto/blob/master/src/danog/MadelineProto/TL_botAPI.tl
我已经在 MadelineProto 中实现了 bot API 文件 id 转换:您基本上必须对文件 id 进行 base64decode,将它们通过基于空字节的 RLE 解码器,然后使用给定的 TL 方案对其进行解码。 请参阅 TL/Conversion/BotAPI* 以了解 MessageMedia 对象在序列化之前如何转换为 File 对象。
我设法使用special MTProto bot I built using the same lib 对文件 ID 进行了逆向工程(我忘了在这里搜索 xd)。
【讨论】:
请在此处发布您的逆向工程结果摘要,这样比共享 php 代码更有帮助以上是关于电报:从电报客户端获取文件ID的主要内容,如果未能解决你的问题,请参考以下文章