2012-02-06 8 views
3

「Facebook」と「like」を検索すると、他のすべての結果が得られるため、検索が空になりました。Facebook PHP SDKを使用してユーザーが自分のページを好きだったかどうかを判断しますか?

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

+1

あなたが言及しているのは「類似ゲート」と呼ばれています。この前の質問をチェックしてください:http://stackoverflow.com/questions/5329818/seamless-way-to-check-if-user-likes-page – Lix

答えて

3

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

このサンプルをオフラインになっている古いアプリから引き出しましたが、最後の更新でFacebookが変更した内容に応じて変更する必要があります。最近、私はJavaScriptを使用してきたと私はちょうどあなたのページの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; 
+0

これは、最新のAPIでもう機能していないようです。どうもありがとうございます。 –

2

を試しを与える.... edge.createイベントにサブスクライブ!これらの種類のページをたくさん作成しなければならなかったので、ゲーテッドページのような簡単な作成方法を作成しました。 https://github.com/DrewDahlman/FBVersion

お楽しみください!

+0

ありがとうございますが、これはうまくいきません。署名付きリクエストには、好きなページに関するデータは含まれていません。 –

+0

それはあなたのためにすべてを行い、ちょうど好きで、PHPページのようにはありません、それは残りを行います。スクリプトは、ユーザーが現在のタブを好きかどうかを判断します。 –

+1

いいえ、もう動作しません。とにかく、ありがとう。 –

1
$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(); 
      } 
    } 

私は、これはあなたが

0

古いトピックを:)役立つことを願っていますが、私は最近、これを行う方法について多くのことを学びましたし、実際にそれを置くために持っていたようで重量を量るしたかったです。

http://nickring.com/blog/2012/11/facebook-fan-gate-using-php/をご覧ください。他の応答の一部として表示される変数signed_requestを使用しますが、$_REQUESTを介して変数signed_requestを要求する必要がない方法を示しています。

signed_requestは、signed_requestにアクセスするPHPスクリプトがFacebook内で実行されている場合にのみ利用可能です。 Facebook APIを使用しようとしているスクリプトでFacebook外でこのスクリプトを実行すると、空の配列が返されます。

この例では、このアドレスに行くと次のスクリプトが実行されます:https://www.facebook.com/yourFacebookPage/app_xxxxxxxxxxxxxxx「xxxxxxxxxxxxxxx」がアプリIDです。

// 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 
} 

上記のスクリプトは、アプリの設定の「アプリケーションのFacebook上の」セクションのキャンバスURLに設定されたURLから呼び出されるスクリプトです。 facebookLikeUs.htmlページは、単に「好き」をクリックして続行するように要求するページです。

facebookRedirectBack.htmlページが、このことで

// 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(); 

:私は、私は彼らが戻って私は単にこのような何かを持つ// Wo0t!部分を置き換えるようにFacebookのを必要とし、ウェブサイトにリダイレクトするような状況にいる場合

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

セキュリティを少し強化したい場合は、リダイレクトするPHPスクリプトにいくつかのCookieを書き込んで、URLに添付して、受信スクリプトがCookieとURLパラメータを比較して削除する必要があります彼らが読んだ後のクッキー。

私は個人的にこの件に関する一貫した情報を見つけられていないので、これが役に立ちます。

4

それはこの方法を行うことができます。

<?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 '<a href="' . $login_url . '">Please click here to login into your Facebook account.</a>'; 
      error_log($e->getType()); 
      error_log($e->getMessage()); 
     } 
    } else { 
     $login_url = $facebook->getLoginUrl(); 
     echo '<a href="' . $login_url . '">Please lick here to login into your Facebook account</a>'; 
    } 
    ?> 

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

関連する問題