web-dev-qa-db-ja.com

PHP SDKを使用して、ページの最新のFacebook投稿を取得します

次のコードは、facebook_posts.phpというファイル内にあります。このファイルは、インデックスファイルから<?php require_once("http://www.example.com/design/php/facebook_posts.php"); ?>のように呼び出します。ただし、このコードが配置されている場所には応答がありません。したがって、成功もキャッチエラーもエラーを返しません(私が見る限り)。絶対URLを試しましたが、うまくいきませんでした。 (私はapiとページ情報を隠しました。)どうやらrequire_once(フッターとスクリプト)に続くコンテンツがロードされていません。 SDKをインクルードすると、何かがうまくいかないようです。

私はcomposerを使用していません。requireFacebook\ファイルまたはuseそれら?また、ページから投稿を取得するために必要なものはどれですか。

<?php
// Defining FB SDK with absolute paths
define('FACEBOOK_SDK_V4_SRC_DIR', 'http://example.com/design/Facebook/');
require 'http://example.com/design/php/autoload.php';

use Facebook\FacebookSession;
use Facebook\FacebookRequest;
use Facebook\GraphUser;
use Facebook\FacebookRequestException;

FacebookSession::setDefaultApplication('{my-app-id}','{my-app-secret}');

$session = new FacebookSession('{my-long-lived-access-token}');

// Get the GraphUser object for the current user:

try {
$request = new FacebookRequest(
  $session,
  'GET',
  '/{my-page-id}/feed'
);
$response = $request->execute();
$graphObject = $response->getGraphObject();

var_dump($graphObject);
echo graphObject;
echo "banana";

} catch (FacebookRequestException $e) {
  echo "API ERROR";
} catch (\Exception $e) {
  echo "other error";
}

?>

編集:だから私はちょうど 必須 すべてのFBファイル、そしてそれはうまくいくようです。ただし、返されるオブジェクトをトラバース/反復する方法がわかりません。つまりさまざまな投稿(ページの最新の4つの投稿)をループしてHTMLにエコーする方法。基本構造は次のようになります。

<time>{publish date}</time>
<p>{post message}</p>
<a href="{link to included url}">{title to included url}</a>
10
Bram Vanroy

存続期間の長いページアクセストークンを使用する必要があります。

ページアクセストークン

これらのアクセストークンは、Facebookページに属するデータの読み取り、書き込み、または変更を行うAPIへのアクセス許可を提供することを除いて、ユーザーアクセストークンに似ています。ページアクセストークンを取得するには、まずユーザーアクセストークンを取得して、manage_pages権限を要求する必要があります。ユーザーアクセストークンを取得したら、Graph APIを介してページアクセストークンを取得します。

@CBroeが言ったように、そのアクセストークンは秘密/プライベートであり、誰にも取得させたくないので、クライアント側コードで使用しないでください。

したがって、何をしたいのかについては、JavaScriptは適切な選択ではありません。 PHPのようないくつかのサーバー側コードを使用する必要がありますPythonまたはRuby投稿を取得するには。それを作成します。


  1. Facebookアプリを作成します。

    • アプリID(1)とアプリシークレット(2)は別にしてください、
    • 「詳細」設定では、_The application has disabled OAuth client flow_を回避するためにOAuthを有効にします。
  2. ユーザーアクセストークンを作成する必要があります。

    • Graph API Explorer に移動し、作成したアプリケーションを選択します。
    • アクセストークンを生成します。[アクセストークンを取得]をクリックし、[拡張アクセス権]タブで_manage_pages_にチェックマークを付けます。
  3. 短期間のページアクセストークンを取得

    • 引き続きGraph API Explorerで、クエリ_me/accounts_(GET)、
    • ページを見つけて、そのアクセストークンを取得します(3)
  4. 存続期間の長いページアクセストークンを取得

    • ブラウザで、https://graph.facebook.com/oauth/access_token?client_id=(1)&client_secret=(2)&grant_type=fb_exchange_token&fb_exchange_token=(3)をアドレスバーに貼り付け、
    • (1)(2)および(3)アプリID、アプリシークレット、ページアクセストークンごとに、
    • 結果から新しい長期アクセストークンを取得します:_access_token=FAKECAALBygJ4juoBAJyb8Cbq9bvwPYQwIaX53fLTMAWZCmDan1netI30khjITZAqcw9uE0lRT4ayWGm2ZCS7s7aZCVhF3ei6m0fuy2AkTkwmzUiJI4NUOZAyZAzuL_、
    • アクセストークンデバッガー を使用して、アクセストークンが無期限になることを確認します。

これで、その新しいアクセストークンを使用して、ページの投稿を取得できます。

_$session = new FacebookSession('FAKECAALBygJ4juoBAJyb8Cbq9bvwPYQwIaX53fLTMAWZCmDan1netI30khjITZAqcw9uE0lRT4ayWGm2ZCS7s7aZCVhF3ei6m0fuy2AkTkwmzUiJI4NUOZAyZAzuL');

try {
    $data = (new FacebookRequest(
        $session, 'GET', '/me/posts'
    ))->execute()->getGraphObject()->getPropertyAsArray("data");

    foreach ($data as $post){
        $postId = $post->getProperty('id');
        $postMessage = $post->getProperty('message');
        print "$postId - $postMessage <br />";
    }
} catch (FacebookRequestException $e) {
    // The Graph API returned an error
} catch (\Exception $e) {
    // Some other error occurred
}
_
21

最も投票されたソリューションは非常に複雑で、2か月しか続かないことがわかりました。

私にとって、これはグラフAPI 2.5のアプリを使用する最良のソリューションです。

1.-アプリを作成します。

2.-移動: https://developers.facebook.com/tools/Explorer/

  • 右上で新しく作成したアプリを選択します。
  • 「アプリトークンを取得」を選択します

3.-この「{ACCESS-TOKEN}」をコピーします(形式:番号|ハッシュ)

重要:(これはapp_id | app_secretではありません!!!)

4.- CURLを使用してURLをクエリします。

(5).-同等のURL:

これらすべてを非常にシンプルなGistにまとめました。

https://Gist.github.com/biojazzard/740551af0455c528f8a9

19
biojazzard
  1. アプリを作成 開発者Facebookページ

次に、コード例をコーディングします。

<ul>
<?php

$page_name = '{PAGE_NAME}'; // Example: http://facebook.com/{PAGE_NAME}
$page_id = '{PAGE_ID}'; // can get form Facebook page settings
$app_id = '{APP_ID}'; // can get form Developer Facebook Page
$app_secret = '{APP_SECRET}'; // can get form Developer Facebook Page
$limit = 5;

function load_face_posts($page_id, $page_name, $app_id, $app_secret, $limit, $message_len) {
    $access_token = "https://graph.facebook.com/oauth/access_token?client_id=$app_id&client_secret=$app_secret&grant_type=client_credentials";
    $access_token = file_get_contents($access_token); // returns 'accesstoken=APP_TOKEN|APP_SECRET'
    $access_token = str_replace('access_token=', '', $access_token);
    $limit = 5;
    $data  = file_get_contents("https://graph.facebook.com/$page_name/posts?limit=$limit&access_token=$access_token");
    $data = json_decode($data, true);
    $posts = $data[data];
    //echo sizeof($posts);

    for($i=0; $i<sizeof($posts); $i++) {
        //echo $posts[$i][id];
        $link_id = str_replace($page_id."_", '', $posts[$i][id]);
        $message = $posts[$i][message];

        echo ($i+1).". <a target='_blank' href='https://www.facebook.com/AqualinkMMC/posts/".$link_id."'>".$message."</a><br>";
    }
}

load_face_posts($page_id, $page_name, $app_id, $app_secret, $limit, $message_len);
?>
</ul>
2
Ramin Darvishov

facebookフィードから最新の投稿を取得するために必要なものはすべてここで説明されています。 http://piotrpasich.com/facebook-fanpage-feed/

ショートカット-ファンページフィードを使用します({id}を適切なIDに置き換えてください)

https://facebook.com/feeds/page.php?format=atom10&id= {id}

次のコードでフィードをダウンロードできます。

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $rss_url);
curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.0.3705; .NET CLR 1.1.4322; Media Center PC 4.0)');
curl_setopt($curl, CURLOPT_REFERER, '');
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_TIMEOUT, 10);
$raw_xml = curl_exec($curl); // execute the curl command
0
Piotr Pasich