ユーザーがFacebook PHP SDKを使用して自分のページを好きだったかどうかを判断しますか?

「Facebook」や「like」を検索すると、他のすべての結果が得られるので、私の検索は空になりました。

私は自分の会社のFacebookページにしかないアプリを持っている。そのアプリでは、ユーザーが会社のページを気に入っているかどうかを調べる必要があります。もしそうでなければ私は一つのことを示し、もしそうなら別のことを示します。どうすればFacebook PHP SDK v.3.1.1を使ってこれを行うことができますか?

3
あなたが言及しているものは、「似通ったゲート」と呼ばれています。この前の質問をチェックしてください: stackoverflow.com/questions/5329818/…
追加された 著者 Lix,

5 答え

このようにすることができます:

<?php
    require('facebook.php');
    $config = array(
         'appId' => 'your facebook app id',
         'secret' => 'your facebook app secret code',

        'allowSignedRequest' => false
    );
    $facebook = new Facebook($config);
    $user_id = $facebook->getUser();
    if (isset($user_id)) {
        try {           
            $likes = $facebook->api('/me/likes/your_facebook_page_id_here', 'GET');             

            if (!empty($likes['data']))//if user has liked the page then $likes['data'] wont be empty otherwise it will be empty
            {
                echo 'Thank you for liking our fan page!';                   

            }             
            else {                                       
                 //show something else                   
            }
        } catch (FacebookApiException $e) {
            $login_url = $facebook->getLoginUrl();
            echo 'Please click here to login into your Facebook account.';
            error_log($e->getType());
            error_log($e->getMessage());
        }
    } else {
        $login_url = $facebook->getLoginUrl();
        echo 'Please lick here to login into your Facebook account';
    }
    ?>

ユーザーは、「あなたのFacebookアカウントにログインするにはここをクリックしてください」をクリックします。 Facebookアプリケーション権限ページにリダイレクトするテキスト。ユーザがあなたのアプリへの許可を許可すると、コードはユーザのデータを取得し、ユーザがあなたのファンページを気に入らなかった場合には何を表示するでしょう。

4
追加された

これは、 FQL を使用して行うことができます。また、user_likes権限が設定されていることを確認する必要があります。

私は今オフラインである古いアプリからこの例を引っ張りました。最後のアップデートでFacebookが何を変えたかによって変更する必要があります。最近はjavascriptを使っていて、edge.createイベントを購読しています....あなたのページのIDでpage_idを置き換えて試してみてください

$checkIfUserLikePage =  $facebook->api(array(
    "method"    => "fql.query",
    "query"     => "select uid from page_fan where uid=me() and page_id=1234567"
));
$checkIfUserLikePage = sizeof($checkIfUserLikePage) == 1 ? true : false;
3
追加された
とにかく、最新のAPIでこれ以上動作しないようです。
追加された 著者 Brent Deneau,

This should work for you! I had to do a lot of these types of pages so I created a really simple way of creating like gated pages. https://github.com/DrewDahlman/FBVersion

楽しい!

2
追加された
それはあなたのためにすべてを行い、ちょうど同じようなものとPHPページのようなものがなく、それは残りのことを行います。スクリプトは、ユーザーが現在のタブを好きかどうかを判断します。
追加された 著者 Drew Dahlman,
申し訳ありませんが、あなたの質問を正しく説明していない可能性があります。ここの例 facebook.com/apps/… は非類似のページを表示し、好きなときに同様のページを表示します...
追加された 著者 Drew Dahlman,
ああ、ちょうどhttps版を持っている必要があります、私のアプリはそれを持っていません。ユーザーの中には、プライバシーの設定があり、例のような安全でないアプリを見ることができないものもありますが、その例はあなたが望むものです。 FBアプリの設定でHTTPS verionを有効にするだけです。
追加された 著者 Drew Dahlman,
ありがとうございますが、これはうまくいきません。署名付きリクエストには、好きなページに関するデータは含まれていません。
追加された 著者 Brent Deneau,
いいえ、もう動作しません。とにかく、ありがとう。
追加された 著者 Brent Deneau,
実際には、このリンクでは、セキュリティで保護されたブラウジングがあなたのアプリでサポートされていないという警告が表示され、好きなこともそうでなくても、私はそれをまったく使用できません。
追加された 著者 Brent Deneau,
$signed_request = $_REQUEST['signed_request'];

    function parsePageSignedRequest() {
            if (isset($_REQUEST['signed_request'])) {
                    $encoded_sig = null;
                    $payload = null;
                    list($encoded_sig, $payload) = explode('.', $_REQUEST['signed_request'], 2);
                    $sig = base64_decode(strtr($encoded_sig, '-_', '+/'));
                    $data = json_decode(base64_decode(strtr($payload, '-_', '+/'), true));
                    return $data;
                }
            return false;
            }
        if($signed_request = parsePageSignedRequest()) {
            if($signed_request->page->liked) {

            $this->assign('verify', $signed_request->page->liked);
            } 
            else {
                echo "Please click on the Like button to view our Coupons!";
                jexit();
            }
    } 

私はこれがあなたを助けることを願って:)

1
追加された

古い話題ですが、私は最近、これをどうやって行うのかについて多くのことを学び、実践しなければなりませんでした。

このリンクをご覧ください: http://nickring.com/blog/2012/11/facebook-fan-gate-using-php/をご覧ください。それは $ _REQUEST を介して signed_request 変数を要求する必要がない方法を示しています。

The one main thing to remember is that signed_request is only available when the PHP script accessing signed_request is run within Facebook. If you run this script outside of Facebook in a script attempting to use the Facebook API, it will return an empty array.

次に例を示します。このアドレスに行くと、次のスクリプトが実行されます: https://www.facebook.com/yourFacebookPage/app_xxxxxxxxxxxxxxx と入力し、アプリIDとして 'xxxxxxxxxxxxxxx'を入力します。

// Check if the user has liked us on Facebook, require the Facebook SDK
require_once('linked/facebook/facebook.php');

// Setup the Config
$config = array(
    'appId' => 'xxxxxxxxxxxxxxxxx',
    'secret' => 'yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy',
    'cookie' => true
);

// Create a Facebook SDK instance
$facebook = new Facebook($config);

// Get the signed_request variable that we so desparately need
$signed_request = $facebook->getSignedRequest();
$like_status = $signed_request["page"]["liked"];

// Make sure that it worked
if (!empty($signed_request))
{
   //Get the signed_request information
    if ($like_status == 1)
    {
       //Wo0t! Show the FB fan only page stuff here

    }
    else
    {
       //Show the 'Please like us page'
        $page = file_get_contents('pages/facebookLikeUs.html');

       //Finish the page
        echo $page;
        exit();

    }//End if ($like_status == 1) ELSE Clause and IF

}//End if (!empty($signed_request)) IF Clause
else
{
   //Damn, it didn't work. Show an error
}

上記のスクリプトは、Appの設定の「App on Facebook」セクションのCanvas URLに設定されたURLから呼び出されるスクリプトです。 facebookLikeUs.html ページは、単に「好き」をクリックして続行するように指示するページです。私がFacebookのようなWebサイトにリダイレクトされるようにしたい場合、//Wo0t!セクションを次のように置き換えてください:

   //Wo0t! They're all set, establish some cookies, get a cookie, and redirect back to the PHD program site
    setcookie('fbls', $signed_request['page']['id'] . '-' . $signed_request['user_id'], time() + 300);
    $redirectURL = "http://www.myurl.com/theScriptIWantToReceiveTheUserFromFB.php";

   //Since Facebook really wants to keep us in the page, we need to create a page that will automatically break out of FB
    $page = file_get_contents('pages/facebookRedirectBack.html');

   //Replace some stuff
    $page = str_replace('$redirectURL', $redirectURL, $page);

   //Output the page
    echo $page;
    exit();

facebookRedirectBack.html ページは次のとおりです。

<!DOCTYPE HTML>
<html>
<body>
<script type="text/javascript">
window.top.location.href = '$redirectURL';
</script>
</body>
</html>

これに対してもう少しセキュリティを求めている場合は、リダイレクトするPHPスクリプトにいくつかのCookieを書き込んでURLに添付させて、受信スクリプトがCookieとURLパラメータを比較し、読んだ。

私が個人的にこの主題に関する一貫した情報を見つけていないので、これが助けてくれることを願っています。

0
追加された
PHP - 日本のコミュニティ [ja]
PHP - 日本のコミュニティ [ja]
4 参加者の

このグループではPHPについて話します。 パートナー:kotaeta.com