2010年8月17日 星期二

Facebook api for C# 2 upload image

上一篇的sample 可能有點不太清楚, 經過我實際測試後用 WPF 寫出了一個簡單的例子



摘錄幾段必須的code

1. 加入 reference " Facebook.dll"
下載 http://facebooktoolkit.codeplex.com/releases/view/39727
網頁中的 SDK_Binaries.zip ,
解壓縮後就可以找到


2. DesktopSession 的宣告


_appKey = ""; /// appKey 由自己在facebook 中建立的AP 中取得
_sessionSecret=""; /// sessionSecret 由自己在facebook 中建立的AP 中取得


/// setting the session
session = new DesktopSession(_appKey, _sessionSecret,
null,
true,
new List() { Enums.ExtendedPermissions.read_stream, Enums.ExtendedPermissions.publish_stream });






3. login, 會自己跳出一個 facebook 的登入頁面,若有設定紀錄的話則不會出現填帳號密碼的畫面
, 成功的話 session 中的 UserId SessionKey 會填入值


session.Login();



4. 宣告 api 物件, 將登入訊息 session 傳入, 之後就可以利用 api 物件連結控制存取 facebook 的 資料


Api _api = new Api(session);



5. 範例 取得使用者名稱,取得使用者資訊 user , 這裡以 名稱為例


/// Get user information
user _user = _api.Users.GetInfo();

Console.WriteLine(_user.name);



6. 範例 上傳相片 , 這裡示範兩種方式

a. Upload

/// upload image (AlbumID 相本名稱 , caption 說明 , FileInfo 圖片檔案 )
_api.Photos.Upload("CatonTest", "Upload by Caton Test", _data);


b. UploadAsync
image type 詳細可以看 http://www.java2s.com/Open-Source/CSharp/Network-Clients/Facebook%20Developer%20Toolkit/Facebook/Rest/Photos.cs.htm
的 _mimeTypes



/// _photoRoot 檔案路徑 ex. C:\sample.bmp

/// Get image as byte array
byte[] _image = FileToByteArray(_photoRoot);

/// image type 這裡設image/gif 但我試過用 bmp 檔也可以成功上傳
/// UploadAsync(AlbumID 相本名稱 , caption 說明 , image as byte array, image type , callback function , state )
_api.Photos.UploadAsync("CatonTest", "Upload by Caton Test", _image, "image/gif", AsyncDemoCompleted, null);


UploadAsync 的 callback function

private static void AsyncDemoCompleted(photo photo, Object state, FacebookException e)
{
var actual = photo;
Console.WriteLine("upload async OK~~~~! ");
}



7. 附註

建立相簿的功能可以用 function :
_api.Photos.CreateAlbum

不過目前測試取得相簿清單的函式都會失敗, 清單都是0筆


IList albums = _api.Photos.GetAlbums();

2 則留言:

Bell Chiang 提到...

請問一下!
有辦法讓C#連接上FB塗鴉牆嗎?

Cc 提到...

請參閱 Graph API,

或參考一下下面網站的說明
http://sls.weco.net/node/10773#Graph API