【问题标题】:Publish a Hosted Photo with Graph API and PHP使用 Graph API 和 PHP 发布托管照片
【发布时间】:2012-04-20 03:45:25
【问题描述】:

我正在尝试制作一个 PHP 脚本,该脚本将在不使用 PHP SDK 的情况下将托管照片发布到用户的个人资料中。这就是我现在拥有的:

<?php
   $app_id = "[My App ID]";
   $app_secret = "[My App Secret]";
   $post_login_url = "[current page]";

   $code = $_REQUEST["code"];

   //Obtain the access_token with publish_stream permission 
   if(empty($code)){ 
      $dialog_url= "http://www.facebook.com/dialog/oauth?"
       . "client_id=" .  $app_id 
       . "&redirect_uri=" . urlencode( $post_login_url)
       .  "&scope=publish_stream";
      echo("<script>top.location.href='" . $dialog_url 
      . "'</script>");
     }
    else {
      $token_url="https://graph.facebook.com/oauth/access_token?"
       . "client_id=" . $app_id 
       . "&redirect_uri=" . urlencode( $post_login_url)
       . "&client_secret=" . $app_secret
           . "&code=" . $code;
          $response = file_get_contents($token_url);
          $params = null;
          parse_str($response, $params);
          $access_token = $params['access_token'];






         // This would probably be where my problem is
         $graph_url= "https://graph.facebook.com/me/photos?"
         . "access_token=" .$access_token;
$postdata = http_build_query(
         array(
          'source' => $imageurl, //this variable has been properly defined
          'message' => $image_description //this, too, has been defined
            )
          );
         $opts = array('http' =>
         array(
          'method'=> 'POST',
          'header'=>
            'Content-type: application/x-www-form-urlencoded',
          'content' => $postdata
          )
         );
      }
?>

运行时,会创建一个具有应用名称的新相册,但不会上传文件。有什么办法可以使这项工作?如果有人知道 PHP 甚至 javascript 的解决方案,请分享

-科里

【问题讨论】:

    标签: php facebook-graph-api graph upload photo


    【解决方案1】:

    题外话,你为什么使用 JavaScript 来重定向,而不是 PHP?

    header('位置:' . $dialogue_url );

    【讨论】:

    • ...与我不使用 PHP SDK 的原因相同。我收到一个错误,可能很容易解决,但老实说,我不知道自己在做什么。
    • 嘿,这就是我们开始的地方 :-) 你收到什么错误?是否已经发送了标头?
    • 是的,会话 cookie 和标头...你知道,很多人似乎都有过
    • 嗯,基本上,这意味着一些 HTML 已经输出到浏览器,这意味着标头已经发送,事后无法修改。您可以做的是使用输出缓冲将所有 HTML 放在一边,直到请求完成,或者在完成逻辑之前不输出任何内容。第二种方法是这样做的正确方法,但是输出缓冲是解决问题的创可贴,并且根据我的经验做得很好。
    • 您可以将所有输出/HTML 存储在一个变量中,然后在脚本末尾回显它。最好将输出保存在公共类变量中,而不是保存在可能被无意修改的全局变量中。
    【解决方案2】:

    试试这个

    如果您正在提交表单,您可以这样做。

    $sourceFile = $_FILES[$fileElementName];
    
    $postdata = http_build_query(array('source' => '@'.$sourceFile['tmp_name']));
    

    如果你只是想测试

    'source' => '@'.$imgLocalPath;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多