Graph API中使用的HTTP POST数据的格式是什么?

时间:2011-09-04 20:52:47

标签: php facebook api post facebook-graph-api

我正在使用带有PHP SDK的Graph API https://developers.facebook.com/docs/reference/api/#publishing,我想通过HTTP POST方法发送一些数据,正如文档中提到的那样(例如添加评论)。

https://developers.facebook.com/docs/reference/api/batch/他们说我应该编码HTTP POST请求的主体,因为 ...应该格式化为原始的HTTP POST正文字符串,类似于URL查询字符串。我无法获得PHP函数的组合以使其工作。在他们声称以下的例子应该工作:

"body": "message=Test status update"

嗯,这很有效。但是如果我需要添加其他参数呢?这个字符串应该怎么编码?例如。我有这个:

$data = array('name' => 'Gargamel', 'occupation' => 'Freelancing Smurf Hunter');

我应该如何处理它以获得所需的格式?以下不起作用:

$batch = array();
$query = array(
    'method' => 'POST',
    'relative_url' => '/forrest/full/of/smurfs',
    'body' => urldecode(http_build_query($data)),
);
$batch[] = $query;
$responses = $this->api('/?batch=' . json_encode($batch, JSON_HEX_AMP), 'POST');

我探索了一半的互联网,但我找不到比上面提到的格式更具体的信息(原始HTTP POST类似于URL查询字符串)。

感谢您的任何建议!

2 个答案:

答案 0 :(得分:1)

使用此:http://forum.developers.facebook.net/viewtopic.php?pid=331343#p331343

    $batch_array[] = array(
        'method' => 'POST',
        'relative_url' => 'Relative url',
        'body' => 'message=' . 'Your message' . '%26data=' . 'Your data' ,

    ); 

答案 1 :(得分:0)

这是我的批处理示例代码:

$graph_url = "https://graph.facebook.com/me/friends?access_token=" . $params['access_token'];
$friends = json_decode(file_get_contents($graph_url));

$batched_request = '[{"method":"GET","relative_url":"'.$friends->data[0]->id.'/likes"}';
for ($i = 1; $i < 20; $i++) {
    $batched_request .= ',{"method":"GET","relative_url":"'.$friends->data[$i]->id.'/likes"}';
}
$batched_request .= ']';

$post_url = 'https://graph.facebook.com/?batch=' 
    . $batched_request . '&access_token=' . $params['access_token'] . '&method=post';
$posts = file_get_contents($post_url);

for ($i = 0; $i < 20; $i++) {
    $post = json_decode($posts[$i]->body);
    echo($friends->data[$i]->id.' '.$friends->data[$i]->name);
    //print_r($post);
}

批量查询限制20个请求。您需要解码批处理查询的每个部分,请参阅上面的代码。