如何为facebook messenger bot获取flickr随机图像?

时间:2016-04-15 17:59:41

标签: php facebook api bots messenger

如果用户要求,我想让我的机器人接收图片。
但我真的不确定如何使它成为可能。
我在我的网站上创建了特殊页面,我可以根据请求获取图像。
但是,我的机器人不工作 我创建了flickr帐户,创建了特殊页面,用flickr页面代码连接了我的机器人代码。
那么,问题是,如何让我的机器人在flickr中搜索图片然后提供给用户呢?

以下是bot页面的代码:

 include 'flickr.php';
 $row = "My access token";
 $url = 'https://graph.facebook.com/v2.6/me/messages?access_token='.$row;


 $ch = curl_init($url);
 if($message == "image'.$set.'")
{
    $load_images = $hasil;
    $image = file_get_contents($load_images);
    $jsonData = '{
        "recipient":{
        "id":"'.$sender.'"
        },
          "message":{
              "attachment":{
                   "type":"image",
                   "payload":{
                       "url":"'.$image.'"
                  }
             }
        }
    }'; 
 };

 $json_enc = $jsonData;
 curl_setopt($ch, CURLOPT_POST, 1);   
 curl_setopt($ch, CURLOPT_POSTFIELDS, $json_enc);
 curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));  

 if(!empty($input['entry'][0]['messaging'][0]['message'])){
    $result = curl_exec($ch);
 }

这是我的flickr代码。
我认为这个错误在某处,但我无法看到它。

 require_once 'webhook.php';

 class flickr
 {
   var $api;
     function __construct($api) {
        $this->api = $api;
      }
  function flickr_photos_search($search,$count_image,$size)
    {
    $params = array(
    'api_key'   => $this->api,
    'method'    => 'flickr.photos.search',
    'text'      => $search,
    'format'    => 'rest',
    'per_page'  => $count_image,
    'page'      => 1,);
    $xml = $this->create_url($params);
    if(@$rsp = simplexml_load_file($xml))
    {
        if (count($rsp)<>0)
        {
            foreach($rsp->photos->children() as $photo)
            {
                if ($photo->getName()=='photo')
                {
                    $farm=$photo->attributes()->farm;
                    $server=$photo->attributes()->server;
                    $id=$photo->attributes()->id;
                    $secret=$photo->attributes()->secret;
                    if ($size=='Med')
                    {
                        $sz="";
                    }
                    else
                    {
                        $sz = "_".$size;
                    }
                    $gbr[]='<img src="https://farm'.$farm.'.staticflickr.com/'.$server.'/'.$id.'_'.$secret.$sz.'.jpg'.'" /> ';
                }
            }
        }
        else
        {
            die("No images found!");
        }
    }else
    {
        die("wrong parameter");
    }
    return $gbr;
  }
 function create_url($params)
    {
    $encoded_params = array();
    foreach ($params as $k => $v){

        $encoded_params[] = urlencode($k).'='.urlencode($v);
    }
    $url = "https://api.flickr.com/services/rest/?".implode('&', $encoded_params);
    return $url;
}
 }

 if(isset($_REQUEST[$set]))
 {

 $search=$_REQUEST[$set];
 $result= 30;
 $size = 'm';

 $flickr = new flickr('My flickr secret code');
 $gbr    = $flickr->flickr_photos_search($search,$result,$size);
 foreach($gbr as $hasil)
    {
        echo $hasil.' ';
    }
 }

1 个答案:

答案 0 :(得分:1)

有一个问题:

$load_images = $hasil;
$image = file_get_contents($load_images);
"payload":{
    "url":"'.$image.'"
}

来自documentation - 有效负载图片只是该图片的网址

您可以使用我的API(https://github.com/Fritak/messenger-platform),非常容易使用:

// Send an image (file).
$bot->sendImage($userToSendMessage, 'http://placehold.it/150x150');