Как пометить нескольких пользователей при загрузке изображения, созданного приложением? Facebook / PHP / Graph API - PullRequest
1 голос
/ 19 августа 2011

Этот код работает нормально:

$str1=$userid.'.jpg';
$facebook->setFileUploadSupport(true); 
$data0 = array('tag_uid' => $bild1[1],'x' => rand() % 100,'y' => rand() % 100);
$datatags[] = json_encode($data0);
$access_token = $session['access_token'];
$result = $facebook->api('/me/photos', 'post', array(
    'source' => '@'.realpath($str1),
    'access_token' => $access_token,
    'message' => 'My Hottest Friends',
    'tags' => $datatags                             
    ));

Но пометка больше не будет работать, когда я добавлю эти две строки:

...
$datatags[] = json_encode($data0);
$data1 = array('tag_uid' => $bild1[2],'x' => rand() % 100,'y' => rand() % 100);
$datatags[] = json_encode($data1);
$access_token = $session['access_token'];
...

У меня есть разрешения publish_stream, user_photos, user_photo_video_tags,Есть идеи, почему или как решить проблему?

Спасибо!

Ответы [ 3 ]

1 голос
/ 02 мая 2012
$str1=$userid.'.jpg';
$facebook->setFileUploadSupport(true); 
$friends_tag_array[]=array('uid'=>'xxxx1','x'=>'xxxx','y'=>'xxxx');
$friends_tag_array[]=array('uid'=>'xxxx2','x'=>'xxxx','y'=>'xxxx');
$datatags=getTag($friends_tag_array); 
$access_token = $session['access_token'];

$result = $facebook->api('/me/photos', 'post', array(
    'source' => '@'.realpath($str1),
    'access_token' => $access_token,
    'message' => 'My Hottest Friends',
    'tags' => $datatags                             
    ));

function getTag($friends_tag_array){
    for($i=0 ;$i<count($friends_tag_array);$i++){
    $tag = array('tag_uid' => $friends_tag_array[$i]['uid'],'x' =>$friends_uid_array[$i]['x'],'y' =>$friends_uid_array['y']);
    $tag_data[]=$tag;
   }
   return $tag_data;
}
0 голосов
/ 10 октября 2012

Я смог добавить несколько тегов одновременно, используя Javascript, чтобы сделать запрос к графику API, я бы предположил, что вы можете заставить то же самое работать с вашим ответом, просто добавьте объект json в URL перед вызовом file_get_contents. Код, который я использовал ниже:

var arrTags = [];

for(var i = 0; i< ns.numTags; i++){
            var tag = {
                tag_uid: ns.Dictionary['FBTags'][i].to,
                x: ns.Dictionary['FBTags'][i].x,
                y: ns.Dictionary['FBTags'][i].y
            };

            arrTags.push(tag);
        }

Ext.Ajax.request({
        url: 'https://graph.facebook.com/' + ns.Dictionary['FBImageId'] + '/tags?tags='+JSON.stringify(arrTags),
        method: 'POST',
        params: {
            access_token: ns.Dictionary['FBAccessToken']
        },
        headers: {

        },
        success: function(response, originalCall) {                

        }                            
    });
0 голосов
/ 21 августа 2011

Не нашел другого решения, кроме как пометить каждого пользователя по одному.Сначала загрузите, как в первом фрагменте кода, а затем:

for ($i=2; $i<10; $i++) {
    if ($bild1[$i]) {
        $y=($i*10)-5;
        $post_url = "https://graph.facebook.com/".$result[id]."/tags/". $bild1[$i]."?access_token=".$access_token."&x=20&y=".$y."&method=POST";
        $response = file_get_contents($post_url);
    }
}

Большое спасибо, @ ifaour

...