Как загрузить изображение / мультимедиа с помощью Telegram API - PullRequest
0 голосов
/ 19 февраля 2019

Я хочу начать с того, что этот вопрос , а не для API бота telegram.Я пытаюсь получить изображения с канала, используя API ядра Telegram.Изображение находится в свойстве media объекта сообщения

"_": "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,

Я использую API upload.getFile для извлечения файла.Пример:

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 (1Кб)
  • 20480000 (20Кб)
  • 204800000 (200Кб)

Но это всегдавернуть ту же ошибку.

1 Ответ

0 голосов
/ 20 февраля 2019

Для тех, кто также разочарован в документах.Использование, чтение и опробование разных вещей в конечном итоге вам подойдут.Если возможно, кто-то может взять на себя задачу документирования замечательного программного обеспечения с открытым исходным кодом.

В ответ на вопрос объект местоположения не должен содержать идентификатор или хэш доступа, как другие API, скорее, он имеет свои собственные параметры, как определено всхема телеграммы.

В сообщении есть свойство media, которое имеет объект размеров.Он будет содержать 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 , библиотеку JS / TS, которая является хорошо поддерживаемым репо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...