如何使用电报API下载图像/媒体

时间:2019-02-19 09:05:25

标签: download telegram

我首先要说的是,电报机器人API的问题不是不是。我正在尝试使用电报核心API从通道中获取图像。该图像位于消息对象的媒体属性中

"_": "message",
      "pFlags": {
        "post": true
      },
      "flags": 17920,
      "post": true,
      "id": 11210,
      "to_id": {
        "_": "peerChannel",
        "channel_id": 1171605754
      },
      "date": 1550556770,
      "message": "",
      "media": {
        "_": "messageMediaPhoto",
        "pFlags": {},
        "flags": 1,
        "photo": {
          "_": "photo",
          "pFlags": {},
          "flags": 0,
          "id": "6294134956242348146",
          "access_hash": "11226369941418527484",
          "date": 1550556770,

我正在使用upload.getFile API来获取文件。例子是

upload.getFile({
  location: {
    _: 'inputFileLocation',
    id: '6294134956242348146',
    access_hash: '11226369941418527484'
  },
  limit: 1000,
  offset: 0
})

但是问题是它引发了错误 RpcError:CODE#400 LIMIT_INVALID 。从https://core.telegram.org/api/files看,限值似乎无效。我尝试给出限制

  • 1024000(1Kb)
  • 20480000(20Kb)
  • 204800000(200kb)

但是它总是返回相同的错误。

1 个答案:

答案 0 :(得分:0)

对于同样对文档感到沮丧的任何人。使用,阅读和尝试不同的东西最终将为您服务。如果可能的话,有人可以承担记录出色的开源软件的任务。

回答,定位对象不应像其他API一样包含id或访问哈希,而应具有电报模式中定义的自己的参数。

消息的媒体属性具有大小对象。这将包含3个或更多尺寸选项(缩略图,预览,网页尺寸等)。选择所需的那个,并使用volume_id,local_id和secret属性。工作代码看起来像这样。

upload.getFile({
    location: {
      _: 'inputFileLocation', (This parameter will change for other files)
      volume_id: volumeId,
      local_id: localId,
      secret: secret
    },
    limit: 1024 * 1024,
    offset: 0
  }, {
    isFileTransfer: true,
    createClient: true
  })

应注意以下几点。

  • 限制应以字节为单位(而不是位)
  • 偏移量将为0。但是,如果偏移量较大,则使用此偏移量并限制下载文件的一部分并加入它们。
  • 还存在其他参数,例如isFileTransfer和createClient。我还没有完全理解为什么需要它。如果有时间,我会在以后进行更新。

尝试使用在原始电报库之上构建的库。我正在使用Airgram,这是一个维护良好的Repo的JS / TS库。