2011-04-08 68 views
5

我有一个网站,我已经注册为一个Facebook应用程序 - 我现在有一个应用程序ID。使用asp.net发表评论到Facebook墙

我的网站是ASP.net C#。当用户点击一个按钮时,我希望它将预定义的消息发布到他们的墙上。我期待Facebook向用户展示登录对话框 - 他们登录并授予我的网站应用的发布权限。

有没有人有任何示例代码会这样做?我认为我需要使用图形API,但是我看过的所有示例都使用PHP--我对此一无所知。我正在寻找一个使用Java脚本(我几乎什么都不知道)或C#(美丽!)的例子。

*更新*

我设法拿到的access_token。现在我通过Facebook C#API打电话发布到墙上。我得到的错误信息:

(#803),有些要求你不存在的别名:PROFILE_ID

我已经通过API代码阶梯,发现它正试图发布到以下地址:{https://graph.facebook.com/PROFILE_ID/feed},发布数据为:message = Sample + message + from + c%23 + sdk & access_token = 199209316768200 | 2.1avFTZuDGR4HJ7jPFeaO3Q __。3600.1302897600.1- 100000242760733 | R4DkNDf4JCb6B2F64n5TSQwBqvM

我很确定我的令牌应该是有效的。此前请求访问令牌我要求publish_stream上的应用程序授权请求如下:

Response.Redirect ("https://www.facebook.com/dialog/oauth?client_id=" + myAppId + "&redirect_uri=" + myURL + "&scope=publish_stream"); 

该SDK代码,实际上使请求如下:

private string MakeRequest(Uri url, HttpVerb httpVerb, 
            Dictionary<string, string> args) 
     { 
     if (args != null && args.Keys.Count > 0 && httpVerb == HttpVerb.GET) 
     { 
      url = new Uri(url.ToString() + EncodeDictionary(args, true)); 
     } 

     HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest; 

     request.Method = httpVerb.ToString(); 

     if (httpVerb == HttpVerb.POST) 
     { 
      string postData = EncodeDictionary(args, false); 

      ASCIIEncoding encoding = new ASCIIEncoding(); 
      byte[] postDataBytes = encoding.GetBytes(postData); 

      request.ContentType = "application/x-www-form-urlencoded"; 
      request.ContentLength = postDataBytes.Length; 

      Stream requestStream = request.GetRequestStream(); 
      requestStream.Write(postDataBytes, 0, postDataBytes.Length); 
      requestStream.Close(); 
     } 

     try 
     { 
      using (HttpWebResponse response 
        = request.GetResponse() as HttpWebResponse) 
      { 
       StreamReader reader 
        = new StreamReader(response.GetResponseStream()); 

       return reader.ReadToEnd(); 
      } 
     } 

任何人都可以看到我在做什么错误?

非常感谢,

Rob。

回答

2

首先,你需要照顾Authentication。您需要创建一个应用程序,并使用OAuth来获取访问令牌。所有内容均在“身份验证指南”中介绍。

要发布内容到用户的墙上,请查看发布下的Graph API

作为开始,你可以使用Facebook's C# SDK

1

你可以看看使用.NET库如http://facebooknet.codeplex.com/来做到这一点。有一对夫妇,我只记得这一个...

HTH。

+0

我确实有看看,但文件似乎缺乏。我感觉这可能需要一周的时间来攀登这条学习曲线!我真的需要在本周末有所作为:| – 2011-04-08 18:50:32

+0

好的,我写了一篇关于使用Facebook Connect的文章:http://www.devproconnections.com/article/aspnet2/how-to-use-the-facebook-connect-api-in-an-asp-net-web-应用;脸谱团队http://www.facebook.com/developers也有很好的信息。 – 2011-04-08 19:42:24

+1

感谢Brian,但是现在Connect API已经被Graph API取代了吗? – 2011-04-11 11:13:54

0

如何尝试这个API塔我最近开发作出与Facebook整合更容易。

这里是一个代码示例为您的网站上有更多的文档。

验证用户

Imports Branches.FBAPI 
... 
Dim SI As New SessionInfo("[application_id]","applicaiton_secret") 
'Redirects user to facebooks 
SI.AuthenticateUser("http://[my url]", New SessionInfo.PermissionsEnum(){SessionInfo.PermissionsEnum.email, SessionInfo.PermissionsEnum.read_stream})) 
'Called when the user is returned to your page 
Dim FSR = FS.ReadFacebooAuthResponse 
Response.Write(FSR.Access_Token) 
Response.Write(FSR.UserID) 

决策职位

Imports Branches.FBAPI 
... 
Dim SI As New SessionInfo("[access_token]")) 
Dim Posts = New Functions.Posts(SI) 
Dim P As New Post 
P.name = "name of post" 
P.message = "message" 
P.link = "www.cnn.com" 
P.caption = "my caption" 
Posts.PublishCreate("[object ID to post to]", P) 
Dim PostID = P.id 

获得的东西从图。

Dim SI As New SessionInfo("[access_token]")) 
Dim Req New Functions.Requests(SI) 
Dim User = Req.GetUserInfo("[optional user ID]") 
Response.Write(U.name) 
1

我创建展示如何做到这一点使用OG视频:http://www.markhagan.me/Samples/Grant-Access-And-Post-As-Facebook-User-ASPNet

如果你没有时间看视频,这里是全码:

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" }); 
      } 
     } 
    } 
}