ios 分享到新浪微博(底层实现)
2014-10-28 09:49
323 查看
参考(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 ];
参考(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 ];
相关文章推荐
- iOS 分享新浪微博开发通知
- 使用umeng sdk实现sns分享
- [分享]Java 线程池的原理与实现
- iOS 实现简单的界面切换
- iOS sharekit分享
- 【iOS】 推送服务的配置和实现
- iOS 消息推送原理及实现总结
- react native一键分享功能实现&原理和注意点(支持微信、qq、新浪微博等)
- 一步一步实现iOS QQ第三方登录
- 实现iOS应用内付费(In-App P…
- ios用 UIImageView实现图片幻灯片
- ios 实现谷歌地图
- Spring AOP的底层实现技术---JDK动…
- ASP.Net ViewState的实现
- IOS 分享新浪微博开发通知
- 转载:js页面文字选中后分享到新浪微博实现
- iOS-调用系统的短信和发送邮件功能,实现短信分享邮件分享
- 【web前端】js页面文字选中后分享到新浪微博实现
- 基于php&mysql实现聊天室功能的代码实例分享
- Android新浪微博分享实现