0

私は最後の3つの投稿をWebページに入れました、ユーザーがログインした場合、彼はコメント/いいねを追加できます、問題は、ユーザーがログインしていいねまたはコメントを追加しようとすると、許可エラー#200が発生します、ログインした場合、私はいいねを追加できますまたはコメント(アプリケーションは私のためです)、ユーザーからすべての許可を取得しているので、どうすれば彼にいいね/コメントを追加する許可を与えることができますか?

コード:

$facebook = new Facebook(array(
            'appId' => '',
            'secret' => '',
            'cookie' => true,
        ));

$user = $facebook->getUser();
if ($user) {  
    if (session_id()) {

    } else {
        session_start();
    }

    $access_token = $facebook->getAccessToken();
    //check permissions list

    $permissions_list = $facebook->api(
            '/me/permissions', 'GET', array(
        'access_token' => $access_token
            )
    );

    //check if the permissions we need have been allowed by the user
    //if not then redirect them again to facebook's permissions page

    $permissions_needed = array('publish_stream', 'read_stream', 'manage_pages');

    foreach ($permissions_needed as $perm) {
        if (!isset($permissions_list['data'][0][$perm]) || $permissions_list['data'][0][$perm] != 1) {
            $login_url_params = array(
                'scope' => 'publish_stream,read_stream,manage_pages',
                 'fbconnect' =>  1,
        'display'   =>  "page",
                'redirect_uri' => 'http://localhost/fb/index.php',
            );
            $login_url = $facebook->getLoginUrl($login_url_params);
            header("Location: {$login_url}");
            exit();
        }
    }
}else {

    //if not, let's redirect to the ALLOW page so we can get access
    //Create a login URL using the Facebook library's getLoginUrl() method

    $login_url_params = array(
        'scope' => 'publish_stream,read_stream,manage_pages',
                'fbconnect' =>  1,
        'display'   =>  "page",
        'redirect_uri'=>'http://localhost/fb/index.php',
    );
    $login_url = $facebook->getLoginUrl($login_url_params);

    //redirect to the login URL on facebook
    header("Location: {$login_url}");
    exit();
}

$logoutUrl = $facebook->getLogoutUrl();

そして、ユーザーが「いいね」ボタンをクリックした場合:

            jQuery('ul.fb_list a').click(function(){

               var comm_id = jQuery(this).attr("class");

                    jQuery.post('https://graph.facebook.com/'+comm_id+'/likes/',{
                        access_token : "<?php echo $access_token ?>"

                    });
            });  
4

1 に答える 1

0

再確認して、変数 comm_id が、投稿を投稿したユーザーのユーザー ID と投稿自体の ID の両方でフォーマットされていることを確認してください。これは、グラフAPIを呼び出した場合にFacebookが提供する方法です

$post_url = "https://graph.facebook.com/" . $user_id . "/posts?access_token=". urlencode($access_token);

別のソースから comm_id を取得しているかどうかは不明です。あなたのコードでも気づいた

access_token : "<?php echo $access_token ?>"

エコー呼び出しの後にセミコロンを忘れました。これのはず

  access_token : "<?php echo $access_token; ?>"

お役に立てれば。同様の機能を実行するために多くのjqueryを使用しているようです。私はこのようなもののためにサーバー側のコードに固執するのが好きです.何らかの理由でより安定していると感じています.

これが私がやった方法です。このようないいねボタンがあります -

echo '<div id="like_container-'.$i.'">
<div id="like_count">'.$num_likes.'</div>'
<a href="javascript:void()" onclick="fb_Like(\''.$post_id.'\',\''.$access_token.'\','.$num_likes.','.$i.')"><div class="unliked"></div></a>
</div>';

fb_Like() は ajax 呼び出しで、次のようなものです -

function fb_Like(post_id, token, num_likes, id){
$.ajax({
type: "GET",
url: "likepost.php",
data: 'id='+post_id+'&token='+token+'&likes='+num_likes,
success: function(html)
{
    $("#like_container-"+id).empty().html(html);

}

});
}

そして、likepost.php ページは、このページのものと同様のスクリプトです。

Graph Api を使用した外部からの Facebook 投稿のようなもの - 例

これは私にとって本当にうまくいきました。また、いいねが行われた場合は、投稿のフロント エンドのいいねボタンのすぐ上にあるいいねの数を更新させてください。幸運を!

アップデート

ユーザーがすでに投稿を気に入っているかどうかを確認したい場合は、facebook グラフ API を使用すると非常に簡単です。

//Create Post Url
$post_url = "https://graph.facebook.com/" . $Page/User_id . "/posts?access_token=". urlencode($access_token);

//Get Json Contents
$resp = file_get_contents($post_url,0,null,null);

//Store Post Entries as Array
$the_posts = json_decode($resp, true);

foreach ($the_posts['data'] as $postdata) {

    foreach ($postdata['likes']['data'] as $like){

        if($like['id']==$user){

        $liked=1;

        }else{continue;}                                                
    }

    if($liked==1){
     //do something
    }

}

これは、ログインしているユーザーの facebook ユーザー ID が既にあることを前提としています。この例では、変数 $user に格納されています。

于 2012-09-26T03:25:20.793 に答える