获取页面内容和json_decode加载问题

时间:2011-05-31 22:34:52

标签: php json facebook

我有以下代码调用facebook的开放图并返回一个包含share和id的对象。唯一的问题是我正在拨打这个电话30次,加载时间超过9秒。是否有更简单的方法来直接达到目的,只是获得股票,这样加载更快?

//facebook
$fdata = file_get_contents('http://graph.facebook.com/http://theoatmeal.com/comics/127_hours');
$fdata = json_decode($fdata);
if($fdata->shares) {
    $share_count['facebook'] = $fdata->shares;
}

3 个答案:

答案 0 :(得分:1)

这是我用于graph.facebook.com

的解码
 <?php
 $info = "http://theoatmeal.com/comics/127_hours";
 $url = "http://graph.facebook.com/". $info . "";
$geturl = file_get_contents($url);
$info = json_decode($geturl);
{
$id = $info->id;
$shares = mysql_real_escape_string($info->shares);
?>
<?php echo $id;?><br>
<?php echo $shares; 
}
?>

答案 1 :(得分:0)

一个好的简单方法是使用Facebook PHP SDK(see on github)。首先,您必须确保用户已登录:

require "facebook.php";
$facebook = new Facebook(array(
    'appId'  => YOUR_APP_ID,
    'secret' => YOUR_APP_SECRET,
));

$user = $facebook->getUser();

if ($user) {
    try {
        $user_profile = $facebook->api('/me');
    } catch (FacebookApiException $e) {
        $user = null;
    }
}

如果他已登录,您可以进行API调用:

$result = $facebook->api(...);

如果他不是,你必须让他登录:

<?php if ($user): ?>
    <a href="<?php echo $facebook->getLogoutUrl() ?>">Logout of Facebook</a>
<?php else: ?>
    <a href="<?php echo $facebook->getLogoutUrl() ?>">Login with Facebook</a>
<?php endif ?>

希望有所帮助!

答案 2 :(得分:0)

我第一次不太清楚你的问题所以我试着再拍一次。

您可以使用FQL进行查询:

$fql = 'SELECT total_count FROM link_stat WHERE url="http://google.com"';
$json = file_get_contents('https://api.facebook.com/method/fql.query?format=json&query=' . urlencode($fql));
$data = json_decode($json);
echo $data[0]->total_count;

此处,total_count为您提供链接的份额数。

如果您有多个要查询的网址,则可以使用OR在一个查询中完成所有这些操作:

SELECT url, total_count FROM link_stat WHERE url="..." OR url="..."

以下是一个示例,您希望获得4个网址的份额数:

$urls = array(
    "http://google.com",
    "http://twitter.com",
    "http://stackoverflow.com",
    "http://linkedin.com"
);

function wrap($url) {
    return 'url="' . $url . '"';
}

$fql = 'SELECT url, total_count FROM link_stat WHERE ';
$fql .= implode(" OR ", array_map("wrap", $urls));

$json = file_get_contents('https://api.facebook.com/method/fql.query?format=json&query=' . urlencode($fql));
$data = json_decode($json);

$data是一个包含4个对象的数组,每个URL都有一个共享编号:

array(4) {
  [0]=> object(stdClass)#2 (2) {
    ["url"]=> string(17) "http://google.com"
    ["total_count"]=> int(1318598)
  }
  [1] => ...
  [2] => ...
  [3] => ...
}

希望有所帮助!