gpt4 book ai didi

facebook - 如何在 facebook-api 中标记照片?

转载 作者:行者123 更新时间:2023-11-30 05:26:40 25 4
gpt4 key购买 nike

我想问一下是否/如何使用 FB API(图形或 REST)标记照片。

我已经成功地创建了一个相册并在其中上传了一张照片,但我仍然坚持标记。

我有权限和正确的 session key 。

到目前为止我的代码:

try {
$uid = $facebook->getUser();
$me = $facebook->api('/me');
$token = $session['access_token'];//here I get the token from the $session array
$album_id = $album[0];

//upload photo
$file= 'images/hand.jpg';
$args = array(
'message' => 'Photo from application',
);
$args[basename($file)] = '@' . realpath($file);

$ch = curl_init();
$url = 'https://graph.facebook.com/'.$album_id.'/photos?access_token='.$token;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $args);
$data = curl_exec($ch);

//returns the id of the photo you just uploaded
print_r(json_decode($data,true));

$search = array('{"id":', "}");
$delete = array("", "");

// picture id call with $picture
$picture = str_replace($search, $delete, $data);

//here should be the photos.addTag, but i don't know how to solve this
//above code works, below i don't know what is the error / what's missing

$json = 'https://api.facebook.com/method/photos.addTag?pid='.urlencode($picture).'&tag_text=Test&x=50&y=50&access_token='.urlencode($token);

$ch = curl_init();
$url = $json;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_exec($ch);
} catch(FacebookApiException $e){
echo "Error:" . print_r($e, true);
}

我真的找了很久,如果你知道什么可能对我有帮助,请在这里发布:)感谢你的帮助,卡米罗

最佳答案

嘿,您可以使用 GRAPH API 直接在上传时标记图片,请参阅下面的示例:此方法为标签信息创建一个数组,在此示例中,该方法变成一个包含 Facebook 用户 ID 的数组:

private function makeTagArray($userId) {
foreach($userId as $id) {
$tags[] = array('tag_uid'=>$id, 'x'=>$x,'y'=>$y);
$x+=10;
$y+=10;
}
$tags = json_encode($tags);
return $tags;
}

调用GRAPH API上传图片的参数如下:

$arguments = array(
'message' => 'The Comment on this Picture',
'tags'=>$this->makeTagArray($this->getRandomFriends($userId)),
'source' => '@' .realpath( BASEPATH . '/tmp/'.$imageName),
);

这里是 GRAPH API 调用的方法:

    public function uploadPhoto($albId,$arguments) {
//https://graph.facebook.com/me/photos
try {

$fbUpload = $this->facebook->api('/'.$albId.'/photos?access_token='.$this->facebook->getAccessToken(),'post', $arguments);
return $fbUpload;
}catch(FacebookApiException $e) {
$e;
// var_dump($e);
return false;
}
}

参数 $albId 包含来自 Facebook 相册的 ID。

如果您想标记相册中的现有图片,您可以使用此方法:首先,我们需要来自 REST API 的正确图片 ID,在此示例中,我们需要来自应用程序创建的相册或使用此应用程序的用户的名称。该方法返回该相册最后上传图片的图片 ID:

public function getRestPhotoId($userId,$albumName) {
try {
$arguments = array('method'=>'photos.getAlbums',
'uid'=>$userId
);
$fbLikes = $this->facebook->api($arguments);
foreach($fbLikes as $album) {

if($album['name'] == $albumName) {
$myAlbId = $album['aid'];
}
}
if(!isset($myAlbId))
return FALSE;
$arguments = array('method'=>'photos.get',
'aid'=>$myAlbId
);
$fbLikes = $this->facebook->api($arguments);
$anz = count($fbLikes);
var_dump($anz,$fbLikes[$anz-1]['pid']);
if(isset($fbLikes[$anz-1]['pid']))
return $fbLikes[$anz-1]['pid'];
else
return FALSE;
//var_dump($fbLikes[$anz-1]['pid']);
//return $fbLikes;
}catch(FacebookApiException $e) {
$e;
// var_dump($e);
return false;
}
}

现在您从 REST API 获得了正确的图片 ID,您可以调用 REST API 来标记这张图片 $pid 是来自方法 getRestPhotoId 的图片,$tag_uid 是一个 Facebook 用户 ID:

    $json = 'https://api.facebook.com/method/photos.addTag?pid='.$pid.'&tag_uid='.$userId.'&x=50&y=50&access_token='.$this->facebook->getAccessToken();

$ch = curl_init();
$url = $json;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
//curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_GET, true);
$data = curl_exec($ch);

这一行非常重要: curl_setopt($ch, CURLOPT_GET, true);您必须使用 CUROPT_GET 而不是 CUROPT_POST 来添加标签并抛出 REST API。

希望对你有帮助。

来自斯图塔特的祝福凯

关于facebook - 如何在 facebook-api 中标记照片?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3484159/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com