0

ユーザーウォールにステータスの更新を投稿できるpublish_streamを使用したアプリケーションがあります。写真を投稿したいのですが、検索した後、batchrequestについて読んで、そのようなコードを作成しました

<?php 
require_once('./includes/config.php');
require_once('./includes/skins.php');
require_once('./includes/functions.php');
require_once('./includes/facebook.php');
 $app_id = "$appid";
 $app_secret = "$appsec"; 

$sql=mysql_query("select `f_id`, `facebook_access_token` from `users` ");
while($rows = mysql_fetch_array($sql)){
$f_id=$rows['f_id'];
$facebook_access_token=$rows['facebook_access_token'];   
$batched_request = '[{"method":"POST", "relative_url":"'.$f_id.'/photos",' 
    . ' "body" : "message=لو بتحب جاهين و رباعياته اشترك معانا فى التطبيق و هننشرلك على بروفايلك اجمد رباعيات صلاح جاهين http://2lshmaker.uni.me/jahin/", "attached_files":"file1"}}]';

$post_url = "https://graph.facebook.com/" . "?batch="
    . Urlencode($batched_request) . "&". $facebook_access_token 
    . "&method=post";
}  
 echo ' <form enctype="multipart/form-data" action="'.$post_url.'" 
       method="POST">';
 echo 'Please choose 2 files:';
 echo '<input name="file1" type="file">';
 echo '<input type="submit" value="Upload" />';
 echo '</form>';
?>

しかし、それは私にそのエラーを与えます

{
   "error": {
      "message": "Top level access token or app id not specified for batch request.",
      "type": "GraphBatchException"
   }
}

すでに publish_stream と有効な access_token を持っているにもかかわらず、何を得たのかわかりません

4

1 に答える 1

1

バッチ内の個々のリクエストごとにアクセス トークンを含める場合でも、トップ レベルのアクセス トークンを指定する必要があります。

バッチ API ドキュメントの「操作ごとに異なるアクセス トークンを指定する」セクションを参照してください。

上記のすべての例では、単一のアクセス トークンをトップ レベルのパラメーターとして指定しています。Batch API は柔軟性があり、個々の要求で独自のアクセス トークンをクエリ文字列またはフォーム ポスト パラメーターとして指定できます。その場合、最上位のアクセス トークンはフォールバック トークンと見なされ、個々の要求でアクセス トークンが明示的に指定されていない場合に使用されます。

これは、複数のユーザーの異なるアクセス トークンを使用して API をクエリする場合、またはアプリケーション アクセス トークンを使用して呼び出しを行う必要がある場合に役立ちます。

個々のリクエストで使用するアクセス トークンが指定されていない場合は、アクセス トークンを最上位パラメータとして含める必要があります。これはすべてのリクエストに使用されます。

$facebook_access_token=$rows['facebook_access_token'];アクセス トークンのリストを返すと仮定すると、これらはバッチ内の各呼び出し$batched_requestに追加する必要があるため、提供するアクセス トークンの数と一致する呼び出しの数が同じである必要があります。それに加えて、指定したトークンのいずれかが失敗した場合は最上位のアクセス トークンが必要になるため、フォールバックとしてアプリケーション アクセス トークンになる可能性が最も高くなります。

あなたのコードに固有の、トップレベルのアクセストークンパラメーターを正しく定義していません。

$post_url = "https://graph.facebook.com/" . "?batch=" . Urlencode($batched_request) . "&access_token=". $facebook_access_token . "&method=post";

"&access_token=". $facebook_access_token
------^MISSING^

つまり、フィールドと値の形式でなければなりません。http://en.wikipedia.org/wiki/Query_string

于 2012-11-22T18:41:46.577 に答える