iPhoneからTwitterにつぶやくコード

http://devimages.apple.com/iphone/program/images/index_develop.png
現在作っているプログラムの中でTwitterにつぶやく部分のコードです。








#import "NSData+Base64.h"

#define POST_URL @"http://twitter.com/statuses/update.json"
#define BASIC_AUTH @"ログイン名:パスワード"

- (IBAction)onPushPost:(id)sender {
	NSString *basicAuthToken = [[BASIC_AUTH dataUsingEncoding:NSUTF8StringEncoding] base64EncodedString];
	NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:POST_URL]
                                                               cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:30.0];
	[request setHTTPMethod:@"POST"];
	[request setValue:[@"Basic " stringByAppendingString:basicAuthToken] forHTTPHeaderField:@"Authorization"];
	[request setHTTPBody:[[@"status=" stringByAppendingString:[postText.text
                                                            stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]
						  dataUsingEncoding:NSASCIIStringEncoding]];
	NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest:request delegate:self];
	if (conn == nil) {
		statusLable.text = @"Connection Error";
	} else {
		statusLable.text = @"送信中...";
		[activityIndicator startAnimating];
	}
}

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
	int statusCode = ((NSHTTPURLResponse *)response).statusCode;
	
	if ((statusCode / 100) == 2) {
		statusLable.text = @"送信完了";
	} else {
		statusLable.text = [NSHTTPURLResponse localizedStringForStatusCode:statusCode];
	}
	[activityIndicator stopAnimating];
}

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
	statusLable.text = [error localizedDescription];
	[activityIndicator stopAnimating];
}

このコードと関連する GUI

  • postText TwitterにポストするテキストTextView
  • statusLable 状態等の表示label
  • activityIndicator 動作中表示のくるくるアニメ


コードの大部分は、iPhone Dev Centerにあるサンプル SimpleURLConnections です。Base64エンコーディングのコードは Cocoa with Love: Base64 encoding options on the Mac and iPhone からダウンロードしました。
後は Google先生にもお世話になりました。