Simplest way to post to a facebook fan page's wall with C#!

后端 未结 3 1805
轮回少年
轮回少年 2020-12-30 10:09

I have a fan page setup for my company.

I want to automate the posting of regular updates to that page\'s wall from my C# desktop application.

  • Which

3条回答
  •  清酒与你
    2020-12-30 10:54

    I am posting this because of lack of good information on the internet that led to me spend more time than I needed. I hope this will benefit others. The key is adding &scope=manage_pages,offline_access,publish_stream to the 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
            }
    
        }
    
    
    }
    

提交回复
热议问题