发布到我管理的封闭组

时间:2015-01-04 13:21:11

标签: c# facebook facebook-graph-api facebook-c#-sdk

我有以下代码(facebook C#SDK)发布到Facebook墙上:

public long? UploadPost(string intLinkTitle, string inMessage, string inLinkCaption, string inLinkUrl, string inLinkDescription, string inLinkUrlPicture)
        {
            object obj;
            Facebook.JsonObject jsonObj;
            FacebookClient client;
            string access_token = ConfigurationManager.AppSettings["FacebookPageAccessToken"].ToString();

            client = new FacebookClient(access_token);

            var args = new Dictionary<string, object>();
            args["message"] = inMessage;
            args["caption"] = inLinkCaption;
            args["description"] = inLinkDescription;
            args["name"] = intLinkTitle;
            args["picture"] = inLinkUrlPicture;
            args["link"] = inLinkUrl;

            if ((obj = client.Post("/" + ConfigurationManager.AppSettings["FacebookPageId"].ToString() + "/feed", args)) != null)
            {
                if ((jsonObj = obj as Facebook.JsonObject) != null)
                {
                    if (jsonObj.Count > 0)
                        return long.Parse(jsonObj[0].ToString().Split('_').Last().ToString());
                }
            }

            return null;
        }
    }

只要我发布到我的公共Facebook网站页面,但是当将FacebookPageId更改为组ID而不是(FacebookApiException - #200) Permissions error时,这会很有效。

我的用户是群组和网页的管理员。

我尝试使用以下行从图谱API资源管理器发布消息:294632750660619/feed/?message=test但是这里存在语法问题,也尝试了294632750660619/feed?message=test但没有成功。

如何发布到已关闭的Facebook群组?

1 个答案:

答案 0 :(得分:0)

好的,我找到了正确的方法。这就是我要做的事情:

  1. 转到https://developers.facebook.com/并创建新应用
  2. 设置&gt;添加平台(网站并设置站点URL(例如localhost ..)
  3. 将应用设置为现场(状态和评论&gt;是),为此,需要在设置&gt;下设置电子邮件地址。联系电子邮件
  4. 转到Graph API Explorer
  5. 从下拉列表中选择新应用
  6. 点击获取访问令牌
  7. 选择正确的权限(user_groupsuser_statususer_photosmanage_pagespublish_actionsread_insightsread_stream)和单击“获取访问令牌”。现在我们做了一个短暂的生活
  8. 使用此网址生成扩展用户令牌(有效期为60天)(更改参数(3)):https://graph.facebook.com/oauth/access_token?grant_type=fb_exchange_token&client_id=[app-id]&client_secret=[app-secret]&fb_exchange_token=[short-lived-token]
  9. 在应用程序中使用生成的无过期访问令牌
  10. 在此处验证访问令牌:https://developers.facebook.com/tools/debug/access_token/
  11. 使用此代码上传帖子:

    public long? UploadPost(string intLinkTitle, string inMessage, string inLinkCaption, string inLinkUrl, string inLinkDescription, string inLinkUrlPicture)
            {
                object obj;
                Facebook.JsonObject jsonObj;
                FacebookClient client;
                string access_token = ConfigurationManager.AppSettings["FacebookPageAccessToken"].ToString();
    
                client = new FacebookClient(access_token);
    
                var args = new Dictionary<string, object>();
                args["message"] = inMessage;
                args["caption"] = inLinkCaption;
                args["description"] = inLinkDescription;
                args["name"] = intLinkTitle;
                args["picture"] = inLinkUrlPicture;
                args["link"] = inLinkUrl;
    
                if ((obj = client.Post("/" + ConfigurationManager.AppSettings["FacebookPageId"].ToString() + "/feed", args)) != null)
                {
                    if ((jsonObj = obj as Facebook.JsonObject) != null)
                    {
                        if (jsonObj.Count > 0)
                            return long.Parse(jsonObj[0].ToString().Split('_').Last().ToString());
                    }
                }
    
                return null;
            }
    

    要获得Feed,请使用:

    private void GetFeed()
            {
                object obj;
                Facebook.JsonObject jsonObj;
                Facebook.JsonObject jsonPaging;
                FacebookClient client;
                int pageCount = 0;
                string access_token;
                string URL;
                DateTime fetchFaceBookFeedFromDate;
                DateTime? oldestPostFetched = null;
    
                fetchFaceBookFeedFromDate = DateTime.Now.AddDays(-30);
                access_token = ConfigurationManager.AppSettings["FacebookPageAccessToken"].ToString();
                URL = "/" + ConfigurationManager.AppSettings["FacebookPageId"].ToString() + "/feed";
    
                client = new FacebookClient(access_token);
    
    
                while (URL.Length > 0 && pageCount < 1000)
                {
                    if ((obj = client.Get(URL)) != null)
                    {
                        if ((jsonObj = obj as Facebook.JsonObject) != null && jsonObj.Count > 0)
                        {
                            if (jsonObj[0] is Facebook.JsonArray)
                                oldestPostFetched = SaveFacebookForumThread(jsonObj[0] as Facebook.JsonArray, fetchFaceBookFeedFromDate);
    
                            if (jsonObj.Keys.Contains("paging") && (jsonPaging = jsonObj["paging"] as Facebook.JsonObject) != null && jsonPaging.Keys.Contains("next"))
                                URL = jsonPaging["next"].ToString();
                            else
                                break;
                        }
                    }
                    pageCount++;
    
                    if (oldestPostFetched.HasValue && fetchFaceBookFeedFromDate > oldestPostFetched)
                        break;
                }
            }