【问题标题】:Like button to a page photo页面照片的“赞”按钮
【发布时间】:2011-10-25 16:15:33
【问题描述】:

您能告诉我如何在我的网站 (php) 中使用点赞按钮来点赞 Facebook 上的页面照片吗?

我知道我必须使用 GRAPH API 并且必须通过 HTTP 对 /likes 进行 POST .. 但我不知道如何使用 PHP 代码来做到这一点。

有人有例子吗?

谢谢

【问题讨论】:

  • 我也需要一个简单的 php-sdk 示例,如果我在发布示例之前写一个,我会回发。 “我将为 cURL 和 php 编写这个。”
  • @Fabio - 我也需要一个类似脚本的样本。如果没有及时发布,我会写一个。 “大概今天吧。”

标签: php facebook-graph-api photo


【解决方案1】:

只要你获得了用户publish_stream的权限,你就可以点赞任何你需要的照片。如果您尝试将照片作为页面点赞,请确保您拥有该页面的 access_token(通过用户帐户上的 /accounts 连接获得)。

一旦你获得了访问令牌,就像向一个类似下面的 URL 发出 HTTP POST 一样简单:

https://graph.facebook.com/PHOTO_ID/likes?access_token=ACCESS_TOKEN

Photo_ID = Facebook 中的照片 ID

Access_Token = 从 Facebook 获得的具有 publish_stream 权限的访问令牌。

更新


基于PHP Form CURL Post的PHP示例代码

<?php

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://graph.facebook.com/PHOTO_ID/likes");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, true);

$data = array(
    'Access_Token' => 'token_value'
);

curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$output = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);

我会检查这个,因为我不确定它有多准确,因为我通常不编写 PHP 代码。无论如何,帖子都应该是一个原始的 HTTP POST 请求。

【讨论】:

  • 谢谢,我如何获得 PHP 站点的 publish_stream?
  • @Frazell Thomas 你可以发布 php 代码来发布帖子吗?我有同样的问题,只想看一个示例并完成 curl sn-p 或 php post 脚本。除了 Facebook 文档中的复制粘贴信息之外的任何内容。
  • @ShawnECarter 我不确定如何使用 PHP(我是 .NET 开发人员),但我会看看是否可以找到关于在 PHP 中进行 HTTP POST 的 sn-p。
  • @FabioCardoso 我建议您查看developers.facebook.com/docs/authentication 以获取有关如何请求扩展权限的信息。
  • 谢谢弗雷泽尔,我可以使用 if($_SESSION['fb_135669679827333_access_token']){ $pageLike = $facebook->api('/'.$postid.'/likes?' .$app_access_token.'&method=post', 'POST');在我尝试将类似的对象发布到图形之前,我在会话中进行了包装以确保用户已登录并连接。
【解决方案2】:

Fabio 这里是我能够开始工作的 php post sn-p。 Snippet 包括一个 curl 以获取应用程序访问令牌和 api post 来喜欢一个对象,在本例中是我的应用程序上的一个帖子。

  • 示例帖子在这里:显示要赞的帖子

https://shawnsspace.com/plugins/TimeLinePost.php?pageid=135669679827333&postid=135669679827333_151602784936066&type=feed&fh=750

获取应用程序访问令牌。

function GetCH(){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://graph.facebook.com/oauth/access_token?client_id=YOUR_APP_ID&client_secret=YOUR_APP_SECRET&grant_type=client_credentials");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT_MS,20000);
if(substr($url,0,8)=='https://'){
    // The following ensures SSL always works. A little detail:
    // SSL does two things at once:
    //  1. it encrypts communication
    //  2. it ensures the target party is who it claims to be.
    // In short, if the following code is allowed, CURL won't check if the 
    // certificate is known and valid, however, it still encrypts communication.
    curl_setopt($ch,CURLOPT_HTTPAUTH,CURLAUTH_ANY);
    curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
}
$sendCH = curl_exec($ch);
curl_close($ch);
return $sendCH;
};
$app_access_token = GetCH();   

在 url 中查找 postid 参数然后点赞 id

  if($_GET['postid']){
  $postid = $_GET['postid'];
  }else{
  $postid = '135669679827333_151602784936066';
  }

    if($user){
 $pageLike = $facebook->api('/'.$postid.'/likes?access_token='.$access_token.'&method=post', 'POST');
}

【讨论】:

  • 我有问题。我想对 Facebook 页面(不是个人资料)中的照片做一个喜欢按钮,所以.. 我必须改变的价值是什么? (对不起,我是菜鸟)
  • 我不明白这一点:$_SESSION['fb_135669679827333_access_token'],我在我的网站上建立了一个 $_SESSION(用户必须登录才能参与)所以.. 目标是 GET访问令牌对吗?另一件事,什么是'postid'?这个值在哪里?
  • 抱歉 Fabio,该脚本适用于任何对象 ID,而不仅仅是页面。在我发布的示例链接中,喜欢指向墙上的帖子和照片。
  • 如果帖子 ID“在我的情况下”是动态的。 if($_GET['postid']){} 我将 url 中的 id 作为参数传递。 http://any.com ?postid=135669679827333_151602784936066 SESSION 或 $USER 在用户未连接到应用程序时阻止页面尝试点赞对象。 “如果不连接会抛出错误”
  • 好的,现在我明白了一点。所以.. 我必须获取照片 ID 才能在 url 中传递它,然后是: $pageLike = $facebook->api('/'.$postid.'/likes?access_token='.$access_token.'&method=发布','发布');发个帖子来点赞吧?
【解决方案3】:

您可以通过为登录 url 构建一组 perms 来获取权限。下面我在权限范围内请求 read_stream,publish_stream,publish_actions,offline_access。

注意:注销 url 需要应用访问令牌。

    <?php
    $url = (!empty($_SERVER['HTTPS'])) ? 'https://'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'] : 'http://'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
        require './src/facebook.php';
    $facebook = new Facebook(array(
      'appId'  => 'APPID',
      'secret' => 'APP-SECRET',
      'cookie' => true, // enable optional cookie support
    ));
    $user = $facebook->getUser();
    if ($user) {
      try {
        // Proceed knowing you have a logged in user who's authenticated.
        $user_profile = $facebook->api('/me');

            //$pageInfo = $facebook->api('/'.$pageid.'?access_token='.$_SESSION['fb_112104298812138_access_token].');
            //$pageInfoUser = $user_profile[id];
      } catch (FacebookApiException $e) {
        error_log($e);
        $user = null;
      }
    }
    /*  */
    if ($user) {
      $logoutUrl = $facebook->getLogoutUrl();
    } else {
    $params = array(
      scope => 'read_stream,publish_stream,publish_actions,offline_access',
      redirect_uri => $url
    );
      $loginUrl = $facebook->getLoginUrl($params);
    }
    $access_token = $_SESSION['fb_135669679827333_access_token'];

    ?>
<?php
        if(!$user){
    echo ' : <a href="'.$loginUrl.'" target="_self">Login</a>  ';
    }else{
        echo '<a href="'.$logoutUrl.'?'.$app_access_token.'" target="_blank">Logout</a>';
        }
?>

【讨论】:

  • 当我尝试您的代码时,点击“登录”后出现此错误:API 错误代码:191 API 错误描述:指定的 URL 不属于应用程序错误消息:无效的 redirect_uri:O URL indicado não é permitido pela configuração da Aplicação.
  • 你能把我链接到这个测试代码吗?如果代码所在的页面不是应用程序设置中使用的域,则会引发该错误。或者,如果您喜欢不属于应用程序的对象,您可能需要使用用户访问令牌。
  • 我已经调试过了,URL 重定向不正确。现在好了,你
  • 太棒了 - 尽管需要的代码数量有限,但这实际上很难实现。在示例中,我使用 php 5 检测当前 url 以进行重定向,这在您的情况下可能不起作用。如果没有添加,PHP-SDK 应该自动检测 url。
  • 为什么不这样做:$access_token = $facebook->getAccessToken();而不是 $access_token = $_SESSION['fb_135669679827333_access_token']; ?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-14
相关资源
最近更新 更多