7

私が最初に使用してきたアプローチは次のとおりです。

http_head('http://www.facebook.com/pages/Test/' . $input['fb_page_id'] . '?sk=app_' . $input['fb_id']), 'HTTP/1.1 301 Moved Permanently')

このアプローチの問題は次のとおりです。

  1. ページがまったく存在しない場合、Facebookは(例)200ではなくヘッダーを返します。404http://www.facebook.com/pages/Test/DominosPizza?sk=app_311706258843058
  2. ページにユーザー名がある場合、このリクエストはレスポンス301レスポンスを返します。

<div data-page="130414917005937" data-app="299770086775725"></div>ポートフォリオ内のすべてのインスタンスをときどき通過するスクリプトを作成しています。次に、アプリがまだページ上にあるかどうかを確認します。アプリがページ上にある場合はリンクが提供されますが、そうでない場合はタグはそのままにしておきます。

アクセストークンを必要としないソリューションを探しています。

4

4 に答える 4

7

Facebookページにアプリがインストールされているかどうかを確認する公式の方法は次のとおりです。

http://developers.facebook.com/docs/reference/api/page/を参照してください

アプリのインストールのテスト

にHTTPGETを発行することで、特定のアプリがページプロファイルタブにインストールされているかどうかをテストできますPAGE_ID/tabs/APP_ID

このリクエストはすべてのAPP_IDに対して機能し、アプリがページにインストールされている場合は上記のフィールドを返します。アプリがページにインストールされていない場合、このリクエストは空のdata[]配列を返します。

アプリアクセストークンを使用して、これと同じクエリを発行することもできます。この場合、任意のPAGE_IDを照会できます。指定したページにアプリがインストールされている場合は、上記のフィールドが返されます。指定したページにアプリがインストールされていない場合は、通常どおり空のdata[]配列が返されます。

つまり、これは単純なHTTPGETです。http://graph.facebook.com/PAGE_ID/tabs/APP_ID

于 2012-05-14T23:26:56.727 に答える
2

FacebookがURLスキームを変更しない限り、これは機能します。

このメソッドはHEAD、ではなくリクエストを発行することに注意してくださいGET。したがって、コンテンツはダウンロードされません。これがどのように/なぜ機能するかについての詳細な説明については、http://anuary.com/47/keeping-facebook-portfolio-up-to-dateを参照してください

ページのプライバシー設定で認証されていないユーザーが制限されている場合、これを機能させるには、偽のユーザー認証を行う必要があることに注意してください。

$fn_is_app_on_page  = function($page_id, $app_id)
{
    $ch         = curl_init();

    curl_setopt_array($ch,
    [
        CURLOPT_USERAGENT       => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_0) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11',
        CURLOPT_URL             => 'https://www.facebook.com/pages/anuary/' . $page_id . '?sk=app_' . $app_id,
        CURLOPT_FOLLOWLOCATION  => TRUE,
        CURLOPT_HEADER          => FALSE,
        CURLOPT_NOBODY          => TRUE
    ]);

    $response   = curl_exec($ch);

    $info       = curl_getinfo($ch);

    curl_close($ch);

    if($info['http_code'] == '404')
    {
        return FALSE;
    }

    if(strpos($info['url'], (string) $app_id) !== FALSE)
    {
        return TRUE;
    }

    return FALSE;
};

$fn_is_app_on_page(130414917005937, 299770086775725); // TRUE
$fn_is_app_on_page(1, 299770086775725); // FALSE
$fn_is_app_on_page(130414917005937, 1); // FALSE
于 2012-07-28T07:52:02.417 に答える
2

要求しているページのhttp応答を調べて、文字列を検索できますpagelet_app_APPID(APPIDは実際のアプリケーションIDです)。

要求されたページが実際にはタブアプリケーションでない場合、この文字列はページに存在しないため、これは問題1に対処します。

問題2に対応して、301が発生した場合は、リダイレクトに従い、リダイレクトされたページの応答でこの文字列を検索します。

2012年10月29日編集

この問題についてもう少し詳しく調べました。最初のページが匿名ユーザーに利用できない理由。これは、ページ管理者によって設定されたいくつかの権限制限によるものです。これらの制限のために、Facebookはページが表示される前にユーザーに認証を要求しています。cURLを使用すると、Facebookはこのリクエストを匿名ユーザーと見なし、リクエストをログインページにリダイレクトします。2番目のアプリにはこの問題はありません。

これを解決するには、ブラウザを使用してログインした後、FacebookのCookieを調べて、cURLリクエストの一部として送信することをお勧めします。

于 2012-10-25T07:53:48.427 に答える
-4

次のコードは、アプリがFacebookページから読み込まれたかどうかを確認するのに役立ちます。

<script>
  $(document).ready(function(){
    var isInIFrame = (window.location != window.parent.location) ? true : false;
    if (isInIFrame == true){
        //enter your code here
    }

});

</script>
于 2012-08-02T08:49:41.423 に答える