参考(tiny4cocoa):http://tiny4cocoa.com/thread-1771-1-1.html
参考(csdn):http://blog.csdn.net/sjzsp/article/details/6338842
1. 首先在http://open.t.sina.com.cn / 中申请成为开发者,再创建不同的应用,获得相应的 App Key (在下面链接中的source即为app key)
2. 登录认证:
NSString *authString = [ NSString stringWithFormat : @"%@:%@" , sinaIDField . text ,sinaPasswordField . text ];
NSData *authData = [authString dataUsingEncoding : NSUTF8StringEncoding ];
NSString *authValue = [ NSString stringWithFormat : @"Basic %@" ,[authData base64EncodingWithLineLength : 80 ]];
NSURL *url = [ NSURL URLWithString : @"http://api.t.sina.com.cn/account/verify_credentials.xml?source=3930264715 " ];
NSMutableURLRequest *request = [[ NSMutableURLRequest alloc ] initWithURL :url];
[request setHTTPMethod : @"GET" ];
[request setValue :authValue forHTTPHeaderField : @"Authorization" ];
NSURLResponse *response;
NSError *error;
[ NSURLConnection sendSynchronousRequest :request returningResponse :&response error :&error];
[request release ];
NSHTTPURLResponse *httpResponse = ( NSHTTPURLResponse *)response;
int statusCode = [httpResponse statusCode ];
NSLog ( @"status code = %d" ,statusCode);
if (statusCode != 200 ) {
alertTitle = @" 帐号或密码错误 " ;
alertMassage = @" 请您输入正确的帐号和密码! " ;
} else {
alertTitle = @"" ;
alertMassage = @" 登录成功! " ;
}
}
UIAlertView *alert = [[ UIAlertView alloc ] initWithTitle :alertTitle
message :alertMassage
delegate : nil cancelButtonTitle : @" 确定 "
otherButtonTitles : nil ];
[alert show ];
[alert release ];
3. 将内容(图片 文字)发送到新浪微博
NSString *authString = [ NSString stringWithFormat : @"%@:%@" ,[[ NSUserDefaults standardUserDefaults ] objectForKey : @"sinaID" ],[[ NSUserDefaults standardUserDefaults ] objectForKey : @"sinaPassword" ]];
NSData *authData = [authString dataUsingEncoding : NSUTF8StringEncoding ];
NSString *authValue = [ NSString stringWithFormat : @"Basic %@" ,[authData base64EncodingWithLineLength : 80 ]];
NSString *boundary = @"0xKhTmLbOuNdArYckkk" ;
NSString *filename = @" test .jpg" ;
NSData *imageData = UIImageJPEGRepresentation (shareImage, 1 );
NSString *bodyPrefixString = [ NSString stringWithFormat : @"--%@/r/n" , boundary];
NSString *bodySuffixString = [ NSString stringWithFormat : @"/r/n--%@--/r/n" , boundary];
NSString *contentDisposition = [ NSString stringWithFormat : @"Content-Disposition: form-data; name="pic"; filename="%@"/r/n" , filename];
NSString *contentImageType = [ NSString stringWithFormat : @"Content-Type: image/%@/r/n" , [filename pathExtension ]];
NSString *contentTransfer = @"Content-Transfer-Encoding: binary/r/n/r/n" ;
NSString *bodyUpdateField = [ NSString stringWithFormat : @"Content-Disposition: form-data;name="status"/r/n/r/n%@/r/n" ,[ NSString stringWithFormat : @"%@" , textView . text ]];
NSMutableData *postBody = [ NSMutableData data ];
[postBody appendData :[bodyPrefixString dataUsingEncoding : NSUTF8StringEncoding allowLossyConversion : NO ]];
[postBody appendData :[bodyUpdateField dataUsingEncoding : NSUTF8StringEncoding ]];
[postBody appendData :[bodyPrefixString dataUsingEncoding : NSUTF8StringEncoding allowLossyConversion : NO ]];
[postBody appendData :[contentDisposition dataUsingEncoding : NSUTF8StringEncoding ]];
[postBody appendData :[contentImageType dataUsingEncoding : NSUTF8StringEncoding ]];
[postBody appendData :[contentTransfer dataUsingEncoding : NSUTF8StringEncoding ]];
[postBody appendData :imageData];
[postBody appendData :[bodySuffixString dataUsingEncoding : NSUTF8StringEncoding allowLossyConversion : NO ]];
NSString *baseURL = [ NSString stringWithFormat :@"http://api.t.sina.com.cn/statuses/upload.xml?source=3930264715 " ];
NSURL *url = [ NSURL URLWithString :baseURL];
NSMutableURLRequest *mainRequest = [[ NSMutableURLRequest alloc ] initWithURL :url
cachePolicy : NSURLRequestUseProtocolCachePolicy
timeoutInterval : 30.0f ];
[mainRequest setHTTPMethod : @"POST" ];
[mainRequest setValue :authValue forHTTPHeaderField : @"Authorization" ];
NSString *contentType = [ NSString stringWithFormat : @"multipart/form-data; boundary=%@" , boundary, nil ];
[mainRequest setValue :contentType forHTTPHeaderField : @"Content-Type" ];
[mainRequest setHTTPBody :postBody];
NSURLResponse *shareResponse;
NSError *error;
NSData *responseData = [ NSURLConnection sendSynchronousRequest :mainRequest returningResponse:&shareResponse error :&error];
NSString *responseString = [[ NSString alloc ] initWithData :responseData encoding :NSUTF8StringEncoding ];
NSHTTPURLResponse *httpResponse = ( NSHTTPURLResponse *)shareResponse;
int statusCode = [httpResponse statusCode ];
NSLog ( @"status code = %d" ,statusCode);
BOOL succeed = NO ;
if (statusCode == 200 ) {
succeed = YES ;
}
[mainRequest release ];
NSLog ( @"response string : %@" ,responseString);
[responseString release ];
[ uploadWaiting stopAnimating ];
NSString *message = nil ;
if (succeed) {
message = @" 分享成功 " ;
} else {
message = @" 分享失败 " ;
}
UIAlertView *alert = [[ UIAlertView alloc ] initWithTitle : @"" message :message
delegate : self
cancelButtonTitle : @" 确定 " otherButtonTitles : nil ];
[alert show ];
[alert release ];