NSMutableRequest и Flickr API для загрузки изображений

Я использую Flickr API для своего приложения, чтобы управлять фотографией пользователя. Я решил сделать аутентификацию, используя классы Apple, и она отлично работает для меня. Теперь мое приложение аутентифицировано и имеет все необходимые токены и секретные ключи, поэтому можно выполнять запросы GET с аутентификацией для таких методов, как flickr.photos.search, flickr.test.login и так далее. Но я потратил несколько дней, пытаясь выполнить загрузку, используя http://api.flickr.com/services/upload/ и их инструкции здесь. Они говорят, что запрос должен иметь аргумент "фото", и этот параметр не должен быть включен в подпись. Это понятно, но я понятия не имею, как реализовать этот параметр запроса.

#import "FlickrUploader.h"
#import "HMACSH1.h"
#import "Prefs.h"
#import "NSString+URLEncode.h"

@implementation FlickrUploader

- (void)uploadPhotoAtPath:(NSString*)filePath {

    NSString *upload_api_url = @"http://api.flickr.com/services/upload/";
    NSString *oauth_nonce = [NSString stringWithFormat:@"%d", 10000000 + arc4random()%1000000];
    NSString *oauth_timestamp   = [NSString stringWithFormat:@"%d", (long)[[NSDate date] timeIntervalSince1970]];
    NSString *oauth_consumer_key = CONSUMER_KEY;
    NSString *oauth_signature_method = @"HMAC-SHA1";
    NSString *oauth_version = @"1.0";
    NSString *oauth_token = [[NSUserDefaults standardUserDefaults] objectForKey:OAUTH_ACCESS_TOKEN_KEY];
//creating basestring to make signature without a 'photo' argument according to API   
    NSMutableString *basestring = [[NSMutableString alloc] initWithCapacity:8];

    [basestring appendFormat:@"&oauth_consumer_key=%@",oauth_consumer_key];
    [basestring appendFormat:@"&oauth_nonce=%@",oauth_nonce];    
    [basestring appendFormat:@"&oauth_signature_method=%@",oauth_signature_method];
    [basestring appendFormat:@"&oauth_timestamp=%@",oauth_timestamp];
    [basestring appendFormat:@"&oauth_token=%@", oauth_token];
    [basestring appendFormat:@"&oauth_version=%@",oauth_version];
//this is may class to make HMAC-SHA1 signature (it works for authentication and for GET requests)
    HMACSH1 *hMACSH1 = [[HMACSH1 alloc] init];

    NSMutableString *urlEncodedBaseString = [[NSMutableString alloc] initWithCapacity:3];
    [urlEncodedBaseString appendString:@"POST"];
    [urlEncodedBaseString appendFormat:@"&%@",[upload_api_url urlEncodedString]];
    [urlEncodedBaseString appendFormat:@"&%@",[basestring urlEncodedString]];


    NSString *oauth_token_secret = [[NSUserDefaults standardUserDefaults] objectForKey:OAUTH_TOKEN_SECRET_KEY];

    NSString *hash_key = [CONSUMER_SECRET stringByAppendingFormat:@"&%@",oauth_token_secret];

    NSString *oauth_signature = [hMACSH1 hmacSH1base64ForData:urlEncodedBaseString keyValue:hash_key];

//creating url for request    
    NSMutableString *urlString = [[NSMutableString alloc] initWithCapacity:8];

    [urlString appendFormat:@"%@",upload_api_url];
    [urlString appendFormat:@"?"];
    [urlString appendString:basestring];
    [urlString appendFormat:@"&oauth_signature=%@", oauth_signature];

    NSURL *authURL = [[NSURL alloc] initWithString:urlString]; 

    NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:authURL
                                                           cachePolicy:NSURLRequestUseProtocolCachePolicy
                                                       timeoutInterval:30.0];
    request.HTTPMethod = @"POST";

    UIImage *img = [UIImage imageNamed:filePath];
    NSData *imgData = UIImageJPEGRepresentation(img, 0.8);

//here I don't know what to do :((( perhaps NSOutputStream



}

0 ответов

Другие вопросы по тегам