当前位置: 首页 > 知识库问答 >
问题:

PHP-使用有效的访问令牌通过Graph API在Facebook上发布视频

帅彦
2023-03-14

我有一个视频存在于我的服务器上,我需要张贴在脸书使用图形API视频。

以下是Facebook团队建议的代码。

我所做的如下。

2)发到脸书

这很耗时。

下面是我正在尝试的代码

    define("FB_WEB_APP_ID","********");
    define("FB_WEB_SECRET","********");
    define("FB_WEB_REDIRECT_URI","<< redirect url >>");
    $GLOBALS["all_user_dir_path"]="/var/www/proj/web/video/user_videos/";
     define("FB_WEB_SCOPE","user_friends,email,public_profile,user_hometown,user_location,user_photos,user_videos,publish_actions,read_friendlists,publish_stream,offline_access");
    define("FB_WEB_RESPONSE_TYPE","code%20token");

    $GLOBALS["fb_app_creds"]=array();
    $GLOBALS["fb_app_creds"]['appId']= FB_WEB_APP_ID;
    $GLOBALS["fb_app_creds"]['secret']=FB_WEB_SECRET;
    $GLOBALS["fb_app_creds"]['response_type']=FB_WEB_RESPONSE_TYPE;
    $GLOBALS["fb_app_creds"]['redirect_uri']=FB_WEB_REDIRECT_URI;
    $GLOBALS["fb_app_creds"]['scope']=FB_WEB_SCOPE;
    $GLOBALS["facebook"] = new Facebook($GLOBALS["fb_app_creds"]);



class DefaultController extends Controller
{
// some code....

/**
     * @Route("/gk",name="_fb")
     * @Template()
     */
    public function gkAction(Request $request){

        $facebook = $GLOBALS["facebook"];

        $access_token=$request->query->get("access_token");

        if(!$access_token){
          die("give access token in url.......");
        }

        echo "<pre>";
        $facebook->setAccessToken($access_token);

        $user = $facebook->getUser();

        $me=$facebook->api("/me");

        $email=$me['email'];

        $all_user_dir_path=$GLOBALS["all_user_dir_path"];
        $user_directory = str_replace(array(".","@"), "_",$email);

        $user_dir_abs_path=$all_user_dir_path.$user_directory;

        print_r($me);

        $video_file_path=$user_dir_abs_path."/video.mp4";

        if(file_exists($video_file_path))
        { 
          echo "file exists...";
        }else{
          die("not exist");
        }

        $video_title="Test";
        $video_desc="Test";

        $access_token=$request->query->get("access_token");

        $file = "@".$video_file_path;
        $data =  array('name' => 'file', 'file' => $file);

          $post_url = "https://graph-video.facebook.com/me/videos?"
         . "title=" . $video_title. "&description=" . $video_desc
         . "&". $access_token
         ;


        echo "<hr>TRY 1<hr>";
        try{
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, $post_url);
            curl_setopt($ch, CURLOPT_POST, 1);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
            curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
            $res = curl_exec($ch);

            $video_id=0;
            if( $res === false ) {

            }else{
              $res=json_decode($res,true);
              /* $video_id = $res['id'];*/
               echo ":::: ";print_r($res);
            }
            curl_close($ch);
       }catch(\Exception $e){
           echo " Exception generated in Try 1 : ".$e->getMessage();
       }

       echo "<hr>TRY 2<hr>";

       $params = array(
            "access_token" => $access_token,
            "name"=>"file",
            "file" => "@".$video_file_path,
            "title" => $video_title,
            "description" => $video_desc
          );
          try {
              $ret = $facebook->api('/me/videos', 'POST', $params);
              print_r($ret);
          } catch(\Exception $e) {
            echo " Exception generated in Try 2 : ".$e->getMessage();
          } 

        die("</pre>");
    }    

}

 /* code with sdk - object oriented way */
        $file=$GLOBALS["all_user_dir_path"].$user_directory."/video.mp4";
        $source = array();
        $source['name']="video.mp4";
        $source['type'] = "video/mp4";
        $source['tmp_name'] = $file;
        $source['error'] = 0;
        $source['size'] = filesize($file);
        echo "<br><br>$file<br><br>";

        $params = array(
          "access_token" => $access_token, 
            "source" => $source,
            "title" => "testvideo",
            "description" => "testvideo"
        );
          try {
              $ret = $facebook->api('/me/videos', 'POST', $params);
              echo 'Successfully posted to Facebook';
              echo "<pre>";print_r($ret);echo "</pre>";
          } catch(Exception $e) {
            echo $e->getMessage();
          } 

共有1个答案

杨安歌
2023-03-14

文件不是有效参数。用source代替参数file

参考资料

 类似资料:
  • 我有一个Facebook页面,我正在尝试上传一个已经托管在我的服务器上的视频。我需要通过javascript来做到这一点,我所拥有的只是视频的src链接(类似于 )。作为管理员,我拥有所有必需的权限()。 facebook api说我必须以的形式发送数据,这意味着视频内容。为了通过ajax实现这一点,我在stackoverflow上回答了这个问题,并学习了如何在jQuery中使用ajax请求发送F

  • 我用iOS SDK把一段视频发到了Facebook的个人资料上,效果很好。但当我尝试使用相同的代码,并将原生视频发布到Facebook页面时,它失败了,出现了以下错误: (#200)应用程序没有发布到目标的权限 “app没有权限发帖到目标”是什么意思?为了在页面上发布视频,我应该使用特殊权限吗? 谢了!

  • 使用应用程序访问令牌之前在这个问题中被问到(如何使用Facebook应用程序访问令牌与Spring社交),克雷格·沃尔斯给出了一个很好的解释,为什么Spring社交API在大多数情况下应该是基于用户的。 我有一个场景,但是我希望我们的服务器端应用程序进行一些不需要用户特定权限的查询。我为以下示例选择了一个随机的公共页面 我想: 按别名/id查看公共页面的详细信息 https://graph.fac

  • 我们使用以下链接生成了一个访问令牌:https://graph.facebook.com/oauth/access_token?grant_type=client_credentials 它给了我们这样一个访问令牌:AQRtositr-Km47sometextwohp-7heCCDHmKE 但现在,当我们想在本地Facebook应用程序中进行身份验证时,它会生成以下AccessToken:ABBD