Telegram bot sendPhoto无效

时间:2016-03-09 22:55:14

标签: php telegram-bot

我正在尝试做的事情是从用户那里检索个人资料照片,并将其作为另一个用户,只需PHP。

问题当我使用file_id字符串发送照片时,发送给用户的所有照片都是同一张照片!

我并没有真正实现这一目标,但我每次都会将自己的照片发送给自己测试功能,结果就是我当前的电报资料图片。

我的代码:

<?php
define('my_id', '12345678');

$userPhotos = apiRequestJson("getUserProfilePhotos", array('user_id' => my_id, 'offset' => 0, 'limit' => 1));

apiRequestJson("sendPhoto", array('chat_id' => my_id, 'photo' => $userPhotos['photos'][0][0]['file_id']));
apiRequestJson("sendPhoto", array('chat_id' => my_id, 'photo' => $userPhotos['photos'][0][1]['file_id']));
?>

链接到电报机器人api: https://core.telegram.org/bots/api

我感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您的代码中存在两个问题。

首先,在请求中将limit参数设置为1时,您只需要一张照片。只需删除可选的offsetlimit参数即可检索前100张照片:

$userPhotos = apiRequestJson( 'getUserProfilePhotos', array( 'user_id' => my_id ) );

第二个问题:返回的响应是“ PhotoSize 数组的数组”,这意味着一组照片是不同照片尺寸的数组:

$userPhotos['photos'][0][0]['file_id']
                      │  │
              photos ─┘  └─ photo sizes

你迭代第二个索引(同一张照片的大小);相反,你要迭代第一个索引:

apiRequestJson( 'sendPhoto', array( 'chat_id' => my_id, 'photo' => $userPhotos['photos'][0][0]['file_id'] ) );
apiRequestJson( 'sendPhoto', array( 'chat_id' => my_id, 'photo' => $userPhotos['photos'][1][0]['file_id'] ) );

由于您事先并不知道每个用户的总照片编号,因此最好的方法是迭代foreach循环:

foreach( $userPhotos['photos'] as $photo )
{
    apiRequestJson( 'sendPhoto', array( 'chat_id' => my_id, 'photo' => $photo[0]['file_id'] ) );
}

最后但并非最不重要的是,请注意,根据此请求,您可以检索用户个人资料照片,因此在大多数情况下,您只能获得一张照片。