4

私は 3 日以来、C# を使用してファン ページ ウォールの投稿を作成する方法を試しましたが、次の 2 つの点に注意してください。時代遅れです。誰かが私のコードを修正したり、完全な適切なコードを提供したりできますか?

これは私のコードです:

  if (String.IsNullOrEmpty(Request.QueryString["code"]))
            {
                Response.Redirect("https://graph.facebook.com/oauth/authorize?client_id=157873644371673&redirect_uri=http://localhost:2551/Default.aspx&scope=publish_stream,manage_pages,offline_access&display=popup");
            }
            else
            {

    FacebookClient fb = new FacebookClient();
                    dynamic result1 = fb.Get("oauth/access_token", new
                    {
                        client_id = "MY_APP_ID",
                        client_secret = "MY_SECRET_ID",
                        grant_type = "client_credentials",
                        redirect_uri = "www.mysite.com"
                    });

                    fb.AppId = "MY_APP_ID";
                    fb.AppSecret = "MY_SECRET_ID";
                    fb.AccessToken = result1.access_token;

                     dynamic parameters = new ExpandoObject();
                    parameters.message = "Check out this funny article";
                    parameters.link = "http://www.example.com/article.html";
                    parameters.picture = "http://www.example.com/article-thumbnail.jpg";
                    parameters.name = "Article Title";
                    parameters.caption = "Caption for the link";
                    parameters.description = "Longer description of the link";
                    parameters.req_perms = "manages_pages";
                    parameters.scope = "manages_pages";

                    parameters.actions = new
                    {
                        name = "View on Zombo",
                        link = "www.zombo.com",
                    };
                    parameters.privacy = new
                    {
                        value = "ALL_FRIENDS",
                    };

                    try
                    {
                        var result = fb.Post("/" + "MY_FACEBOOK_FAN_PAGE_ID" + "/feed", parameters);
                    }
                    catch (FacebookOAuthException ex)
                    {
                        //handle something
                        Response.Write(ex.Message);
                    }
}
4

3 に答える 3

7

この投稿が多くの人に役立つことを願っています。シンプルで明確になるように努めています。

1-Facebook 開発者アカウントを作成し、コンピューター ( localhost) でコードをテストするには、「Facebook 認証による Web サイト認証」フィールドにローカルホスト アドレスを設定します。私にとってはhttp://localhost:2551/Default.aspx、たとえば、wweb アプリケーションの Defaut.aspx でテストするためです。Web サイトに展開するときに、このアドレスを変更します (私の場合、コードを Web サイトに展開する直前にhttp://www.mywebsiteurl.com/Default.aspxに変更します)。

2- Facebook ユーザー アカウントを使用して、ファン ページを作成します。

3-ファンページを作成したら、ファンページにアクセスして、URL を参照して PAGE_ID を取得し ます 446533181408238

3- ほぼ完成です。簡単な説明です。私はファン ページを作成したため、ファン ページの管理者であり、開発者アカウントから投稿するために facebook に承認を求める必要があるため、2 つのアクションの承認を取得する必要があります: publish_stream と管理ページ。

コーディングに行きましょう:

  private void Do()
        {
            string app_id = "157873644371675";
            string app_secret = "c27a10c347af4280720fa3d76c9ae08c";
            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_token = tokens["access_token"];

                var client = new FacebookClient(access_token);

                dynamic parameters = new ExpandoObject();
                parameters.message = "Check out this funny article";
                parameters.link = "http://www.natiska.com/article.html";
                parameters.picture = "http://www.natiska.com/dav.png";
                parameters.name = "Article Title";
                parameters.caption = "Caption for the link";

                //446533181408238 is my fan page
                client.Post("/446533181408238/feed", parameters);

            }
              }
于 2013-03-19T08:29:15.943 に答える
0

Graph API リクエストで渡すパラメータに問題があります。

  1. アクセス許可を効率的に要求しません。
    • req_permsパラメータは廃止され、 に置き換えられましたscope
    • アクセス許可は、Graph API リクエストではなく、ログイン リンクで渡されます。
  2. actionフィールドには配列が必要ですが、privacyフィールドにはJSONが必要です

配列はどのように見えるか: "actions": {'value': 'CUSTOM', 'allow': '{friend-list-id}'}.

JSON は次のようになります。

"privacy": [   
    {
      "name": "Comment", 
      "link": "https://www.facebook.com/1234567890/posts/09876543210987654321"
    }, 
    {
      "name": "Like", 
      "link": "https://www.facebook.com/1234567890/posts/09876543210987654321"
    }
]
于 2013-03-18T22:07:30.297 に答える