c# - 如何从 c# 网络服务发布到 facebook 墙?

标签 c# facebook service twitter

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

最佳答案

您需要create an application on Facebook第一的。在 facebook 上设置时的重要设置是:

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

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

所以如果你的网址是:http://yoursite.com那么你必须在 url 上有一个文件 http://yoursite.com/xd_receiver.htm这允许 JavaScript Client Library for Facebook运行。

但是,我强烈建议您不要使用您的根 url。选择一个您没有在页面上链接的子目录。类似 http://yoursite.com/ex/fb会做得很好(我喜欢 ex 表示“外部”,但它完全是主观的)。

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

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

这设置为“ 桌面”。

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

  • 您的 API key
  • xd_receiver.htm 文件的网址

  • 有了这两样东西,您就想在站点上创建一个网页,该网页使用 JavaScript 客户端库和 FBML 来授予您的应用程序在其墙(或页面的墙)上张贴的权利。

    在此页面中,您希望使用 API key 以及 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 用户允许应用程序访问有关其个人资料的那些内容。

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

    这将使用 session key 填充文本框。因为您的应用程序已经请求了 offline_access,所以每当您使用该 session key 时,Facebook 都会识别它。

    现在,您拥有以下信息:
  • 应用程序 API key
  • 应用程序 key (您从应用程序页面获得)
  • 您想要发布页面的用户的 ID(您应该可以从您的 Facebook 网址中获取)

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

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

    运行您的应用程序。应该会出现一个浏览器窗口,提示您登录。登录后,您应该点击断点。此时,您的应用程序 secret (如果使用 Facebook Developer Toolkit)应该有所不同(我称之为 客户端 secret 。写下来。这是您应该需要的第四条,也是最后一条信息。

    现在你拥有了你需要的所有部分:
  • 应用API
  • 客户端密码
  • session key
  • 您要发布到的墙的用户 ID

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

    关于c# - 如何从 c# 网络服务发布到 facebook 墙?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2353247/

    相关文章:

    c# - 特定客户的最后订单记录 - SQL

    c# - 生成json时类型无效?

    ios - Delphi:如何修复错误的 SdkTransformAssistant iOS header 转换?

    iOS 8 Facebook 共享链接、图像和文本

    android - 如何停止定时器 Android

    java - Android 究竟是如何将AIDL 接口(interface)与Remote Service 联系起来的?

    c# - 无法阻止 Windows Server 2012 上的 IIS 8.5 中的回收

    c# - 键盘助记符应该如何本地化?

    android - Facebook 登录仅适用于 API 24 - 找不到 com.google.firebase.auth 的本地模块描述符类。错误

    WCF 服务方法返回 json 或 soap