Created
June 16, 2011 06:00
-
-
Save Gargo/1028758 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// EBVKAPI.m | |
// anyMusicAnywhere | |
// | |
// Created by Eric_Bro on 28.02.11. | |
// Copyright 2011 DevStudio. All rights reserved. | |
// | |
#import "EBVKAPI.h" | |
NSDictionary* dictionaryWithSessionParametersFromVKAPI(NSString* email, | |
NSString* password) { | |
// Посылаем "пустой" запрос - для того чтобы получить куки. | |
NSURL *url = [NSURL URLWithString: | |
[NSString stringWithFormat:@"http://vk.com/login.php?email=%@&pass=%@&m=1",email,password]]; | |
NSData *empty_request = [NSURLConnection sendSynchronousRequest:[NSURLRequest requestWithURL:url] | |
returningResponse:nil | |
error:nil]; | |
empty_request = nil; | |
// Получаем исходный код страницы авторизации | |
NSString *new_url = [NSString stringWithFormat:@"http://vk.com/login.php?app=%@&layout=popup&type=browser&settings=16383",sAPI_ID); | |
NSData *raw_data = [NSURLConnection sendSynchronousRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:new_url]] | |
returningResponse:nil | |
error:nil]; | |
NSString *pageSource = [[NSString alloc] initWithData:raw_data encoding: NSASCIIStringEncoding]; | |
// Проверка пароля\мыла | |
if ([pageSource rangeOfString:@"var app_settings_hash = \'\';"].length != 0) { | |
NSLog(@"Wrong pass or\\and email!"); | |
exit(-1); | |
} | |
// Ищем в коде значение переменной "auth_hash" | |
NSString *auth_hash = getStringBetweenStrings(@"var auth_hash = \'",@"\';",pageSource); | |
// Получаем параметры сессии | |
JSONDecoder *decoder = [JSONDecoder decoder]; | |
[pageSource release]; | |
return [decoder parseJSONData:[NSURLConnection sendSynchronousRequest:[NSURLRequest requestWithURL:[NSURL URLWithString: [NSString stringWithFormat:@"http://vk.com/login.php?act=a_auth&app=%@&hash=%@&permanent=1",sAPI_ID,auth_hash]]] | |
returningResponse:nil | |
error:nil]]; | |
} | |
NSDictionary * executeAPIMethod(NSString* nameOfMethod, | |
NSMutableDictionary* parametersOfMethod, | |
NSString* formatOfAnswer, | |
NSDictionary *sessionVar) { | |
NSString *bodyOfRequest =@""; | |
NSString *sig = @""; | |
sig = [sig stringByAppendingFormat:@"%@",[sessionVar objectForKey:@"mid"]]; | |
[parametersOfMethod setObject:sAPI_ID | |
forKey:@"api_id"]; | |
[parametersOfMethod setObject:formatOfAnswer | |
forKey:@"format"]; | |
[parametersOfMethod setObject:@"3.0" | |
forKey:@"v"]; | |
[parametersOfMethod setObject:nameOfMethod | |
forKey:@"method"]; | |
NSArray *arrayOfAllKeys = [[parametersOfMethod allKeys] sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)]; | |
for (id obj in arrayOfAllKeys){ | |
bodyOfRequest = [bodyOfRequest stringByAppendingFormat:@"&%@=%@", | |
(NSString*)obj, [[parametersOfMethod objectForKey:obj] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; | |
sig = [sig stringByAppendingFormat:@"%@=%@", | |
(NSString*)obj, [parametersOfMethod objectForKey:obj]]; | |
} | |
sig = [sig stringByAppendingFormat:@"%@",[sessionVar objectForKey:@"secret"]]; | |
sig = MD5(sig); | |
bodyOfRequest = [bodyOfRequest substringFromIndex:1]; | |
bodyOfRequest = [bodyOfRequest stringByAppendingFormat:@"&sid=%@&sig=%@",[sessionVar valueForKey:@"sid"],sig]; | |
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL: | |
[NSURL URLWithString: | |
[NSString stringWithFormat:@"http://api.vkontakte.ru/api.php?%@",bodyOfRequest]]]; | |
NSData *VKanswer = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; | |
return [[JSONDecoder decoder] parseJSONData:VKanswer]; | |
} | |
NSString* getStringBetweenStrings(NSString *first,NSString*second,NSString*main){ | |
NSRange rangeofFirst = [main rangeOfString:first]; | |
NSRange rangeOfSecond = [main rangeOfString:second]; | |
if ((rangeofFirst.length == 0) || (rangeOfSecond.length == 0)) { | |
return nil; | |
} | |
NSString *result = [[main substringFromIndex:rangeofFirst.location+rangeofFirst.length] | |
substringToIndex: | |
[[main substringFromIndex:rangeofFirst.location+rangeofFirst.length] rangeOfString:second].location]; | |
return result; | |
} | |
NSString* MD5(NSString*input) { | |
const char* str = [input UTF8String]; | |
unsigned char result[CC_MD5_DIGEST_LENGTH]; | |
CC_MD5(str, strlen(str), result); | |
NSMutableString *ret = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH*2]; | |
for(int i = 0; i<CC_MD5_DIGEST_LENGTH; i++) { | |
[ret appendFormat:@"%02x",result[i]]; | |
} | |
return ret; | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment