【问题标题】:Like a Facebook Post with the use GraphAPI or FQL Query or HTTP Post method使用 GraphAPI 或 FQL Query 或 HTTP Post 方法为 Facebook Post 点赞
【发布时间】:2013-02-27 07:56:39
【问题描述】:

我想点赞 Facebook 中的帖子,我有 post_id ,但我无法从 IOS SDK 的 Facebook 开发者页面中找到点赞特定帖子的 FQL 查询。

来自 Facebook 开发者页面,它说您可以使用 HTTP POST 方法点赞帖子,这意味着我们不能使用 GraphAPI 或 fql.query 来点赞帖子。

任何人都可以分享 HTTP POST URL 以在 Facebook 上点赞。

这里有使用 iOS 中的自定义按钮为 Facebook 帖子开发点赞按钮功能的任何人。

提前致谢。

【问题讨论】:

  • 谢谢 :) 非常有帮助的问题。

标签: iphone ios facebook-graph-api facebook-fql


【解决方案1】:

如果您在 iOS 中使用 Facebook SDK,以下是一个示例:

[FBRequestConnection startWithGraphPath:[NSString stringWithFormat:@"%@/likes", post_id]
                             parameters:[NSDictionary dictionary]
                             HTTPMethod:@"POST"
                      completionHandler:^(FBRequestConnection *connection,
                                          id result,
                                          NSError *error) 
                          {
                              if (error)
                              {
                                  NSLog(@"Error: %@", [error localizedDescription]);
                              }
                              else
                              {
                                  NSLog(@"Result: %@", result);           
                              }
                          }];

【讨论】:

  • 感谢您的回复,但从这段代码中,我认为这个 Graph 请求将返回特定帖子 id 的点赞总数?我对吗 ?你在我的 Facebook SDK 中没有任何 FBRequestConnection 类。
  • 不,请注意 HTTPMethod 参数设置为 POST,POST HTTP 操作将喜欢 Facebook 上的帖子,如果您将其更改为 GET,您将获得喜欢的数量,如果您将其更改为 DELETE 您将删除您现有的已经制作的喜欢。完成处理程序中的结果将是一个 NSDictionary 对象,其中包含来自 Facebook 的响应,这将根据您选择的 HTTPMethod 而有所不同。如果您添加了 #import 语句,则 FBRequestConnection 类必须存在。当然,您必须首先启动一个 FBSession 才能使所有这些工作。
【解决方案2】:

我看到您正在询问 HTTP POST URL 的字段(参数)。 HTTP POST 请求(通常)不包含您在经典 GET 请求中可能习惯使用的参数,例如在某些 URL 中的脚本名称之后的 ?param1=value&param2=value

POST 请求在消息体中向服务器发送数据,查看:http://en.wikipedia.org/wiki/POST_(HTTP)

既然你知道了,那就是你可以做的:

您可以通过经典的 GET 请求获取点赞数,该 URL 可以粘贴到任何网络浏览器并获得响应,例如:

https://graph.facebook.com/260895413924000_605362559477282/likes?access_token=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

此网址将为您提供所有喜欢该帖子/照片的人的回复。

如果您知道帖子/照片是公开的(https://www.facebook.com/photo.php?fbid=605362542810617&set=a.260905783922963.82517.260895413924000),您可以省略 ?access_token=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx。 如果不是,您需要生成一个实际的 access_token(也用于发布您需要生成一个)并进行测试,您可以在这里进行:https://developers.facebook.com/tools/explorer/

现在,如果您想真正喜欢这张照片,您不能简单地形成一个可以在浏览器中复制/粘贴并触发点赞操作的 URL。这是因为浏览器不执行 POST 请求,您需要通过 Ivo Patrick Tudor Weiss 建议的代码来执行此操作,或者最终出于测试目的,您可以使用控制台中的 curl 实用程序执行此操作,如下所示:

curl --data "access_token=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" https://graph.facebook.com/260895413924005362559477282/likes 

您可以使用 HTTP DELETE 撤消类似操作...像这样:

curl --data "access_token=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" -X DELETE https://graph.facebook.com/260895413924000_605362559477282/likes

- 更新,关于 OP 在 cmets 中提出的其他问题:

当然可以使用 ASIHTTPRequest 发出 GET、POST 和 DELETE HTTP 请求。但是,我不建议在您的情况下使用该库。一个原因是 ASIHTTPRequest 的作者已经停止在这个库上工作,另一个原因是 Facebook SDK for iOS 是一个更好的选择,因为有了它,你已经处理了许多其他事情。 这里说的是例子:

首先根据您的需要输入这三种组合中的一种:

获取所有喜欢特定帖子的人:
(为简单起见,我在这里省略了 access_token,但如果需要,您可以将其附加到 URL)

NSURL *url = [NSURL URLWithString:@"https://graph.facebook.com/260895413924000_605362559477282/likes"];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];

自己喜欢具体的帖子:

NSURL *url = [NSURL URLWithString:@"https://graph.facebook.com/260895413924000_605362559477282/likes"];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request appendPostData:[@"access_token=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" dataUsingEncoding:NSUTF8StringEncoding]];
//[request setRequestMethod:@"POST"]; // <--- NOT NEEDED since it is the default if you previously called appendPostData

不同于帖子:

NSURL *url = [NSURL URLWithString:@"https://graph.facebook.com/260895413924000_605362559477282/likes"];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request appendPostData:[@"access_token=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" dataUsingEncoding:NSUTF8StringEncoding]];
[request buildPostBody];
[request setRequestMethod:@"DELETE"];

然后执行实际的请求:

[request startSynchronous];
NSString *response = [request responseString];
NSLog(@"Response: %@", response);

请记住,同步请求可以用于测试,但如果您在实际应用程序的主线程上使用它,您的 GUI 将无响应。在此处了解如何执行异步请求:http://allseeing-i.com/ASIHTTPRequest/How-to-use

至于您的 iOS 示例。把所有的代码都写在这里就太过分了。您已经从 Ivo Patrick Tudor Weiss 那里得到了完全正确的答案。唯一缺少的是您需要在 Facebook 上进行身份验证并建立 FBSession 的样板代码。

我建议您在此处阅读此材料:https://developers.facebook.com/docs/getting-started/facebook-sdk-for-ios/

下载包含示例代码的最新 SDK,并按照 Facebook 网页上的教程进行操作。然后,当您配置好基础知识后,回到您从 Ivo 那里得到的答案。

【讨论】:

  • 谢谢 ivan,它对我来说真的很有用,但是你能不能给我一个例子,让我喜欢 iOS SDK 中的一个帖子,如果可能的话,给我那个例子的链接,这样我就可以下载那个源代码了。是否可以使用 ASIHTTPRequest 传递 HTTP URL 来点赞帖子
  • 还请注意,您可以使用 NSURLConnection 完成以上所有操作,而无需包含任何第三方库。例如查看此帖子:stackoverflow.com/questions/2071788/…
  • 您好,Ivan,非常感谢您的回复,在您的代码的帮助下,我可以喜欢特定的帖子,但是当我使用 Delete post 方法时,响应为 True,但实际帖子不会不像。我会给你的答案作为一个真实的答案和赞成票。再次感谢
  • 我现在已经检查过了。似乎要使 HTTP DELETE 与某些消息(在这种情况下是您的访问令牌)一起工作,您必须另外调用 [request buildPostBody];。我将编辑我的答案以包含该内容
  • 您好,现在已经完全解决了,对于删除我使用了另外一条语句,即:[request buildPostBody];在 setRequestMethod 之前。
【解决方案3】:

您可以使用 Graph API 在 Facebook 帖子中点赞。正如它在此处的文档中所说: http://developers.facebook.com/docs/reference/api/post/

要创建一个赞,您需要使用publish_stream 权限向POST_ID/likes 连接发出HTTP POST 请求。您可以通过传递值为falsenotify 参数来禁止在喜欢帖子时创建通知。

【讨论】:

  • 你能给我那个 HTTP POST URL 的例子来点赞一个帖子吗?因为我不知道在该 URL 中传递的字段
猜你喜欢
  • 1970-01-01
  • 2014-12-04
  • 1970-01-01
  • 1970-01-01
  • 2011-10-21
  • 2012-04-25
  • 2017-02-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多