5

アプリケーションのデフォルトアルバムのユーザーの写真をFacebookにアップロードしたいと思います。これは、ここでの公開で説明されています:http: //developers.facebook.com/docs/reference/api/photo

この方法はここで回答されています:FacebookGraphAPIを使用して写真をアルバムにアップロードするにはどうすればよいですか。私は以下を使用しています:

$args = array(
  'message' => 'Photo Caption', 
  'image' => '@'.realpath("image.png")
);
$data = $facebook->api('/me/photos', 'post', $args);

ただし、これを実行しようとすると、「(#324)アップロードファイルが必要です」という例外が発生します。有効なセッションがあり、publish_streamおよびuser_photos権限があります。APIを使用してデータを取得できます。画像ファイルは。でロードできるため、間違いなく有効ですfile_get_contents(realpath("image.png"))

完璧に機能するcurlを使用して、このソリューションを試しまし た。FacebookのGraphAPIを使用して写真をアルバムにアップロードする

$args = array(
  'message' => 'Photo from application',
  'pic.png' => '@'.realpath('pic.png')
);
$tok = $session['access_token']
$url = 'http://graph.facebook.com/'.$album_id.'/photos?access_token='.$tok;
$ch = curl_init();
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);

このように見えるFacebookのPHPSDKcurlと比較して(同じ$argsと$urlを使用):

$ch = curl_init();
$opts = self::$CURL_OPTS;
$opts[CURLOPT_POSTFIELDS] = http_build_query($args, null, '&');
$opts[CURLOPT_URL] = $url;
curl_setopt_array($ch, $opts);
$data= curl_exec($ch);

PHPバージョンが機能しないのはなぜですか?http_build_query()関数が画像の読み込みを妨げているようです。ここで何が起こっているのかを理解するのに十分なカールについてはわかりません。

4

3 に答える 3

12

同じ問題を解決できてうれしいです。fileUploadパラメータをtrueに設定する必要があります。

$facebook = new Facebook(array(
            'appId'  => $facebookapi_id,
            'secret' => $facebookapi_secret,
            'fileUpload' => true,
            'cookie' => true
          ));  
于 2010-09-23T10:48:01.507 に答える
1

Facebookは、http_build_query()ファイルのアップロードに誤ってまたは悪意を持って使用される@で始まるフィールドを停止するために、意図的にPOSTフィールドをGET文字列に変換しました。これがGitHubの問題です。

これに対する簡単な修正はhttp_build_query()、SDKのsrc/facebook.phpからを削除することです。

$opts[CURLOPT_POSTFIELDS] = http_build_query($params, null, '&');

になる:

$opts[CURLOPT_POSTFIELDS] = $params;

ただし、これを行う場合は、@で始まるユーザー生成メッセージをフィルタリングするためのアクションを実行する必要があります。たとえば、各メッセージの前にスペースを追加できます。

于 2010-07-16T08:39:08.137 に答える
1

グラフAPIを使用して写真をアップロードすると、エラーが発生します(#200)ユーザーはTOSを受け入れている必要があります。

ただし、古いREST APIを使用する場合は、上記の例を使用する場合は、URLをhttps://api.facebook.com/method/photos.upload?access_token=xXXXXXXXXXXXに変更するだけです。

于 2010-08-26T02:53:11.923 に答える