0

私のページのステータス数を表示することを目的とした最新の Facebook PHP SDK を使用して、非常に単純な PHP アプリを作成しています。

そのために、アプリIDとアプリシークレットを持つアプリを作成しましたが、ちょっと迷った後です。

アプリシークレットトークンが必要だと思ったので、最初に次のように試しました:

<?php
public function getFacebookPosts() {
    require __DIR__ . '/libs/facebook-sdk/facebook.php';

    $appId = 'myID';
    $appSecret = 'mySecret';

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

    $token = $this->getFacebookAppToken($appId, $appSecret);

    try {
        $jinnove = $facebook->api('/my.page');
        $fql = '/fql?q=SELECT+status_id+FROM+status+WHERE+uid=' . $jinnove['id'] . '&' . $token;
        var_dump($facebook->api($fql));
    } catch(FacebookApiException $e) {
        var_dump($fql, $e);
    }
}

/**
 * Function to Get Access Token from Facebook
 * @param $appId
 * @param $appSecret
 * @return string
 */
protected function getFacebookAppToken($appId, $appSecret)
{
    $args = array(
        'grant_type' => 'client_credentials',
        'client_id' => $appId,
        'client_secret' => $appSecret
    );

    $ch = curl_init();
    $url = 'https://graph.facebook.com/oauth/access_token';
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $args);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    $data = curl_exec($ch);

    return $data;
}

しかし、次のメッセージとともにエラー 102 が返されます:「このリソースを要求するには、ユーザー アクセス トークンが必要です。」

そこで IRC で質問したところ、そのためにはユーザー アクセス トークンが必要だという人がいました。

私が理解したことのうち、ユーザーアクセストークンは、ユーザーが明示的にFacebookにログインしてこのアプリを承認し、トークンを時々更新する場合にのみ生成できます。

本当?ユーザーがログに記録されることを意味しないトークンを使用する方法はありませんか? 基本的に、この数のステータスは誰でも見ることができます。Facebook アカウントを持っていない人でも、UI ダイアログがまったく必要ありません。

4

1 に答える 1

0

何らかの理由で、Facebook は、ステータスのクエリはユーザーのみが行うことができると判断しました。

これを回避するには、テーブルにクエリを実行し、ステータスの更新である を含むstream投稿のみを返します。type = 46

SELECT post_id FROM stream WHERE source_id= YOUR_PAGE_ID AND type = 46 LIMIT 100

streamテーブルには多くの制限があります。が高くてもLIMIT、ページがしばらく存在していると、すべてのステータス更新を取得できない場合があります。

次の変更により、API 呼び出しの数を 3 から 1 に削減することで、プログラムを高速化することもできます。

  • ユーザー名からページの ID を取得する場合= YOUR_PAGE_IDは、上記のクエリを次のように置き換えます。IN (SELECT id FROM profile WHERE username = 'YOUR_PAGE_USERNAME')
  • 「getFacebookAppToken()」関数は必要ありません。認証済みのユーザーがいない場合、PHP SDK はアプリ アクセス トークンを自動的に取得します。
于 2013-04-08T13:15:23.787 に答える