2011-04-12 142 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

相關問題