【问题标题】:How to receive images with the Telegram API?如何使用 Telegram API 接收图像?
【发布时间】:2015-09-19 06:12:28
【问题描述】:

是否可以接收任何用户发送给机器人的图像(并将其存储在服务器上)?

如果发送了图片,我会收到此 JSON 帖子。这是 Telegram Bot-API 描述的链接。不知道能不能收到全图:https://core.telegram.org/bots/api#available-types

{"update_id":XXXXX,
"message":{"message_id":2222,"from":{"id":XXXXX,"first_name":"Christoph","last_name":"XXXXX"},"chat":{"id":XXXXX,"first_name":"Christoph","last_name":"XXXXX"},"date":1435704055,"forward_from":{"id":XXXXX,"first_name":"Christoph","last_name":"XXXXX"},"forward_date":1435703471,"photo":[{"file_id":"AgADAgADmaoxG9KknwF4O978o3EMqb_EWSoABI5s-WWq46dqiR0AAgI","file_size":998,"width":51,"height":90},{"file_id":"AgADAgADmaoxG9KknwF4O978o3EMqb_EWSoABHax4HvxYqktiB0AAgI","file_size":9912,"width":180,"height":320},{"file_id":"AgADAgADmaoxG9KknwF4O978o3EMqb_EWSoABNzzDwp3sT2whx0AAgI","file_size":41020,"width":450,"height":800},{"file_id":"AgADAgADmaoxG9KknwF4O978o3EMqb_EWSoABE0Gg-AefJ7Yhh0AAgI","file_size":66058,"width":720,"height":1280}]}}

【问题讨论】:

  • 你的 PHP 代码在哪里?
  • 此时我什么都没有,因为我不知道在这种情况下该怎么办。现在,只将 Telegram Webhook-Call 的内容存储到我的脚本中。
  • 假设我们不知道 Telegram API,并引导我们了解正在发生的事情。这里的 JSON 是来自 Telegram 的回复消息吗?它引用了一些file_id 代码——它们存储在哪里?是否有 API 调用来获取它们?
  • 您能否指出文档中有助于我们回答的相关部分?
  • 我最初链接了电报api文档,但它似乎被删除了。 JSON Here 是来自 Telegram 的回复,它将通过 Webhook 发送到我的脚本。我使用 file_get_contents('php://input') 为传入的 JSON 数据创建了一个日志文件,整个内容都在我的第一篇文章的代码框中。没有 Api-Call 来获取它们,但是 Telegram 是否可以在 Webhook 中以任何其他格式发送 Pic?我尝试 print_r($_POST) 和 $_GET 等等,但是每次我尝试时数组都是空的,所以看起来上面是我唯一收到的。对不起我的英语不好

标签: php json telegram-bot


【解决方案1】:

接受的答案很好。但这里有一个更详细的答案。在获得实际图像文件之前,涉及三个主要步骤。 1) 向 Telegram 请求file_id。 2) 加载 Guzzle 客户端。 3) 向 Telegram 请求file_path。请密切注意下面的不同 URL 路径。

// get file id
$id = $update['message']['photo'][0]['file_id'];
$file_id = "https://api.telegram.org/bot" . 
 config('app.telegram_api_key') . "/getFile?file_id=" . $id;

// guzzle client
$guzzle_client = new GuzzleClient();
$request = $guzzle_client->get($file_id);
$response = json_decode($request->getBody(),true);

// get file path
$file_url = "https://api.telegram.org/file/bot" .
 config('app.telegram_api_key') . "/" . $response['result']['file_path'];

【讨论】:

    【解决方案2】:

    可以从 Telegram 服务器下载图像。 这样做:
    1.使用getFileapi获取文件

    //Telegram link
    $telegram_link = 'https://api.telegram.org/bot' . $this->tg_configs['api_key'] . '/getFile?file_id=' . $photo['file_id'];
    

    2。获取文件路径 //创建guzzle客户端 $guzzle_client = new GuzzleClient();

    //Call telegram
    $request = $guzzle_client->get($telegram_link);
    //Decode json
    $json_response = json_decode($request->getBody(), true);
    if ($json_response['ok'] == 'true') {
    
        //Telegram file link
        $telegram_file_link = 'https://api.telegram.org/file/bot' . $this->tg_configs['api_key'] . '/' . $json_response['result']['file_path'];
    

    3。如果使用 PHP,请使用 Intervention/Image 下载图像并将其保存在您的服务器上。

    //Build upload path
    $upload_path = public_path() . \Config::get('media::media.uploadPath');
    //Get image
    $image = $thumbnail = InterventionImage::make($telegram_file_link);
    
    //Get mime
    $mime = $image->mime();
    
    if ($mime == 'image/jpeg') {
        $extension = '.jpg';
    } elseif ($mime == 'image/png') {
        $extension = '.png';
    } elseif ($mime == 'image/gif') {
        $extension = '.gif';
    } else {
        $extension = '';
    }//E# if else statement
    //Resize images
    $image->resize(\Config::get('media::media.mainWidth'), \Config::get('media::media.mainHeight'));
    $thumbnail->resize(\Config::get('media::media.thumbnailWidth'), \Config::get('media::media.thumbnailHeight'));
    
    //Build media name
    $media_name = \Str::random(\Config::get('media::media.mediaNameLength')) . $extension;
    
    //Save images
    $image->save($upload_path . '/' . $media_name);
    $thumbnail->save($upload_path . '/thumbnails/' . $media_name);
    

    【讨论】:

      【解决方案3】:

      Telegram 支持下载文件现在getFile:

      可以在api文档中看到:https://core.telegram.org/bots/api#getfile

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-11-12
        • 2018-08-06
        • 1970-01-01
        • 1970-01-01
        • 2021-06-13
        • 2017-11-28
        • 1970-01-01
        相关资源
        最近更新 更多