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

本文详细介绍如何使用新浪微博API进行开发者注册、获取AppKey、用户登录验证及发布带图片的状态等操作。通过具体的代码示例,帮助读者理解整个流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

1.首先在http://open.t.sina.com.cn/中申请成为开发者,再创建不同的应用,获得相应的App Key(在下面链接中的source即为app key)

2.登录认证:

NSString*authString = [NSStringstringWithFormat:@"%@:%@",sinaIDField.text,sinaPasswordField.text];

NSData*authData = [authStringdataUsingEncoding:NSUTF8StringEncoding];

NSString*authValue = [NSStringstringWithFormat:@"Basic %@",[authDatabase64EncodingWithLineLength:80]];

NSURL*url = [NSURLURLWithString:@"http://api.t.sina.com.cn/account/verify_credentials.xml?source=3930264715"];

NSMutableURLRequest*request = [[NSMutableURLRequestalloc]initWithURL:url];

[requestsetHTTPMethod:@"GET"];

[requestsetValue:authValueforHTTPHeaderField:@"Authorization"];

NSURLResponse*response;

NSError*error;

[NSURLConnectionsendSynchronousRequest:requestreturningResponse:&responseerror:&error];

[requestrelease];

NSHTTPURLResponse*httpResponse = (NSHTTPURLResponse*)response;

intstatusCode = [httpResponsestatusCode];

NSLog(@"status code = %d",statusCode);

if(statusCode !=200) {

alertTitle =@"帐号或密码错误";

alertMassage =@"请您输入正确的帐号和密码!";

}else{

alertTitle =@"";

alertMassage =@"登录成功!";

}

}

UIAlertView*alert = [[UIAlertViewalloc]initWithTitle:alertTitle

message:alertMassage

delegate:nilcancelButtonTitle:@"确定"

otherButtonTitles:nil];

[alertshow];

[alertrelease];

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

NSString*authString = [NSStringstringWithFormat:@"%@:%@",[[NSUserDefaultsstandardUserDefaults]objectForKey:@"sinaID"],[[NSUserDefaultsstandardUserDefaults]objectForKey:@"sinaPassword"]];

NSData*authData = [authStringdataUsingEncoding:NSUTF8StringEncoding];

NSString*authValue = [NSStringstringWithFormat:@"Basic %@",[authDatabase64EncodingWithLineLength:80]];

NSString*boundary =@"0xKhTmLbOuNdArYckkk";

NSString*filename =@"test.jpg";

NSData*imageData =UIImageJPEGRepresentation(shareImage,1);

NSString*bodyPrefixString= [NSStringstringWithFormat:@"--%@rn", boundary];

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

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

NSString*contentImageType= [NSStringstringWithFormat:@"Content-Type: image/%@rn", [filenamepathExtension]];

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

NSString*bodyUpdateField = [NSStringstringWithFormat:@"Content-Disposition: form-data;name="status"rnrn%@rn",[NSStringstringWithFormat:@"%@",textView.text]];

NSMutableData*postBody = [NSMutableDatadata];

[postBodyappendData:[bodyPrefixStringdataUsingEncoding:NSUTF8StringEncodingallowLossyConversion:NO]];

[postBodyappendData:[bodyUpdateFielddataUsingEncoding:NSUTF8StringEncoding]];

[postBodyappendData:[bodyPrefixStringdataUsingEncoding:NSUTF8StringEncodingallowLossyConversion:NO]];

[postBodyappendData:[contentDispositiondataUsingEncoding:NSUTF8StringEncoding]];

[postBodyappendData:[contentImageTypedataUsingEncoding:NSUTF8StringEncoding]];

[postBodyappendData:[contentTransferdataUsingEncoding:NSUTF8StringEncoding]];

[postBodyappendData:imageData];

[postBodyappendData:[bodySuffixStringdataUsingEncoding:NSUTF8StringEncodingallowLossyConversion:NO]];

NSString*baseURL = [NSStringstringWithFormat:@"http://api.t.sina.com.cn/statuses/upload.xml?source=3930264715"];

NSURL*url = [NSURLURLWithString:baseURL];

NSMutableURLRequest*mainRequest = [[NSMutableURLRequestalloc]initWithURL:url

cachePolicy:NSURLRequestUseProtocolCachePolicy

timeoutInterval:30.0f];

[mainRequestsetHTTPMethod:@"POST"];

[mainRequestsetValue:authValueforHTTPHeaderField:@"Authorization"];

NSString*contentType = [NSStringstringWithFormat:@"multipart/form-data; boundary=%@", boundary,nil];

[mainRequestsetValue:contentTypeforHTTPHeaderField:@"Content-Type"];

[mainRequestsetHTTPBody:postBody];

NSURLResponse*shareResponse;

NSError*error;

NSData*responseData = [NSURLConnectionsendSynchronousRequest:mainRequestreturningResponse:&shareResponseerror:&error];

NSString*responseString = [[NSStringalloc]initWithData:responseDataencoding:NSUTF8StringEncoding];

NSHTTPURLResponse*httpResponse = (NSHTTPURLResponse*)shareResponse;

intstatusCode = [httpResponsestatusCode];

NSLog(@"status code = %d",statusCode);

BOOLsucceed =NO;

if(statusCode ==200) {

succeed =YES;

}

[mainRequestrelease];

NSLog(@"response string : %@",responseString);

[responseStringrelease];

[uploadWaitingstopAnimating];

NSString*message =nil;

if(succeed) {

message =@"分享成功";

}else{

message =@"分享失败";

}

UIAlertView*alert = [[UIAlertViewalloc]initWithTitle:@""message:message

delegate:self

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

[alertshow];

[alertrelease];

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];

}

CH341A编程器是一款广泛应用的通用编程设备,尤其在电子工程和嵌入式系统开发领域中,它被用来烧录各种类型的微控制器、存储器和其他IC芯片。这款编程器的最新版本为1.3,它的一个显著特点是增加了对25Q256等32M芯片的支持。 25Q256是一种串行EEPROM(电可擦可编程只读存储器)芯片,通常用于存储程序代码、配置数据或其他非易失性信息。32M在这里指的是存储容量,即该芯片可以存储32兆位(Mbit)的数据,换算成字节数就是4MB。这种大容量的存储器在许多嵌入式系统中都有应用,例如汽车电子、工业控制、消费电子设备等。 CH341A编程器的1.3版更新,意味着它可以与更多的芯片型号兼容,特别是针对32M容量的芯片进行了优化,提高了编程效率和稳定性。26系列芯片通常指的是Microchip公司的25系列SPI(串行外围接口)EEPROM产品线,这些芯片广泛应用于各种需要小体积、低功耗和非易失性存储的应用场景。 全功能版的CH341A编程器不仅支持25Q256,还支持其他大容量芯片,这意味着它具有广泛的兼容性,能够满足不同项目的需求。这包括但不限于微控制器、EPROM、EEPROM、闪存、逻辑门电路等多种类型芯片的编程。 使用CH341A编程器进行编程操作时,首先需要将设备通过USB连接到计算机,然后安装相应的驱动程序和编程软件。在本例中,压缩包中的"CH341A_1.30"很可能是编程软件的安装程序。安装后,用户可以通过软件界面选择需要编程的芯片类型,加载待烧录的固件或数据,然后执行编程操作。编程过程中需要注意的是,确保正确设置芯片的电压、时钟频率等参数,以防止损坏芯片。 CH341A编程器1.3版是面向电子爱好者和专业工程师的一款实用工具,其强大的兼容性和易用性使其在众多编程器中脱颖而出。对于需要处理25Q256等32M芯片的项目,或者26系列芯片的编程工作,CH341A编程器是理想的选择。通过持续的软件更新和升级,它保持了与现代电子技术同步,确保用户能方便地对各种芯片进行编程和调试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值