【问题标题】:How can I post to a facebook wall from a c# web service?如何从 c# web 服务发布到 facebook 墙上?
【发布时间】:2011-01-22 03:12:48
【问题描述】:

我尝试了很多方法,但不知道如何从网络服务将内容发布到 facebook 墙上。有谁知道这是否可能?似乎发布内容的唯一方法是在网站中包含一个登录页面,这不是我想做的。对于 twitter,我能够用不到 10 行代码发布一条消息;只需将用户名/密码添加到请求标头中并流式传输消息。我想我要问的是是否有类似的简单方法可以为 facebook 执行此操作?提前致谢!

【问题讨论】:

标签: c# facebook service twitter


【解决方案1】:

您需要先create an application on Facebook。在 facebook 上进行设置时的重要设置是:

连接 -> Facebook 连接设置 -> 连接 URL

此网址有两个用途。首先,该 URL 将用作您放置 xd_receiver.htm 文件的 Cross Domain Communication Channel 的基础。

因此,如果您的 url 是:http://yoursite.com,那么您必须在 url http://yoursite.com/xd_receiver.htm 有一个文件,它允许 JavaScript Client Library for Facebook 运行。

但是,我强烈建议您不要使用您的根网址。在您的页面上选择一个您不链接的子目录。像http://yoursite.com/ex/fb 这样的东西会很好(我喜欢ex 表示“外部”,但它完全是主观的)。

虽然您不一定需要 JavaScript 客户端库来执行实际发布。但是,您确实需要它来赋予自己在墙上发布所需的权利。

高级 -> 高级设置 -> 应用程序类型

这设置为“桌面”。

设置应用程序后,请注意以下事项(来自应用程序的主页):

  1. 您的 API 密钥
  2. xd_receiver.htm 文件的网址

有了这两件事,您想在网站上创建一个网页,该网页使用 JavaScript 客户端库和 FBML,让您的应用程序有权发布到其墙上(或页面的墙上)。

在此页面中,您希望使用您的 API 密钥以及 xd_receiver.htm 文件的路径来初始化 JavaScript 客户端库。我有一个这样设置的 ASP.NET 页面:

<%@ Page Language="C#"%>
<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:fb="http://www.facebook.com/2008/fbml">
<head>
  <script 
    src="http://static.ak.connect.facebook.com/js/api_lib/v0.4/
      FeatureLoader.js.php" type="text/javascript"></script>
</head>

<body>
  <fb:login-button></fb:login-button>

  <hr>

  <fb:prompt-permission perms="offline_access">Click to grant offline 
    access permission.</fb:prompt-permission>
  <fb:prompt-permission perms="publish_stream">Click to grant publish 
    stream permission.</fb:prompt-permission>
  <fb:prompt-permission perms="read_stream">Click to grant read stream
    permission.</fb:prompt-permission>

  <input type="button" value="Get session key" onclick="
    document.all('apikey').value=FB.Facebook.apiClient.
    get_session().session_key;" />

  <input type="text" size="100px" id="apikey" />

  <script type="text/javascript">
  FB_RequireFeatures(["XFBML"], function () {
    FB.Facebook.init("API Key", "xd_receiver.htm URL");
  });
</script>

</body>

</html>

需要注意的两点是:

  • 您正在请求offline_access extended permission。这是允许您在用户不在线时发布到用户墙上的关键。
  • read_stream 权限,我不知道这是否是必要 发布到流中,但拥有它并没有什么坏处。
  • 显然,publish_stream permission

现在,当您转到此页面时,JavaScript 客户端库将负责呈现带有 fb 命名空间的标签。

当您第一次看到它时,您会看到一个 Facebook Connect 按钮。单击它并使用您要发布到的墙的用户的凭据登录。

登录后,页面将重新加载,fb:prompt-permission 标签将呈现为链接。点击链接告诉 Facebook 用户允许应用程序访问他们的个人资料。

授予应用程序所有权限后(可能会出现一些对话框),单击“获取会话密钥”按钮。

这将使用会话密钥填充文本框。因为您的应用程序请求了offline_access,所以无论您何时使用此会话密钥,Facebook 都会识别它。

现在,您有以下信息:

  • 应用程序 API 密钥
  • 应用程序密钥(您从应用程序页面获得)
  • 您要发布到的页面的用户 ID(您应该可以从您的 Facebook 网址获取)

此时,您应该能够使用任何适用于 .NET 的 Facebook API。我更喜欢Facebook Developer Toolkit

使用您选择的组件创建一个简单的 Windows 窗体应用程序,并设置应用程序 API 和应用程序密钥。此外,在您的 Windows 窗体应用程序中调用登录之前,将会话密钥设置为上面的会话密钥。在登录调用后设置断点。

运行您的应用。应显示一个浏览器窗口,提示您登录。登录后,您应该点击断点。此时,您的应用程序密码(如果使用 Facebook 开发者工具包)应该不同(我称之为客户端密码。写下来。这是第四个,并且您应该需要的最后一条信息。

现在你已经拥有了所有你需要的东西:

  • 应用程序 API
  • 客户端密码
  • 会话密钥
  • 您要发布到的墙的用户 ID

现在,有了所有这些,当您进行 API 调用时,使用 client secret 代替 application secret,以及您的会话密钥,以及您应该能够从您的服务调用写入用户的墙(或用户拥有的页面,如果您有该 ID),而无需任何 UI 登录。

【讨论】:

  • @Daniel Schaffer:当时,对于 .NET,它比其他访问 FB API 的框架更适合我。引入新的 API 调用也很容易,因为所有的管道都在那里。
猜你喜欢
  • 2011-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-10
相关资源
最近更新 更多