【问题标题】:How do I create a Like on an image using Facebook's Graph API如何使用 Facebook 的 Graph API 在图像上创建点赞
【发布时间】:2013-07-10 15:19:15
【问题描述】:

我正在尝试为客户嵌入 Facebook 相册,这是我第一次使用 Facebook Graph API,我有点迷茫。我设法使用此代码获取图像(我承认这很丑陋,但现在我只是想让它工作):

<?
    $facebook_album = file_get_contents('https://graph.facebook.com/486769464721177/photos');
    $dataArr = json_decode($facebook_album,true);
    foreach($dataArr['data'] as $d){ 
        echo "<a href=".$d['link']." target='_blank'><img src=\"".$d['source']."\"></a>";
    }
?>

现在的问题是,我的客户希望他的访问者能够单独喜欢这些图像。我想过在 foreach 循环中使用类似的按钮:

<div class="fb-like" data-href="<? print $d['link']?>" data-send="false" data-layout="button_count" data-show-faces="false"></div>

但它不起作用,而图像上链接的 $d['link'] 工作得很好。 任何人都可以帮忙吗?我读到可以使用 Open Graph 在这些对象上发布一个赞,但我不知道如何在 PHP 中继续这样做。

非常感谢您的帮助!


所以,我在这里阅读了很多与我的问题相关的问题,也阅读了 facebook 的开发者文档。

我想出了一些可以开始工作但仍然很笨拙的方法。

这是我所有的 PHP :

<?
        require_once("php-sdk/src/facebook.php");

        $config = array();
        $config['appId'] = '##MyAppID##';
        $config['secret'] = '##MyAppSecret##';

        $facebook = new Facebook($config);
        $user_id=$facebook->getUser();
        if($facebook->getUser()) {
          // We have a user ID, so probably a logged in user.
          // If not, we'll get an exception, which we handle below.
          try {
            $access_token = $facebook->getAccessToken();
            echo '<br /><a href="' . $facebook->getLogoutUrl() . '">logout</a>';
          } catch(FacebookApiException $e) {
            // If the user is logged out, you can have a 
            // user ID even though the access token is invalid.
            // In this case, we'll get an exception, so we'll
            // just ask the user to login again here.
            $login_url = $facebook->getLoginUrl( array(
                           'scope' => 'publish_stream'
                           )); 
            echo 'Please <a href="' . $login_url . '">login.</a>';
            error_log($e->getType());
            error_log($e->getMessage());
          }   
        } else {

          // No user, so print a link for the user to login
          // To post to a user's wall, we need publish_stream permission
          // We'll use the current URL as the redirect_uri, so we don't
          // need to specify it here.
          $login_url = $facebook->getLoginUrl( array( 'scope' => 'publish_stream' ) );
          echo 'Please <a href="' . $login_url . '">login.</a>';

        }

        $facebook_album = $facebook -> api('486769464721177/photos');
        foreach($facebook_album['data'] as $d){ 
            ?>
            <div style="float:left;"><?  
            echo "<a href=".$d['link']." target='_blank'><img src=\"".$d['source']."\"></a>";
            echo count($d['likes']);
            ?><button><a href="https://graph.facebook.com/me/og.likes?<?print ('access_token='.$access_token.'&method=POST&object='.$d['link']);?>?>">J'aime</a></button><?



            </div>
            <?
        }
    ?>

如您所见,我现在要求用户使用我创建的应用程序登录以获得“publish_actions”授权和访问令牌。我现在有两个问题:第一,关于登录。如果您完全退出 Facebook,则可以正常登录。但是如果你已经登录了,有一个注销按钮,这行调用了

echo '<br /><a href="' . $facebook->getLogoutUrl() . '">logout</a>';

当用户点击此页面时,页面重新加载,用户仍然有一个活动会话,但如果他尝试访问 Facebook 网站,他会发现自己已注销。所以我需要的是一个“销毁会话”而不是这个注销按钮。

我遇到的另一个问题是:当用户登录并获取他的访问令牌时,他应该能够喜欢在 foreach 循环中调用的对象。但是,当他尝试这样做时,他从 Graph API 收到了这个错误:

    {
   "error": {
      "message": "(#100) Like actions are not yet supported against objects of this type.",
      "type": "OAuthException",
      "code": 100
   }
}

我在这里迫切需要帮助,我确信我想要实现的目标并不复杂,但这是我第一次接触 facebook 的 API,我迷路了。

(如果您想现场观看:http://private.quentindelattre.ch/lab/vote.php

非常感谢您的帮助

【问题讨论】:

    标签: php facebook facebook-graph-api facebook-like facebook-opengraph


    【解决方案1】:

    facebook like 按钮是每个网页的,如果您在 data-href 属性中指定一个工作网页,单击 like 按钮将喜欢指定的网页。

    如果您想让它工作,您的每张图片都需要有自己的、可公开访问的网页,该网页将提供给 data-href 参数。

    【讨论】:

    • 嗨,谢谢你的回答。这就是为什么我认为使用那个位作为 href : $d['link'] 可以解决问题,但它不起作用......这是我所有的代码: $facebook_album = file_get_contents('graph.facebook.com/486769464721177/photos'); $dataArr = json_decode($facebook_album,true); foreach($dataArr['data'] as $d){ ?>
      echo ""; ?>
      } ?>
    • 请注意,如果您的网站在本地测试并且无法从 facebook 访问,则社交按钮和评论框将无法正常工作。
    • 哦!谢谢你,我会从服务器上试试,让你知道!
    • 哇...我从我的服务器收到奇怪的错误消息...谁能帮助我? private.quentindelattre.ch/lab/album.php
    • 由于某种原因,它似乎没有正确包含文件,您可能需要打开一个不同的问题。
    猜你喜欢
    • 2014-12-04
    • 2011-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-10
    • 2012-01-23
    相关资源
    最近更新 更多