如何使用应用程序代表我的页面将链接,图片等发布到我的Facebook页面?

时间:2013-08-30 21:25:00

标签: c# asp.net facebook facebook-graph-api

所以我在facebook上有一个应用程序,它具有publish_stream,manage_pages的权限,我到目前为止能够将“文本”更新发布到我自己的个人资料中,并显示“通过应用程序名称”。

然后我尝试将此应用程序发布到我的页面上。

我可以通过client.Post("/page name/feed", new { message = "abcd" });(仅限文字)来做到这一点但是如果我尝试发布链接,标题或图片,它仍会在我的网页上发布,但是我的个人资料就像我在分享该页面上的内容并未作为我的页面发布。

我正在使用此方法发布。

private void CheckAuthorization()
    {
        string app_id = "APP_ID";
        string app_secret = "APP_SECRET";
        string scope = "publish_stream,manage_pages,";

        if (Request["code"] == null)
        {
            Response.Redirect(string.Format(
                "https://graph.facebook.com/oauth/authorize?client_id={0}&redirect_uri={1}&scope={2}",
                app_id, Request.Url.AbsoluteUri, scope));
        }
        else
        {
            Dictionary<string, string> tokens = new Dictionary<string, string>();

            string url = string.Format("https://graph.facebook.com/oauth/access_token?client_id={0}&redirect_uri={1}&scope={2}&code={3}&client_secret={4}",
                app_id, Request.Url.AbsoluteUri, scope, Request["code"].ToString(), app_secret);

            HttpWebRequest request = System.Net.WebRequest.Create(url) as HttpWebRequest;

            using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
            {
                StreamReader reader = new StreamReader(response.GetResponseStream());

                string vals = reader.ReadToEnd();

                foreach (string token in vals.Split('&'))
                {
                    //meh.aspx?token1=steve&token2=jake&...
                    tokens.Add(token.Substring(0, token.IndexOf("=")),
                        token.Substring(token.IndexOf("=") + 1, token.Length - token.IndexOf("=") - 1));
                }
            }

            string access_tokens = tokens["access_token"];

            var client = new FacebookClient(access_tokens);

            dynamic parameters = new ExpandoObject();

            parameters.message = "Check out this New Item";
            parameters.link = "https://www.example.com";
            parameters.picture = "http://www.example.com/images/img.jpg";
            parameters.name = "Item Title";
            parameters.caption = "Caption for the link";

            client.Post("/AllTheMed/feed", new { message = "lsjlsjlsjkldf" });

        }
    }

1 个答案:

答案 0 :(得分:0)

在您的代码中,您只能获得USER访问令牌。但是,要以页面形式发布,您需要获取PAGE访问令牌。有关详情,请参阅此处:https://developers.facebook.com/docs/authentication/pages/

简而言之,您需要执行以下操作:

  1. 对用户进行身份验证并请求manage_pages权限
  2. 使用来自(1) - https://graph.facebook.com/me/accounts?access_token=USER_ACCESS_TOKEN
  3. 的令牌获取用户管理的网页列表
  4. 解析列表并获取PAGE令牌 - 并使用它发布到Feed。
  5. 基本上,在你的

    之前
    client.Post("/AllTheMed/feed", ...)
    

    你应该打电话给我/帐户(这里是伪代码):

    var myAccounts = client.Get("/me/accounts");
    var pageAccessToken = myAccounts.Single(x => x.pageName == MY_PAGE_NAME).access_token;
    
    var pageClient = new FacebookClient(pageAccessToken);
    pageClient.Post("/me/feed", ...)