1

我是使用 Facebook API 的新手,我有一个我认为应该很简单的问题。

我正在为将显示网页的商店设置电视屏幕。在页面上,我将显示商店 Facebook 页面的当前“点赞数”。我知道如何设置它以显示喜欢,但是有没有一种简单的方法可以在新人喜欢页面而不刷新整个页面时自动刷新数字。我想我正在寻找它是动态生成的。我不知道该怎么做。我愿意做研究,我只需要指出正确的方向。

到目前为止,这是页面正文中的代码:

<?php
function fan_count($fan_ID) {
$info = json_decode(file_get_contents('http://graph.facebook.com/' . $fan_ID));
echo $info->likes;
}

function fan_name($fan_ID) {
$info = json_decode(file_get_contents('http://graph.facebook.com/' . $fan_ID));
echo $info->name;
}
?>

<div style="width:100px; height:100px; border:1px solid black;">
    Facebook Logo
</div>
<div class="fb_stats" id="fb_name">
    <?php fan_name(PAGE_ID)?>
</div>
<div class="fb_stats" id="fb_likes">
    <?php fan_count(PAGE_ID)?>
</div>

感谢您的任何帮助,您可以提供!

编辑

好的,这是我根据以下答案更新的代码。我无法让主页上的 PHP 工作(一旦我正确设置了这个位,我会担心重新加载)。为了简单起见,我只是想抓住点赞数,然后我会从那里开始构建。这是我的代码(我以“可口可乐”为例;虚荣 URL 与 Facebook 图表兼容):

<?php
class fanpage {
public $fan_ID;
public $info;

function __construct($fan_ID) {
    $this->fan_ID = $fan_ID;
    $this->info = json_decode(file_get_contents('http://graph.facebook.com/' . $fan_ID));
  }

function fan_count() {
   echo $info->likes;
  }
}

$fp = new fanpage(cocacola);
?>

<div style="width:100px; height:100px; border:1px solid black;">
    Facebook Logo
</div>
<div class="fb_stats" id="fb_likes">
    <?php $fp->fan_count()?>
    <span style="font-size:20px; position:absolute; top:400px;">Total Likes</span>
</div>

它可能与 $info 在一个函数中定义并试图在另一个函数中调用有关吗?谢谢您的帮助!

4

1 回答 1

3

刚刚更新了下面的一些代码!


fanpage.php

class fanpage {
  public $fan_ID;
  public $info;

  function __construct($fan_ID = null) {
    $this->fan_ID = $fan_ID;
    $this->info = json_decode(file_get_contents('http://graph.facebook.com/' . $fan_ID));
  }

  function fan_count() {
    return $info->likes;
  }

  function fan_name() {
    return $info->name;
  }
}

page.php

<?php
include('fanpage.php');
$fp = new fanpage(PAGE_ID);
?>

<div style="width:100px; height:100px; border:1px solid black;">
    Facebook Logo
</div>
<div class="fb_stats" id="fb_name">
    <?php echo $fp->fan_name()?>
</div>
<div class="fb_stats" id="fb_likes">
    <?php echo $fp->fan_count()?>
</div>

<script type="text/javascript>
var delay = 10000; //10000 = 10 seconds
var fbint = window.setInterval(checkFacebook, delay);

function checkFacebook(){
  $.getJSON('checkFacebook.php?callback=?', {fan_ID: '$fan_ID'}, function(rs){
    if (rs.name) $('#fb_name').text(rs.name);
    if (rs.likes) $('#fb_likes').text(rs.likes);
  });
}
</script>

checkFacebook.php

include('fanpage.php');

$fan_ID = (int) $_GET['fan_ID'];
$fp = new fanpage($fan_ID);

$data = (object) array('likes' => $fb->likes, 'name' => $fb->name); //sloppy object
$callback = $_GET['callback']; //sanitize this

print $callback . '(' . json_encode($data) . ')';
exit;

下面老东西


你熟悉很多 JavaScript 或 jQuery 吗?这是一个简短的 jQuery 示例,应该可以正常工作。

假设上面的片段来自page.php. 包括 jQuery 并在其下方添加:

<script type="text/javascript>
var delay = 10000; //10000 = 10 seconds
var fbint = window.setInterval(checkFacebook, delay);

function checkFacebook(){
  $.getJSON('checkFacebook.php?callback=?', function(rs){
    if (rs.name) $('#fb_name').text(rs.name);
    if (rs.likes) $('#fb_likes').text(rs.likes);
  });
}
</script>

checkFacebook.php这每 10 秒检查一次。如果它得到一个nameorlikes属性,它将自动更新它们。现在我们需要实际构建checkFacebook.php页面!

//do all your normal config stuff here
$info = json_decode(file_get_contents('http://graph.facebook.com/' . $fan_ID));

$data = (object) array('likes' => $info->likes, 'name' => $info->name); //sloppy object
$callback = $_GET['callback']; //sanitize this

print $callback . '(' . json_encode($data) . ')';
exit;

还有一件事!您在顶部的功能工作正常,但您通过发送完全相同的请求两次浪费了大量时间。您可以从同一个地方提取两条信息,那么为什么不这样做呢?

<?php
class fanpage {
  public $fan_ID;
  public $info;

  function __construct($fan_ID = null) {
    $this->fan_ID = $fan_ID;
    $this->info = json_decode(file_get_contents('http://graph.facebook.com/' . $fan_ID));
  }

  function fan_count() {
    return $info->likes;
  }

  function fan_name() {
    return $info->name;
  }
}

$fp = new fanpage(PAGE_ID);
?>

<div style="width:100px; height:100px; border:1px solid black;">
    Facebook Logo
</div>
<div class="fb_stats" id="fb_name">
    <?php echo $fp->fan_name()?>
</div>
<div class="fb_stats" id="fb_likes">
    <?php echo $fp->fan_count()?>
</div>

这样,您的服务器就不必两次调用 Facebook 来请求相同的信息 :)

于 2012-09-29T04:38:18.203 回答