2013-03-14 44 views
0

我想從Facebook頁面中提取事件到官方網站,並與圖表和oauth進行鬥爭以獲取信息。如何從Facebook頁面提取事件頁面

簡化的代碼,相位1 & 2中相同的代碼:

<?php 
$app_id = '...........4639'; 
$app_secret = '7547xxxxxxxxxxxxxxxxxxxxxxxx'; 

if (isset($_GET['code'])) { 
    //stage 2 
    $state = $_GET['state']; 
    $code = $_GET['code']; 
    //the code doesn't work. If I use graph api explorer to get key, I'm all fine. 
    //the code here from graph api explorer. 
    //$code = 'AAAIERWeZCHZxxxxxxxxxxxxxxxxxxxxx'; 
    $s = "https://graph.facebook.com/_PAGE_ID?fields=feed.fields(story,message,picture)&access_token=" . $code; 
    $json = file_get_contents($s); 
    die($json); 

} else { 
    //stage 1 
    $my_url = 'http://www.myself.com/fb/index.php'; 
    $_SESSION['state'] = md5(uniqid(rand(), TRUE)); // CSRF protection 
    $dialog_url = "https://www.facebook.com/dialog/oauth?client_id=" . 
    $app_id . "&redirect_uri=" . urlencode($my_url) . "&state=" . $_SESSION['state']; 
    //now redirect to myself - phase2 
    header("Location: " . $dialog_url); 
    exit(); 
} 
+0

是的,你需要一個應用程序。要訪問信息,請獲取頁面訪問令牌:https://developers.facebook.com/docs/howtos/login/login-as-page/ – CBroe 2013-03-14 12:51:27

+0

@CBroe,感謝您的提示。請進一步協助,我很無能... – Teson 2013-03-14 14:57:05

+0

如果您想要具體的信息,請提出具體問題。 – CBroe 2013-03-14 14:59:31

回答

0

在任何情況下,在位於同一煩惱:

的file_get_contents似乎不應對令牌請求。以下代碼有效。

<?php 
    function curlRequest($url) { 
    $ch = curl_init(); 
    $useragent="Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1"; 
    curl_setopt($ch, CURLOPT_USERAGENT, $useragent); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
    $timeout = 5; 
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); 
    $data = curl_exec($ch); 
    curl_close($ch); 
    return $data; 
    } 


$app_id = '................'; 
$app_secret = '..................................'; 
$my_url = 'http://www.memyself.andi/me.php'; 

session_start(); 

$code = $_REQUEST["code"]; 
if(empty($code)) { 
    // Redirect to Login Dialog 
    $_SESSION['state'] = md5(uniqid(rand(), TRUE)); // CSRF protection 
    $dialog_url = "https://www.facebook.com/dialog/oauth?client_id=" 
     . $app_id . "&redirect_uri=" . urlencode($my_url) . "&state=" 
     . urlencode($_SESSION['state']) . "&scope=user_birthday,read_stream"; 
    header("Location: " . $dialog_url); 

} 

    if($_SESSION['state'] && ($_SESSION['state'] === $_REQUEST['state'])) { 
    $token_url = 'https://graph.facebook.com/oauth/access_token?client_id=' . 
     $app_id . '&redirect_uri=' . urlencode($my_url) . 
     '&client_secret=' . $app_secret . '&code=' . urlencode($code); 
    //die($token_url); 
    $response = curlRequest($token_url); 
    //bummer - this won't work (php 5.3/ubuntu) 
    //$response = file_get_contents($token_url); 
    $params = null; 
    parse_str($response, $params); 

    $_SESSION['access_token'] = $params['access_token']; 

    $graph_url = "https://graph.facebook.com/_THE_PAGE_ID/feed?access_token=" 
     . $params['access_token']; 

    $json = json_decode(file_get_contents($graph_url)); 
    echo serialize($json); 
    } 
    else { 
    echo("The state does not match. You may be a victim of CSRF."); 
    }