Twitter/Facebookのアカウントで認証して、アプリからタイムライン/フィードに投稿する[#8]〜Facebookのフィード投稿〜
メッセージの投稿
これが投稿の基本パターンになります。
//例によって以下の項目をインポートする #import <Parse/Parse.h> #import <FacebookSDK/FacebookSDK.h> #import <AFNetworking/AFNetworking.h> -(void)fbpost:(NSString *)message{ //プライバシー(公開範囲)の設定 NSDictionary* privacy = @{@"value":@"CUSTOM", @"friends":@"ALL_FRIENDS"}; NSMutableDictionary* params = @{@"message":message, @"privacy":[dictionary_to_JSON dictionaryToJSON:privacy], }.mutableCopy; //FBリクエストの作成 FBRequest *request = [FBRequest requestWithGraphPath:@"me/feed" parameters:params HTTPMethod:@"POST"]; //コネクションをセットしてすぐキャンセル→NSMutableURLRequestを生成するため??? //ここはStack Overflowの受け売り FBRequestConnection *requestConnection = [request startWithCompletionHandler:^(FBRequestConnection *connection, id result, NSError *error) { }]; [requestConnection cancel]; //リクエストの作成 NSMutableURLRequest *urlRequest = requestConnection.urlRequest; //送信! AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:urlRequest]; [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { // Do your success callback. NSLog(@"success!"); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { // Do your failure callback. NSLog(@"fail!"); NSLog(@"operation=%@",operation); NSLog(@"error=%@",error); }]; //進捗状況の確認 [operation setUploadProgressBlock:^(NSUInteger bytesWritten, long totalBytesWritten, long totalBytesExpectedToWrite) { NSLog(@"Sent %ld of %ld bytes", totalBytesWritten, totalBytesExpectedToWrite); }]; [[NSOperationQueue mainQueue] addOperation:operation]; }
プライバシーの設定はJSON形式で埋め込む必要があるため何らかの方法でNSDictionary→JSONの変換をする必要があります。
ここではdictionaryToJSONというクラスメソッドで変換をするという想定で記述しています。
NSMutableURLRequestの設定部分はStack Overflowを参考にしました。
テキストだけじゃなくて画像を添付する場合は以下のように書き換えます。
画像添付の場合
NSMutableDictionary* params = @{@"message":message, @"privacy":[dictionary_to_JSON dictionaryToJSON:privacy], @"picture":data, }.mutableCopy; //FBリクエストの作成 FBRequest *request = [FBRequest requestWithGraphPath:@"me/photos" parameters:params HTTPMethod:@"POST"];
paramsのところにpicture
を追加し、NSData形式の画像データを指定します。
また、requestのme/feed
がme/photos
にかわります。
動画の添付の場合
NSMutableDictionary* params = @{@"message":message, @"privacy":[dictionary_to_JSON dictionaryToJSON:privacy], @"movie.mp4":data, @"title":@"タイトル", }.mutableCopy; //FBリクエストの作成 FBRequest *request = [FBRequest requestWithGraphPath:@"me/videos" parameters:params HTTPMethod:@"POST"];
動画の場合は同じくNSData形式でデータを渡すことには変わりないのですが、keyが動画のファイル名になるようです。
あとは、動画のタイトルが付加できます。
一方、requestの方はme/videos
となります。
facebookの資料としては本家のドキュメントのほか、こちらのサイトは日本語での解説なので分かりやすかったです。