【问题标题】:Simplest way to post to a facebook fan page's wall with C#!使用 C# 发布到 Facebook 粉丝页面墙上的最简单方法!
【发布时间】:2011-08-18 05:16:09
【问题描述】:

我为我的公司设置了一个粉丝页面。

我想从我的 C# 桌面应用程序自动将定期更新发布到该页面的墙上。

  • 哪个 Facebook C# 库最简单?

  • 如何轻松获取此页面的访问令牌?

  • 最简洁的代码 sn-p 可以让我简单地发布到墙上?

我已经阅读了所有文档以及数以百万计的 stackoverflow 和博客文章,这一切似乎都非常令人费解。当然不会那么难..

我在 facebook 中设置了一个“应用程序”,它有自己的 App ID、API Key 和 App Secret 等。

【问题讨论】:

  • 我可能已经过时了,但听起来你的假设与我在解决这个问题时所做的假设相似;这并不容易,因为您只想访问一个页面,那就是您的(您的客户的)。您仍然需要构建基础架构(弹出 facebook 登录、请求权限、处理 auth 令牌的重定向),它可以为任意用户工作,即使您只为自己做一次,作为管理员。这还不错,但我认为没有一个简单的方法可以完成它,您需要进行所有身份验证。

标签: c# facebook api sdk


【解决方案1】:

@Aaron - 最好的库是 facebook c# sdk。我每天都在使用它……当然,正如我的公司所写的那样,我有偏见 - 但它是一个动态库,并且从 Facebook(每周二)的更新速度来看,它非常适合可扩展的开发。

http://facebooksdk.codeplex.com/

我不会使用它进行身份验证 - 因为在 codeplex 上有很多示例: http://facebooksdk.codeplex.com/wikipage?title=Code%20Examples&referringTitle=Documentation 但是要在页面上发布帖子,在您通过身份验证并获得访问令牌后,代码将是这样的:

dynamic messagePost = new ExpandoObject();
messagePost.access_token = "[YOUR_ACCESS_TOKEN]";
messagePost.picture = "[A_PICTURE]";
messagePost.link = "[SOME_LINK]";
messagePost.name = "[SOME_NAME]";
messagePost.caption = "{*actor*} " + "[YOUR_MESSAGE]"; //<---{*actor*} is the user (i.e.: Aaron)
messagePost.description = "[SOME_DESCRIPTION]";

FacebookClient app = new FacebookClient("[YOUR_ACCESS_TOKEN]");

try
{
    var result = app.Post("/" + [PAGE_ID] + "/feed", messagePost);
}
catch (FacebookOAuthException ex)
{
     //handle something
}
catch (FacebookApiException ex)
{
     //handle something else
}

希望这会有所帮助。

【讨论】:

  • 谢谢乔伊。结果我确实找到并使用了你的图书馆。是的,与其他相比,它确实看起来最好,下载包中包含的许多示例非常有帮助。我最终修改了“CSWinFormsAuthTool”示例项目,并且能够相当快地获得正确的访问令牌。然后通过一些进一步的修改,我将实际调用缩减为 2 行代码!它真的很好用。非常感谢。
  • @AAron,“能够相当快地获得正确的访问令牌” - 你是怎么做到的?谢谢!
  • 我在向页面发布一些消息时收到此错误。(OAuthException - #200) (#200) 用户尚未授权应用程序执行此操作。在这种情况下,谁是“用户”?有人可以帮我解决这个问题。我什至在获取访问令牌之前添加了权限
  • FacebookClient 代码已过时。您不能再简单地传递一个访问令牌,它需要一个客户端 ID 和密钥,这对于使用未过期令牌的应用程序来说是无用的。
【解决方案2】:

我发布此内容是因为互联网上缺乏好的信息导致我花费的时间超出了我的需要。我希望这对其他人有益。关键是将 &scope=manage_pages,offline_access,publish_stream 添加到 url。

class Program
{
    private const string FacebookApiId = "apiId";
    private const string FacebookApiSecret = "secret";

    private const string AuthenticationUrlFormat =
        "https://graph.facebook.com/oauth/access_token?client_id={0}&client_secret={1}&grant_type=client_credentials&scope=manage_pages,offline_access,publish_stream";

    static void Main(string[] args)
    {
        string accessToken = GetAccessToken(FacebookApiId, FacebookApiSecret);

        PostMessage(accessToken, "My message");
    }

    static string GetAccessToken(string apiId, string apiSecret)
    {
        string accessToken = string.Empty;
        string url = string.Format(AuthenticationUrlFormat, apiId, apiSecret);

        WebRequest request = WebRequest.Create(url);
        WebResponse response = request.GetResponse();

        using (Stream responseStream = response.GetResponseStream())
        {
            StreamReader reader = new StreamReader(responseStream, Encoding.UTF8);
            String responseString = reader.ReadToEnd();

            NameValueCollection query = HttpUtility.ParseQueryString(responseString);

            accessToken = query["access_token"];
        }

        if (accessToken.Trim().Length == 0)
            throw new Exception("There is no Access Token");

        return accessToken;
    }

    static void PostMessage(string accessToken, string message)
    {
        try
        {
            FacebookClient facebookClient = new FacebookClient(accessToken);

            dynamic messagePost = new ExpandoObject();
            messagePost.access_token = accessToken;
            //messagePost.picture = "[A_PICTURE]";
            //messagePost.link = "[SOME_LINK]";
            //messagePost.name = "[SOME_NAME]";
            //messagePost.caption = "my caption"; 
            messagePost.message = message;,
            //messagePost.description = "my description";

            var result = facebookClient.Post("/[user id]/feed", messagePost);
        }
        catch (FacebookOAuthException ex)
        {
             //handle something
        }
        catch (Exception ex)
        {
             //handle something else
        }

    }


}

【讨论】:

  • 嗨贾斯汀。谢谢你,我想知道你是否可以帮忙。我正在尝试为 Quartz.net 编写一份工作,该工作每天都会发布到页面提要(我是其中的管理员)。看起来这应该是可能的,但我收到“用户尚未授权应用程序执行此操作”OAuth 异常。我想这是因为 Facebook 应用程序本身的设置。任何想法如何设置这些?一切都非常混乱。 FB 应用程序似乎并不是为这种自动化而构建的。提前致谢,汤姆
  • 编辑:一些令人困惑的东西。请参阅此处:developers.facebook.com/docs/reference/api/page - 然后转到此处:developers.facebook.com/tools/explorer/?method=GET 并将您的 [userid]/accounts 添加到 GET url,然后单击获取访问令牌并启用 manage_pages。令人费解,但我想是有充分理由的。
【解决方案3】:
猜你喜欢
  • 2010-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多