Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how to post to facebook page wall from .NET

I've created Facebook page. I have no application secret and no access token.

I want to post to this page from my .NET desktop application. How can I do it? Can anyone help please, where can I get access token for this?

Should I create a new Facebook Application? If yes, how can I grant permissions to this application to post on page's wall?

UPD1: I have no website. I need to post company's news from .NET desktop application to company's Facebook page. All I have is Login/Password for Facebook Page Account.

UPD2: I've created Facebook Application. With AppID/SecretKey. I can get access token. But... How can I grant permissions to post to page's wall?

(OAuthException) (#200) The user hasn't authorized the application to perform this action

like image 268
Lari13 Avatar asked Sep 05 '11 11:09

Lari13


2 Answers

I have created a video tutorial showing how to do this at this location:

http://www.markhagan.me/Samples/Grant-Access-And-Post-As-Facebook-User-ASPNet

You will notice that, in my example, I am asking for both "publish_stream" and "manage_pages". This let's you also post on pages of which that users is an admin. Here is the full code:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

using Facebook;

namespace FBO
{
    public partial class facebooksync : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            CheckAuthorization();
        }

        private void CheckAuthorization()
        {
            string app_id = "374961455917802";
            string app_secret = "9153b340ee604f7917fd57c7ab08b3fa";
            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 = 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_token = tokens["access_token"];

                var client = new FacebookClient(access_token);

                client.Post("/me/feed", new { message = "markhagan.me video tutorial" });
            }
        }
    }
}
like image 119
Mark Hagan Avatar answered Sep 20 '22 03:09

Mark Hagan


You need to ask the user for the publish_stream permission. In order to do this you need to add publish_stream to the scope in the oAuth request you send to Facebook. The easiest way to do all of this is to use the facebooksdk for .net which you can grab from codeplex. There are some examples there of how to do this with a desktop app.

Once you ask for that permission and the user grants it you will receive an access token which you can use to post to your page's wall. If you need to store this permission you can store the access token although you might need to ask for offline_access permission in your scope in order to have an access token that doesn't expire.

like image 32
Peter McKenzie-Jones Avatar answered Sep 22 '22 03:09

Peter McKenzie-Jones