Facebook喜欢计数自动刷新

时间:2012-09-29 01:09:00

标签: php facebook json api

我是使用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工作(一旦我正确设置了这个位,我会担心重新加载)。我只是想为了简单的缘故抓住类似的数量而且我将从那里建造。这是我的代码(我使用'cocacola'作为示例;虚荣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并尝试在另一个函数中调用有关?谢谢你的帮助!

1 个答案:

答案 0 :(得分: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>

每10秒检查checkFacebook.php一次。如果它返回namelikes属性,则会自动更新它们。现在我们需要实际构建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两次请求相同的信息:)