SQLの窓

2012年11月19日


Windows8(C#)からFacebook へ画像をアップロードする。

▼ 実行画面

ログイン > 画像表示 > 画像投稿
( WEB カメラの画像も投稿できます )

SkyDrive へ移動


実行するには、Facebook での APIキーが必要になります。MainPage.xaml.cs の先頭に 『public String apiKey = "";』とありますので変更して下さい。
先にログインしてアクセストークンを取得する必要がありますが、サンプルコードに実装してあります。この処理で取得するのは2時間使用可能なアクセストークンになります。60日間に変更するには、手動でも可能なのでこちらを参考にして下さい(一旦60日に変更すると、この処理で取得しても60日になるようです)。

ファイルのアップロードは、通常の仕様通りですが、具体的なフォーマットをソースコードで知りたい場合は、『Windows Phone から Facebook に画像アップロード』を参照するか、実行時にローカルのWEBサーバーに対して実行してダンプしてみて下さい。AN HTTPD ならば、トレースログを有効にすると見る事ができます。

ファイルのアップロードには、画像データのバイト配列が必要になりますが、その読み込み部分もサンプルに実装されています。具体的には、StorageFile から IBuffer を作成して、 CryptographicBuffer.CopyToByteArray メソッドを実行するのが最も簡単です( 他にも方法はあります )

HTTP の仕様(マルチパートを使用する方法)に合わせてデータを作る方法としては、System.Net.Http(HttpClient の名前空間)に全て用意されていました。仕様をご存じな方であれば非常に簡単に実装できる事がお解りになると思います。

これらの処理は全て本来非同期ですが、Windows8 の非同期処理の実装方法によってイベント等を記述する必要がなくなっています。この実装の概要に関しては、『Windows8 の非同期処理(C#)』を参照して下さい。
try
{
	HttpClient httpClient = new HttpClient();
	httpClient.MaxResponseContentBufferSize = int.MaxValue;
	httpClient.DefaultRequestHeaders.ExpectContinue = false;

	MultipartFormDataContent form = new MultipartFormDataContent();
	StringContent sc = new StringContent(PostBody.Text);
	sc.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("post-data");
	sc.Headers.ContentDisposition.Name = "message";
	form.Add(sc, "message");

	var fileContent = new System.Net.Http.ByteArrayContent(data);
	fileContent.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("form-data");
	fileContent.Headers.ContentDisposition.FileName = "imagefile.jpg";
	fileContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("image/jpeg");
	fileContent.Headers.ContentDisposition.Name = "source";
	form.Add(fileContent, "source");

	HttpResponseMessage response = await httpClient.PostAsync(api_base_url+"me/photos?access_token=" + accessToken, form);
	String text = await response.Content.ReadAsStringAsync();

	Debug.WriteLine(text);

	MessageDialog msg = new MessageDialog("投稿が終了しました");

	msg.Commands.Add(new UICommand(
		"確認",
		new UICommandInvokedHandler(this.CommandInvokedHandler)));

	// Set the command that will be invoked by default
	msg.DefaultCommandIndex = 0;

	// Set the command to be invoked when escape is pressed
	msg.CancelCommandIndex = 1;

	// ダイアログ表示
	await msg.ShowAsync();

}
catch (Exception Err)
{
	throw;
}

参考

Uploading a file with Windows 8 WinRT -
How-To: Use the Graph API to Upload Photos to a user’s profile - Facebook開発者

関連する記事

Windows Phone から Facebook に画像アップロード
HTML(ローカル) を使用して Facebook へ画像をアップロードする
手動で Facebook API の 60日間の アクセストークンを取得する



タグ:Windows8 C# Facebook
【Win8 ストアアプリの最新記事】
posted by lightbox at 2012-11-19 19:16 | Win8 ストアアプリ | このブログの読者になる | 更新情報をチェックする
container 終わり



フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり