2013-03-14 97 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."); 
    }