有可能/如何将Facebook帖子ID保存到mysql数据库?

时间:2013-11-05 07:09:55

标签: php mysql facebook facebook-graph-api

我有一个程序(应用程序)要求用户输入然后生成图像并将图像链接发布到FB时间轴。现在我想做的是获取POSTID并将其保存到我的数据库。所以我可以有一个记录,如果我想连接到FB POST,我可以检索。我怎样才能做到这一点?以下是我用于发布到Facebook时间线的代码。希望你能帮助我。我第一次做这样的事情。非常感谢!

    $http_dir = 'http://site.com/Amats/image_entry/';
    $post_link = $http_dir . $img_newname;

    if (!empty($name) && !empty($email) && !empty($office_id) && !empty($title) && !empty($story)) {

        $save_sql = "INSERT INTO `tbl_contest` (filename, name, email, office_id, title, story, time) VALUES ('$img_newname','$name','$email','$office_id','$title','$story','$sql_date')";

        $query = mysql_query($save_sql,$con) or die(mysql_error("Could not write information to the database")); 

        if (mysql_num_rows($con) !== 0) { 
        header('Location:' . $uploadSuccess.'#modal-text'); 
        if($user_id) {

          // We have a user ID, so probably a logged in user.
          try {
            $ret_obj = $facebook->api('/me/feed', 'POST',
                                        array(
                                          'link' => $post_link,
                                          'message' => 'Posting with the PHP SDK!'
                                     ));
            echo '<pre>Post ID: ' . $ret_obj['id'] . '</pre>';

            // Give the user a logout link 
            echo '<br /><a href="' . $facebook->getLogoutUrl() . '">logout</a>';
          } catch(FacebookApiException $e) {

            $login_url = $facebook->getLoginUrl( array(
                           'scope' => 'publish_stream'
                           )); 
            echo 'Please <a href="' . $login_url . '">login.</a>';
            error_log($e->getType());
            error_log($e->getMessage());
          }   
        } else {

          // No user, so print a link for the user to login
          $login_url = $facebook->getLoginUrl( array( 'scope' => 'publish_stream' ) );
          echo 'Please <a href="' . $login_url . '">login.</a>';

        } 

        } 

        mysqli_close($con);
    }

我尝试过这样的东西。但它不起作用;

        $post_id = $ret_obj['id'];
        $save_id = "INSERT INTO `tbl_mytable` (post_id) VALUES ('$post_id')";
        $query = mysql_query($save_id,$con) or die(mysql_error("Could not write information to the database"));

2 个答案:

答案 0 :(得分:0)

我认为代码是这样的:

$http_dir = 'http://site.com/Amats/image_entry/';
$post_link = $http_dir . $img_newname;

if (!empty($name) && !empty($email) && !empty($office_id) && !empty($title) && !empty($story)) {

    $save_sql = "INSERT INTO `tbl_contest` (filename, name, email, office_id, title, story, time) VALUES ('$img_newname','$name','$email','$office_id','$title','$story','$sql_date')";

    $query = mysql_query($save_sql,$con) or die(mysql_error("Could not write information to the database")); 

    if (mysql_num_rows($con) !== 0) { 
    header('Location:' . $uploadSuccess.'#modal-text'); 
    if($user_id) {

      // We have a user ID, so probably a logged in user.
      try {
        $ret_obj = $facebook->api('/me/feed', 'POST',
                                    array(
                                      'link' => $post_link,
                                      'message' => 'Posting with the PHP SDK!'
                                 ));
        echo '<pre>Post ID: ' . $ret_obj['id'] . '</pre>';

        //save post_id to MySQL
        $post_id = $ret_obj['id'];
        $save_id = "INSERT INTO `tbl_mytable` (post_id) VALUES ('$post_id')";
        $query = mysql_query($save_id,$con) or die(mysql_error("Could not write information to the database"));
        //save post_id to MySQL

        // Give the user a logout link 
        echo '<br /><a href="' . $facebook->getLogoutUrl() . '">logout</a>';
      } catch(FacebookApiException $e) {

        $login_url = $facebook->getLoginUrl( array(
                       'scope' => 'publish_stream'
                       )); 
        echo 'Please <a href="' . $login_url . '">login.</a>';
        error_log($e->getType());
        error_log($e->getMessage());
      }   
    } else {

      // No user, so print a link for the user to login
      $login_url = $facebook->getLoginUrl( array( 'scope' => 'publish_stream' ) );
      echo 'Please <a href="' . $login_url . '">login.</a>';

    } 

    } 

    mysqli_close($con);
}

您可以创建一些功能来发布FB。 我使用curl发布FB,而不是使用FB PHP SDK。 代码

$arr['token'] = {your token};
$arr['content'] = {content};
$arr['url'] = {share url};

//save post_id to MySQL
$post_id = fb_post($arr);
$save_id = "INSERT INTO `mytable` (fb_id) VALUES ('$post_id')";
$query = mysql_query($save_id,$con) or die(mysql_error("Could not write information to the database"));
//save post_id to MySQL

function fb_post($post){
    $arr['url'] = "https://graph.facebook.com/me/feed/";
    $arr['content'] = array(
        'access_token'=>$post['token'],
        'message' => $post['content'],
        'link' => $post['url']
    );
    $re = fb_post_c($arr);
    $temp = json_decode($re);
    return $temp->id;
}
function fb_post_c($arr){
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $arr['url']);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, 'Expect:');
    curl_setopt($ch, CURLOPT_POSTFIELDS ,http_build_query($arr['content']));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
    $re = curl_exec($ch);
    curl_close($ch);
    return $re;
}

使用fb php sdk

session_start();
require_once 'facebook.php';
$config = array();
$config['appId'] = {your appid};
$config['secret'] = {your secret};

$facebook = new Facebook($config);
$user_id = $facebook->getUser();
if($user_id){
    $_SESSION['token'] = $facebook->getAccessToken();
    $arr['content'] = {content};
    $arr['url'] = {share url};
    $post_id = fb_post_c($arr);
    if($post_id){
        db_in($post_id);
        echo 'your post id' . $post_id;
    }
}else{
    $params = array(
        'scope' => 'publish_stream,user_activities',
        'redirect_uri' => 'http://XXXXXXXXXXX/'
    );
    $facebook->setExtendedAccessToken();
    $loginUrl = $facebook->getLoginUrl($params);
    echo "<a href ='".$loginUrl."'>login</a><br />";
}
function db_in($post_id){
    global $con;//your database ini
    $save_id = "INSERT INTO `mytable` (fb_id) VALUES ('$post_id')";
    $query = mysql_query($save_id,$con) or die(mysql_error("Could not write information to the database"));
}
function fb_post_c($arr){
    global $facebook;
    try {
        $ret_obj = $facebook->api('/me/feed', 'POST',
                    array(
                        'link' => $arr['url'],
                        'message' => $arr['content']
                    ));
        return $ret_obj['id'];
    } catch(FacebookApiException $e) {
        return false;
    }
}

答案 1 :(得分:-1)

我正在尝试做这样的事情

        if (!empty($name) && !empty($email) && !empty($office_id) && !empty($title) && !empty($story)) {

        $save_sql = "INSERT INTO `tbl_contest` (filename, name, email, office_id, title, story, time) VALUES ('$img_newname','$name','$email','$office_id','$title','$story','$sql_date')";

        $query = mysql_query($save_sql,$con) or die(mysql_error("Could not write information to the database")); 

        if (mysql_num_rows($con) !== 0) { 
        header('Location:' . $uploadSuccess.'#modal-text'); 
        if($user_id) {

          // We have a user ID, so probably a logged in user.
          // If not, we'll get an exception, which we handle below.
          try {
            $ret_obj = $facebook->api('/me/feed', 'POST',
                                        array(
                                          'link' => $post_link,
                                          'message' => 'Posting with the PHP SDK!'
                                     ));
            echo '<pre>Post ID: ' . $ret_obj['id'] . '</pre>';

            // Give the user a logout link 
            echo '<br /><a href="' . $facebook->getLogoutUrl() . '">logout</a>';
          } catch(FacebookApiException $e) {
            // If the user is logged out, you can have a 
            // user ID even though the access token is invalid.
            // In this case, we'll get an exception, so we'll
            // just ask the user to login again here.
            $login_url = $facebook->getLoginUrl( array(
                           'scope' => 'publish_stream'
                           )); 
            echo 'Please <a href="' . $login_url . '">login.</a>';
            error_log($e->getType());
            error_log($e->getMessage());
          }   
        } else {

          // No user, so print a link for the user to login
          // To post to a user's wall, we need publish_stream permission
          // We'll use the current URL as the redirect_uri, so we don't
          // need to specify it here.
          $login_url = $facebook->getLoginUrl( array( 'scope' => 'publish_stream' ) );
          echo 'Please <a href="' . $login_url . '">login.</a>';

        } 
        $get_id = $ret_obj['id'];
        $getid_sql = "INSERT INTO `tbl_contest` (post_id) VALUES ('$get_id')";
        $getquery = mysql_query($getid_sql,$con) or die(mysql_error("Could not write information to the database"));
        } 


        mysqli_close($con);
    }

我刚将这3行添加到上一段代码中:

        $get_id = $ret_obj['id'];
        $getid_sql = "INSERT INTO `tbl_contest` (post_id) VALUES ('$get_id')";
        $getquery = mysql_query($getid_sql,$con) or die(mysql_error("Could not write information to the database"));