7

Facebookページを作りました。アプリケーション シークレットもアクセス トークンもありません。

.NET デスクトップ アプリケーションからこのページに投稿したいと考えています。どうすればいいですか?このアクセストークンはどこで入手できますか?

新しい Facebook アプリケーションを作成する必要がありますか? はいの場合、このアプリケーションにページのウォールに投稿する権限を付与するにはどうすればよいですか?

UPD1: ウェブサイトを持っていません。会社のニュースを .NET デスクトップ アプリケーションから会社の Facebook ページに投稿する必要があります。私が持っているのは、Facebook ページ アカウントのログイン/パスワードだけです。

UPD2: Facebook アプリケーションを作成しました。AppID/SecretKey を使用。アクセストークンを取得できます。しかし...どうすればページのウォールに投稿する権限を付与できますか?

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

4

7 に答える 7

5

この場所でこれを行う方法を示すビデオ チュートリアルを作成しました。

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

私の例では、「publish_stream」と「manage_pages」の両方を要求していることに気付くでしょう。これにより、そのユーザーが管理者であるページにも投稿できます。完全なコードは次のとおりです。

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" });
            }
        }
    }
}
于 2012-10-15T12:20:33.503 に答える
3

ユーザーに publish_stream 権限を求める必要があります。これを行うには、Facebook に送信する oAuth リクエストのスコープに publish_stream を追加する必要があります。これらすべてを行う最も簡単な方法は、codeplex から取得できる .net 用の facebooksdk を使用することです。デスクトップアプリでこれを行う方法の例がいくつかあります。

その許可を求め、ユーザーがそれを許可すると、ページのウォールに投稿するために使用できるアクセス トークンを受け取ります。このアクセス許可を保存する必要がある場合は、アクセス トークンを保存できますが、有効期限のないアクセス トークンを取得するには、スコープで offline_access アクセス許可を要求する必要がある場合があります。

于 2011-12-04T19:25:33.430 に答える
2

https://www.nuget.org/packages/Microsoft.Owin.Security.Facebook/を使用 してユーザーのログインと許可を取得し、 https ://www.nuget.org/packages/Facebook.Client/ を使用 してフィードに投稿できます。 .

以下の例は、ASP.NET MVC 5 の場合です。

public void ConfigureAuth(IAppBuilder app)
        {
            app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);

            // Facebook 
            var facebookOptions = new FacebookAuthenticationOptions
            {
                AppId = "{get_it_from_dev_console}",
                AppSecret = "{get_it_from_dev_console}",
                BackchannelHttpHandler = new FacebookBackChannelHandler(),
                UserInformationEndpoint = "https://graph.facebook.com/v2.4/me?fields=id,name,email,first_name,last_name,location",
                Provider = new FacebookAuthenticationProvider
                {
                    OnAuthenticated = context =>
                    {
                        context.Identity.AddClaim(new Claim("FacebookAccessToken", context.AccessToken)); // user acces token needed for posting on the wall 
                        return Task.FromResult(true);
                    }
                }
            };
            facebookOptions.Scope.Add("email");
            facebookOptions.Scope.Add("publish_actions"); // permission needed for posting on the wall 
            facebookOptions.Scope.Add("publish_pages"); // permission needed for posting on the page
            app.UseFacebookAuthentication(facebookOptions);

            AntiForgeryConfig.UniqueClaimTypeIdentifier = ClaimTypes.NameIdentifier;
        }
    }

コールバックで、ユーザー アクセス トークンを取得します。

public ActionResult callback()
{
    // Here we skip all the error handling and null checking
    var auth = HttpContext.GetOwinContext().Authentication;
    var loginInfo = auth.GetExternalLoginInfo();
    var identityInfo = auth.GetExternalIdentity(DefaultAuthenticationTypes.ExternalCookie);

    var email = loginInfo.Email // klaatuveratanecto@gmail.com
    var name = loginInfo.ExternalIdentity.Name  // Klaatu Verata Necto
    var provider = loginInfo.Login.LoginProvider // Facebook | Google
     
    var fb_access_token = loginInfo.identityInfo.FindFirstValue("FacebookAccessToken");
    // Save this token to database, for the purpose of this example we will save it to Session.
    Session['fb_access_token'] = fb_access_token;
    // ...                   
}

次に、ユーザーのフィードまたはページに投稿するために使用できます

public class postcontroller : basecontroller
{                      
        public ActionResult wall()
        {
            var client = new FacebookClient( Session['fb_access_token'] as string);
            var args = new Dictionary<string, object>();
            args["message"] = "Klaatu Verata N......(caugh, caugh)";
            
            try
            {
                client.Post("/me/feed", args); // post to users wall (feed)
                client.Post("/{page-id}/feed", args); // post to page feed
            }
            catch (Exception ex)
            {
                // Log if anything goes wrong 
            }

        }
}
于 2016-12-08T14:43:32.423 に答える
1

許可「publish_stream」を付与する必要があります。

于 2011-09-09T09:49:41.307 に答える
0
public void PostImageOnPage()
{
string filename=string.Empty;
if(ModelState.IsValid)
{
//-------- save image in image/
if (System.Web.HttpContext.Current.Request.Files.Count > 0)
{
var file = System.Web.HttpContext.Current.Request.Files[0];
// fetching image                    
filename = Path.GetFileName(file.FileName);
filename = DateTime.Now.ToString("yyyyMMdd") + "_" + filename;
file.SaveAs(Server.MapPath("~/images/Advertisement/") + filename);
}
}
string Picture_Path = Server.MapPath("~/Images/" + "image3.jpg");
string message = "my message";
try
{
string PageAccessToken = "EAACEdEose0cBAAoWM3X";

// ————————create the FacebookClient object
FacebookClient facebookClient = new FacebookClient(PageAccessToken);

// ————————set the parameters
dynamic parameters = new ExpandoObject();
parameters.message = message;
parameters.Subject = "";
parameters.source = new FacebookMediaObject
{
ContentType = "image/jpeg",
FileName = Path.GetFileName(Picture_Path)
}.SetValue(System.IO.File.ReadAllBytes(Picture_Path));
// facebookClient.Post("/" + PageID + "/photos", parameters);// working for notification on user page
facebookClient.Post("me/photos", parameters);// woring using bingoapp access token not page in(image album) Post the image/picture to User wall   
}
catch (Exception ex)
{

}
}
于 2016-09-28T13:14:16.480 に答える
0

https://developers.facebook.com/?ref=pfで、Facebook アプリの作成方法や Web サイトを Facebook にリンクする方法についての情報を入手できます。

Facebook SDK はhttp://facebooksdk.codeplex.com/からダウンロードできます。サイトのドキュメントセクションにいくつかの良い例があります。

于 2011-09-05T11:51:27.423 に答える
0

おそらくこれを行う最も簡単な方法は、Facebook PowerShell モジュール ( http://facebookpsmodule.codeplex.com ) を使用することです。これにより、FacebookSDK と同じ種類の操作が可能になりますが、開発者向けのインターフェイスではなく、IT 管理者のスクリプト インターフェイスを使用します。

知る限り、Facebook Graph API を使用して他のページ (@Microsoft など) への参照を投稿できないという Facebook Graph API の制限がまだあります。これは、FacebookSDK、FacebookPSModule、および Facebook Graph API で構築されたその他すべてに適用されます。

于 2011-09-06T16:06:43.227 に答える