iPhone程序中将内容分享到新浪微博

来源:互联网 发布:js函数有返回值吗 编辑:程序博客网 时间:2024/05/21 17:13

因为要用到,所以找来,和大家分享:

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 allocinitWithURL: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 allocinitWithTitle:alertTitle

message:alertMassage

delegate:nil cancelButtonTitle:@"确定"

otherButtonTitles:nil];

[alert show];

[alert release];

 

 

3.将内容(图片 文字)发送到新浪微博

NSString *authString = [NSString stringWithFormat:@"%@:%@",[[NSUserDefaults standardUserDefaultsobjectForKey:@"sinaID"],[[NSUserDefaults standardUserDefaultsobjectForKey:@"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:@"--%@rn", boundary];

NSString *bodySuffixString = [NSString stringWithFormat:@"rn--%@--rn", boundary];

NSString *contentDisposition = [NSString stringWithFormat:@"Content-Disposition: form-data; name="pic"; filename="%@"rn", filename];

NSString *contentImageType = [NSString stringWithFormat:@"Content-Type: image/%@rn", [filename pathExtension]];

NSString *contentTransfer @"Content-Transfer-Encoding: binaryrnrn";

 

NSString *bodyUpdateField = [NSString stringWithFormat:@"Content-Disposition: form-data;name="status"rnrn%@rn",[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 allocinitWithURL: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 allocinitWithData: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 allocinitWithTitle:@"" message:message

delegate:self

cancelButtonTitle:@"确定" otherButtonTitles:nil];

[alert show];

[alert release];

 

ps:苹果不支持64位编码格式,所以需要自己编写编码方法

static char encodingTable[64] = {

'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P',

'Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f',

'g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v',

'w','x','y','z','0','1','2','3','4','5','6','7','8','9','+','/' 

};

- (NSString *) base64EncodingWithLineLength:(unsigned int) lineLength data:(NSData *)dataObject {

const unsigned char     *bytes = [dataObject bytes];

NSMutableString *result = [NSMutableString stringWithCapacity:[dataObject length]];

unsigned long ixtext = 0;

unsigned long lentext = [dataObject length];

long ctremaining = 0;

unsigned char inbuf[3], outbuf[4];

short i = 0;

short charsonline = 0, ctcopy = 0;

unsigned long ix = 0;

while( YES ) {

ctremaining = lentext - ixtext;

if( ctremaining <= 0 ) break;

for( i = 0; i < 3; i++ ) {

ix = ixtext + i;

if( ix < lentext ) inbuf[i] = bytes[ix];

else inbuf [i] = 0;

}

outbuf [0] = (inbuf [0] & 0xFC) >> 2;

outbuf [1] = ((inbuf [0] & 0x03) << 4) | ((inbuf [1] & 0xF0) >> 4);

outbuf [2] = ((inbuf [1] & 0x0F) << 2) | ((inbuf [2] & 0xC0) >> 6);

outbuf [3] = inbuf [2] & 0x3F;

ctcopy = 4;

switch( ctremaining ) {

case 1:

ctcopy = 2;

break;

case 2:

ctcopy = 3;

break;

}

for( i = 0; i < ctcopy; i++ )

[result appendFormat:@"%c", encodingTable[outbuf[i]]];

for( i = ctcopy; i < 4; i++ )

[result appendString:@"="];

ixtext += 3;

charsonline += 4;

if( lineLength > 0 ) {

if (charsonline >= lineLength) {

charsonline = 0;

[result appendString:@"/n"];

}

}

}

return [NSString stringWithString:result];

}

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 苹果5很卡怎么办 笔记本屏幕卡顿怎么办 手机外屏幕失灵怎么办 6p手机屏幕失灵怎么办 home键指纹失灵怎么办 小米触屏不灵敏怎么办 vivo手机音量小怎么办 iphone尾插松动怎么办 充电头接触不良怎么办 苹果充电口松动怎么办 苹果手机速度慢怎么办 苹果6手机屏幕失灵怎么办 手机膜有静电怎么办 手机充电带静电怎么办 苹果6锁屏键坏了怎么办 ipad触摸屏乱点怎么办 6p屏幕失灵怎么办 iphone屏幕压伤怎么办 笔记本光标不动了怎么办 电脑光标不动了怎么办 苹果六按键失灵怎么办 iphone屏幕碎了怎么办 oppo手机内屏坏了怎么办 手机充电变慢怎么办 手机内屏分离怎么办 电脑屏幕摔碎了怎么办 三星手机外屏碎了怎么办 苹果手机外屏碎了怎么办 iphone6s听筒坏了怎么办 苹果x外屏碎了怎么办 苹果手机屏摔坏了怎么办 苹果8外屏摔碎了怎么办 苹果7内屏坏了怎么办 苹果手机屏幕里面有水痕怎么办 iphone6屏幕摔裂怎么办 苹果手机电池坏了怎么办 苹果手机充电器坏了怎么办 苹果充电器老是坏怎么办 苹果手机屏幕失控了怎么办 手机自己乱点怎么办 手机点屏幕没用怎么办