2011-04-12 138 views
-2

我已经下载了facebookSampleASPNETApp。我不知道我在哪里找到它。但我认为这真的很棒。但它是一个Web应用程序,我正在建立一个ASP网站。如何使用facebookAPI以及我在哪里可以找到它?

我想使用与本示例中使用的代码相同的代码。 我试图从这个示例中导入一些类(如FacebookAPI.cs和JSONObject.cs),但它在我的网站中不起作用。我需要一个参考吗?

facebookSampleASPNETApp包含两个项目。一个是FacebookAPI,另一个是facebookSampleASPNETapp项目。在一个网站中,我无法导入另一个项目。那么我怎样才能使用FacebookAPI?

这里是FacebookAPI.cs代码:

/* 
* Copyright 2010 Facebook, Inc. 
* 
* Licensed under the Apache License, Version 2.0 (the "License"); you may 
* not use this file except in compliance with the License. You may obtain 
* a copy of the License at 
* 
* http://www.apache.org/licenses/LICENSE-2.0 
* 
* Unless required by applicable law or agreed to in writing, software 
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
* License for the specific language governing permissions and limitations 
* under the License. 
*/ 

using System; 
using System.Collections.Generic; 
using System.Text; 
using System.Net; 
using System.IO; 
using System.Web; 
using System.Web.Script.Serialization; 

namespace Facebook 
{ 
enum HttpVerb 
{ 
    GET, 
    POST, 
    DELETE 
} 

/// <summary> 
/// Wrapper around the Facebook Graph API. 
/// </summary> 
public class FacebookAPI 
{ 
    /// <summary> 
    /// The access token used to authenticate API calls. 
    /// </summary> 
    public string AccessToken { get; set; } 

    /// <summary> 
    /// Create a new instance of the API, with public access only. 
    /// </summary> 
    public FacebookAPI() 
     : this(null) { } 

    /// <summary> 
    /// Create a new instance of the API, using the given token to 
    /// authenticate. 
    /// </summary> 
    /// <param name="token">The access token used for 
    /// authentication</param> 
    public FacebookAPI(string token) 
    { 
     AccessToken = token; 
    } 

    /// <summary> 
    /// Makes a Facebook Graph API GET request. 
    /// </summary> 
    /// <param name="relativePath">The path for the call, 
    /// e.g. /username</param> 
    public JSONObject Get(string relativePath) 
    { 
     return Call(relativePath, HttpVerb.GET, null); 
    } 

    /// <summary> 
    /// Makes a Facebook Graph API GET request. 
    /// </summary> 
    /// <param name="relativePath">The path for the call, 
    /// e.g. /username</param> 
    /// <param name="args">A dictionary of key/value pairs that 
    /// will get passed as query arguments.</param> 
    public JSONObject Get(string relativePath, 
          Dictionary<string, string> args) 
    { 
     return Call(relativePath, HttpVerb.GET, args); 
    } 

    /// <summary> 
    /// Makes a Facebook Graph API DELETE request. 
    /// </summary> 
    /// <param name="relativePath">The path for the call, 
    /// e.g. /username</param> 
    public JSONObject Delete(string relativePath) 
    { 
     return Call(relativePath, HttpVerb.DELETE, null); 
    } 

    /// <summary> 
    /// Makes a Facebook Graph API POST request. 
    /// </summary> 
    /// <param name="relativePath">The path for the call, 
    /// e.g. /username</param> 
    /// <param name="args">A dictionary of key/value pairs that 
    /// will get passed as query arguments. These determine 
    /// what will get set in the graph API.</param> 
    public JSONObject Post(string relativePath, 
          Dictionary<string, string> args) 
    { 
     return Call(relativePath, HttpVerb.POST, args); 
    } 

    /// <summary> 
    /// Makes a Facebook Graph API Call. 
    /// </summary> 
    /// <param name="relativePath">The path for the call, 
    /// e.g. /username</param> 
    /// <param name="httpVerb">The HTTP verb to use, e.g. 
    /// GET, POST, DELETE</param> 
    /// <param name="args">A dictionary of key/value pairs that 
    /// will get passed as query arguments.</param> 
    private JSONObject Call(string relativePath, 
          HttpVerb httpVerb, 
          Dictionary<string, string> args) 
    { 
     Uri baseURL = new Uri("https://graph.facebook.com"); 
     //relativePath = "/me"; 
     Uri url = new Uri(baseURL, relativePath); 
     if (args == null) 
     { 
      args = new Dictionary<string, string>(); 
     } 
     if (!string.IsNullOrEmpty(AccessToken)) 
     { 
      args["access_token"] = AccessToken; 
     } 
     JSONObject obj = JSONObject.CreateFromString(MakeRequest(url, 
                   httpVerb, 
                   args)); 
     if (obj.IsDictionary && obj.Dictionary.ContainsKey("error")) 
     { 
      throw new FacebookAPIException(obj.Dictionary["error"] 
               .Dictionary["type"] 
               .String, 
              obj.Dictionary["error"] 
               .Dictionary["message"] 
               .String); 
     } 
     return obj; 
    } 

    /// <summary> 
    /// Make an HTTP request, with the given query args 
    /// </summary> 
    /// <param name="url">The URL of the request</param> 
    /// <param name="verb">The HTTP verb to use</param> 
    /// <param name="args">Dictionary of key/value pairs that represents 
    /// the key/value pairs for the request</param> 
    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(); 
      } 
     } 
     catch (WebException e) 
     { 
      throw new FacebookAPIException("Server Error", e.Message); 
     } 
    } 

    /// <summary> 
    /// Encode a dictionary of key/value pairs as an HTTP query string. 
    /// </summary> 
    /// <param name="dict">The dictionary to encode</param> 
    /// <param name="questionMark">Whether or not to start it 
    /// with a question mark (for GET requests)</param> 
    private string EncodeDictionary(Dictionary<string, string> dict, 
            bool questionMark) 
    { 
     StringBuilder sb = new StringBuilder(); 
     if (questionMark) 
     { 
      sb.Append("?"); 
     } 
     foreach (KeyValuePair<string, string> kvp in dict) 
     { 
      sb.Append(HttpUtility.UrlEncode(kvp.Key)); 
      sb.Append("="); 
      //NOTE: This line causes problems with access_token. The url encoding messes up the access_token, so for now I'm just adding it directly 
      //if the key == "access_token" 
      //sb.Append(HttpUtility.UrlEncode(kvp.Value)); 
      if (kvp.Key.ToLower() == "access_token") 
      { 
       sb.Append(kvp.Value); 
      } 
      else 
      { 
       sb.Append(HttpUtility.UrlEncode(kvp.Value)); 
      } 

      sb.Append("&"); 
     } 
     sb.Remove(sb.Length - 1, 1); // Remove trailing & 
     return sb.ToString(); 
    } 
} 
} 

任何帮助是非常感谢!

+2

“它不工作”?你如何期待任何人以这么少的信息来帮助你? – Foole 2011-04-12 08:08:03

回答

2

查看关于此主题的official Facebook developer page。这应该让你开始很好。在该页面中,你会找到详细的入门指南,如how to create an app on Facebook

编辑:只是偶然在一个博客帖子大约.NET and FB-authentication。也许这就是你要找的。

+0

感谢您的回复。我有一个Facebook应用程序注册。我知道如何使用facebook图形API。目前,我正在自己编写我的发布方法。但他们不总是工作,我想要一个一致的方式发布到Facebook的东西。所以这就是为什么我想使用facebookAPI类(在我的问题中显示)。这些方法非常好,可重复使用。我知道这听起来像,我不想自己查看它,但我真的这样做了,我找不到任何可以通过facebook使用此文件的asp网站的任何文档。我只需要知道我可以如何在我的网站中导入这个API或类。谢谢! – ThdK 2011-04-12 08:17:14

+0

看到我上面的编辑。 – froeschli 2011-04-12 08:55:31

+0

Omg,我觉得很糟糕,所以我很晚才看到你的编辑。你讲的博客文章太棒了!谢谢! – ThdK 2011-04-15 13:15:03

相关问题