/myspaceid-demo/MySpaceID/SDK/Api/MSRestV1.m

https://github.com/heatxsink/myspace-iphone-sdk · Objective C · 520 lines · 414 code · 98 blank · 8 comment · 46 complexity · 99a1ae3b40df35643bd73ce5f1326fd4 MD5 · raw file

  1. //
  2. // MSMSRoaApi.m
  3. // MySpaceID
  4. //
  5. // Copyright MySpace, Inc. 2010. All rights reserved.
  6. //
  7. #import "MSRestV1.h"
  8. #import "OAServiceTicket.h"
  9. #import "MSApi.h"
  10. #import "MSConstants.h"
  11. @implementation MSRestV1
  12. @synthesize context;
  13. @synthesize responseData;
  14. @synthesize responseStatusCode;
  15. @synthesize httpResponse;
  16. @synthesize methodName;
  17. NSString *methodCall = @"";
  18. + (MSRestV1*) apiWithContext:(MSSecurityContext*) context
  19. {
  20. MSRestV1 *api = [[[MSRestV1 alloc] init]autorelease];
  21. api.context = [context retain];
  22. api.methodName = nil;
  23. return api;
  24. }
  25. -(id) init
  26. {
  27. if (self = [super init])
  28. {
  29. context = nil;
  30. methodName = nil;
  31. responseData = nil;
  32. httpResponse = nil;
  33. }
  34. return self;
  35. }
  36. - (void) dealloc{
  37. [context release];
  38. [methodName release];
  39. self.responseData = nil;
  40. [super dealloc];
  41. }
  42. #pragma mark -
  43. #pragma mark API Methods
  44. - (void) clearData{
  45. // reserved function for future clean up
  46. }
  47. - (NSString*) getCurrentUser
  48. {
  49. NSString *urlString = [NSString stringWithFormat:MS_V1_CURRENT_USER];
  50. return [self makeRawV1Request:urlString queryParameters:nil requestMethod:@"GET" requestBody:nil contentType:nil];
  51. }
  52. - (NSString*) getUser:(NSInteger) userId
  53. {
  54. NSString *urlString = [NSString stringWithFormat:MS_V1_USER_ID, [NSString stringWithFormat: @"%d", userId]];
  55. return [self makeRawV1Request:urlString queryParameters:nil requestMethod:@"GET" requestBody:nil contentType:nil];
  56. }
  57. - (NSString*) getMood:(NSInteger) userId
  58. {
  59. NSString *sUserId = [NSString stringWithFormat: @"%d", userId];
  60. NSString *urlString = [NSString stringWithFormat:MS_V1_MOOD, sUserId];
  61. return [self makeRawV1Request:urlString queryParameters:nil requestMethod:@"GET" requestBody:nil contentType:nil];
  62. }
  63. - (NSString*) getMoodsList: (NSInteger) userId
  64. {
  65. NSString *urlString = [NSString stringWithFormat:MS_V1_MOODS, [NSString stringWithFormat: @"%d", userId]];
  66. return [self makeRawV1Request:urlString queryParameters:nil requestMethod:@"GET" requestBody:nil contentType:nil];
  67. }
  68. - (void) setMoodStatus:(NSInteger)userId moodId:(NSInteger)moodId moodName:(NSString*)moodName moodPictureName:(NSString*)moodPictureName status:(NSString*) status
  69. {
  70. NSString *urlString = [NSString stringWithFormat:MS_V1_STATUS, [NSString stringWithFormat: @"%d", userId]];
  71. NSString *body = @"";
  72. if(moodId && moodId > 0)
  73. body = [body stringByAppendingFormat:@"moodid=%@&", moodId];
  74. if(moodName && [moodName length] > 0)
  75. body = [body stringByAppendingFormat:@"moodName=%@&", moodName];
  76. if(moodPictureName && [moodPictureName length] >0)
  77. body = [body stringByAppendingFormat:@"moodPictureName=%@&", moodPictureName];
  78. if(status)
  79. body = [body stringByAppendingFormat:@"status=%@&", status];
  80. body = [body substringToIndex:[body length] - 1];
  81. [self makeRawV1Request:urlString queryParameters:nil requestMethod:@"PUT" requestBody:[body dataUsingEncoding:NSASCIIStringEncoding] contentType:nil];
  82. }
  83. - (NSString*) getAlbums:(NSInteger)userId
  84. {
  85. return [self getAlbums:userId page:(NSInteger)nil pageSize: (NSInteger)nil];
  86. }
  87. - (NSString*) getAlbums:(NSInteger)userId page:(NSInteger)page pageSize:(NSInteger)pageSize
  88. {
  89. NSString *urlString = [NSString stringWithFormat:MS_V1_ALBUMS, [NSString stringWithFormat: @"%d", userId]];
  90. if(page && pageSize)
  91. {
  92. urlString = [urlString stringByAppendingString:[NSString stringWithFormat:@"?page=%@&pagesize=%@", [NSString stringWithFormat: @"%d", page], [NSString stringWithFormat: @"%d", pageSize]]];
  93. }
  94. return [self makeRawV1Request:urlString queryParameters:nil requestMethod:@"GET" requestBody:nil contentType:nil];
  95. }
  96. - (NSString*) getAlbum: (NSInteger) userId albumId: (NSInteger) albumId
  97. {
  98. NSString *urlString = [NSString stringWithFormat:MS_V1_ALBUM, [NSString stringWithFormat: @"%d", userId],
  99. [NSString stringWithFormat: @"%d", albumId]];
  100. return [self makeRawV1Request:urlString queryParameters:nil requestMethod:@"GET" requestBody:nil contentType:nil];
  101. }
  102. - (NSString*) getFriends: (NSInteger) userId
  103. {
  104. return [self getFriends:userId page:(NSInteger)nil pageSize:(NSInteger)nil];
  105. }
  106. - (NSString*) getFriends: (NSInteger) userId page:(NSInteger) page pageSize:(NSInteger) pageSize
  107. {
  108. NSString *urlString = [NSString stringWithFormat:MS_V1_FRIENDS, [NSString stringWithFormat: @"%d", userId]];
  109. if(page && pageSize)
  110. {
  111. urlString = [urlString stringByAppendingString:[NSString stringWithFormat:@"?page=%@&pagesize=%@", [NSString stringWithFormat: @"%d", page], [NSString stringWithFormat: @"%d", pageSize]]];
  112. }
  113. return [self makeRawV1Request:urlString queryParameters:nil requestMethod:@"GET" requestBody:nil contentType:nil];
  114. }
  115. //Need to add another call for getFriends to support FriendList and FriendShow parameters
  116. - (NSString*) getFriendStatus: (NSInteger) userId
  117. {
  118. NSString *urlString = [NSString stringWithFormat:MS_V1_FRIEND_STATUS, [NSString stringWithFormat: @"%d", userId]];
  119. return [self makeRawV1Request:urlString queryParameters:nil requestMethod:@"GET" requestBody:nil contentType:nil];
  120. }
  121. - (NSString*) getFriendship: (NSInteger) userId friendIds: (NSArray*) friendIds
  122. {
  123. NSString *friendsList = @"";
  124. for (NSString *friendId in friendIds) {
  125. friendsList = [friendsList stringByAppendingString:[NSString stringWithFormat:@"%@;", friendId]];
  126. }
  127. friendsList = [friendsList substringToIndex:[friendsList length] - 1];
  128. NSString *urlString = [NSString stringWithFormat:MS_V1_FRIENDSHIP, [NSString stringWithFormat: @"%d", userId],
  129. friendsList];
  130. return [self makeRawV1Request:urlString queryParameters:nil requestMethod:@"GET" requestBody:nil contentType:nil];
  131. }
  132. - (NSString*) getPhotos: (NSInteger) userId
  133. {
  134. return [self getPhotos:userId page:(NSInteger)nil pageSize:(NSInteger)nil];
  135. }
  136. - (NSString*) getPhotos: (NSInteger) userId page: (NSInteger) page pageSize: (NSInteger) pageSize
  137. {
  138. NSString *urlString = [NSString stringWithFormat:MS_V1_PHOTOS, [NSString stringWithFormat: @"%d", userId]];
  139. if(page && pageSize)
  140. {
  141. urlString = [urlString stringByAppendingString:[NSString stringWithFormat:@"?page=%@&pagesize=%@", [NSString stringWithFormat: @"%d", page], [NSString stringWithFormat: @"%d", pageSize]]];
  142. }
  143. return [self makeRawV1Request:urlString queryParameters:nil requestMethod:@"GET" requestBody:nil contentType:nil];
  144. }
  145. - (NSString*) getPhoto: (NSInteger) userId photoId: (NSInteger) photoId
  146. {
  147. NSString *urlString = [NSString stringWithFormat:MS_V1_PHOTO, [NSString stringWithFormat: @"%d", userId],
  148. [NSString stringWithFormat: @"%d", photoId]];
  149. return [self makeRawV1Request:urlString queryParameters:nil requestMethod:@"GET" requestBody:nil contentType:nil];
  150. }
  151. - (NSString*) getFullProfile: (NSInteger) userId
  152. {
  153. NSString *urlString = [NSString stringWithFormat:MS_V1_PROFILE, [NSString stringWithFormat: @"%d", userId],
  154. @"full"];
  155. return [self makeRawV1Request:urlString queryParameters:nil requestMethod:@"GET" requestBody:nil contentType:nil];
  156. }
  157. - (NSString*) getBasicProfile: (NSInteger) userId
  158. {
  159. NSString *urlString =[NSString stringWithFormat:MS_V1_PROFILE, [NSString stringWithFormat: @"%d", userId],
  160. @"basic"];
  161. return [self makeRawV1Request:urlString queryParameters:nil requestMethod:@"GET" requestBody:nil contentType:nil];
  162. }
  163. - (NSString*) getExtendedProfile: (NSInteger) userId
  164. {
  165. NSString *urlString = [NSString stringWithFormat:MS_V1_PROFILE, [NSString stringWithFormat: @"%d", userId],
  166. @"extended"];
  167. return [self makeRawV1Request:urlString queryParameters:nil requestMethod:@"GET" requestBody:nil contentType:nil];
  168. }
  169. - (NSString*) getStatus: (NSInteger) userId
  170. {
  171. NSString *urlString = [NSString stringWithFormat:MS_V1_STATUS, [NSString stringWithFormat: @"%d", userId]];
  172. return [self makeRawV1Request:urlString queryParameters:nil requestMethod:@"GET" requestBody:nil contentType:nil];
  173. }
  174. - (NSString*) getVideos: (NSInteger) userId
  175. {
  176. return [self getVideos:userId page:(NSInteger)nil pageSize:(NSInteger)nil];
  177. }
  178. - (NSString*) getVideos: (NSInteger) userId page: (NSInteger) page pageSize: (NSInteger) pageSize
  179. {
  180. NSString *urlString = [NSString stringWithFormat:MS_V1_VIDEOS, [NSString stringWithFormat: @"%d", userId]];
  181. if(page && pageSize)
  182. {
  183. urlString = [urlString stringByAppendingString:[NSString stringWithFormat:@"?page=%@&pagesize=%@", [NSString stringWithFormat: @"%d", page], [NSString stringWithFormat: @"%d", pageSize]]];
  184. }
  185. return [self makeRawV1Request:urlString queryParameters:nil requestMethod:@"GET" requestBody:nil contentType:nil];
  186. }
  187. - (NSString*) getVideo: (NSInteger) userId videoId: (NSInteger) videoId
  188. {
  189. NSString *urlString = [NSString stringWithFormat:MS_V1_VIDEO, [NSString stringWithFormat: @"%d", userId],
  190. [NSString stringWithFormat: @"%d", videoId]];
  191. return [self makeRawV1Request:urlString queryParameters:nil requestMethod:@"GET" requestBody:nil contentType:nil];
  192. }
  193. - (NSString*) getGlobalAppData
  194. {
  195. return [self getGlobalAppData:nil];
  196. }
  197. - (NSString*) getGlobalAppData: (NSArray*) keys
  198. {
  199. NSString *urlString = nil;
  200. if(keys)
  201. {
  202. NSString *keyList = @"";
  203. for (NSString *key in keys) {
  204. keyList = [keyList stringByAppendingString:[NSString stringWithFormat:@"%@;", key]];
  205. }
  206. keyList = [keyList substringToIndex:[keyList length] - 1];
  207. urlString =[NSString stringWithFormat:MS_V1_GLOBAL_APP_DATA_KEYS, keyList];
  208. }
  209. else
  210. {
  211. urlString = MS_V1_GLOBAL_APP_DATA;
  212. }
  213. return [self makeRawV1Request:urlString queryParameters:nil requestMethod:@"GET" requestBody:nil contentType:nil];
  214. }
  215. - (NSString*) addGlobalAppData: (NSDictionary*) globalAppDataPairs
  216. {
  217. NSString *urlString = [NSString stringWithFormat:MS_V1_GLOBAL_APP_DATA];
  218. NSString *body = @"";
  219. for (id key in globalAppDataPairs) {
  220. NSLog(@"key: %@, value: %@", key, [globalAppDataPairs objectForKey:key]);
  221. body = [body stringByAppendingFormat:@"%@=%@&", key, [globalAppDataPairs objectForKey:key]];
  222. }
  223. body = [body substringToIndex:[body length] - 1];
  224. return [self makeRawV1Request:urlString queryParameters:nil requestMethod:@"PUT" requestBody:[body dataUsingEncoding:NSASCIIStringEncoding] contentType:nil];
  225. }
  226. - (NSString*) deleteGlobalAppData: (NSArray*) keys
  227. {
  228. NSString *appendUri = @"";
  229. for (id key in keys) {
  230. appendUri = [appendUri stringByAppendingFormat:@"%@;", key];
  231. }
  232. appendUri = [appendUri substringToIndex:[appendUri length] - 1];
  233. NSString *urlString = [NSString stringWithFormat:MS_V1_GLOBAL_APP_DATA_KEYS, appendUri];
  234. return [self makeRawV1Request:urlString queryParameters:nil requestMethod:@"DELETE" requestBody:nil contentType:nil];
  235. }
  236. - (NSString*) addUserAppData: (NSInteger) userId userAppDataPairs: (NSDictionary*) userAppDataPairs
  237. {
  238. NSString *urlString = [NSString stringWithFormat:MS_V1_USER_APP_DATA, [NSString stringWithFormat: @"%d", userId]];
  239. NSString *body = @"";
  240. for (id key in userAppDataPairs) {
  241. body = [body stringByAppendingFormat:@"%@=%@&", key, [userAppDataPairs objectForKey:key]];
  242. }
  243. body = [body substringToIndex:[body length] - 1];
  244. return [self makeRawV1Request:urlString queryParameters:nil requestMethod:@"PUT" requestBody:[body dataUsingEncoding:NSASCIIStringEncoding] contentType:nil];
  245. }
  246. - (NSString*) deleteUserAppData: (NSInteger) userId keys: (NSArray*) keys
  247. {
  248. NSString *appendUri = @"";
  249. for (id key in keys) {
  250. appendUri = [appendUri stringByAppendingFormat:@"%@;", key];
  251. }
  252. appendUri = [appendUri substringToIndex:[appendUri length] - 1];
  253. NSString *urlString = [NSString stringWithFormat:MS_V1_USER_APP_DATA_KEYS, [NSString stringWithFormat: @"%d", userId], appendUri];
  254. return [self makeRawV1Request:urlString queryParameters:nil requestMethod:@"DELETE" requestBody:nil contentType:nil];
  255. }
  256. - (NSString*) getUserAppData: (NSInteger) userId
  257. {
  258. return [self getUserAppData:userId keys:nil];
  259. }
  260. - (NSString*) getUserAppData: (NSInteger) userId keys: (NSArray*) keys
  261. {
  262. NSString *urlString = nil;
  263. if(keys)
  264. {
  265. NSString *keyList = @"";
  266. for (NSString *key in keys) {
  267. keyList = [keyList stringByAppendingString:[NSString stringWithFormat:@"%@;", key]];
  268. }
  269. keyList = [keyList substringToIndex:[keyList length] - 1];
  270. urlString = [NSString stringWithFormat:MS_V1_USER_APP_DATA_KEYS, [NSString stringWithFormat: @"%d", userId] ,keyList];
  271. }
  272. else
  273. {
  274. urlString = [NSString stringWithFormat:MS_V1_USER_APP_DATA, [NSString stringWithFormat: @"%d", userId]];
  275. }
  276. return [self makeRawV1Request:urlString queryParameters:nil requestMethod:@"GET" requestBody:nil contentType:nil];
  277. }
  278. - (NSString*) getFriendAppData: (NSInteger) userId
  279. {
  280. return [self getFriendAppData:userId keys:nil];
  281. }
  282. - (NSString*) getFriendAppData: (NSInteger) userId keys: (NSArray*) keys
  283. {
  284. NSString *urlString = nil;
  285. if(keys)
  286. {
  287. NSString *keyList = @"";
  288. for (NSString *key in keys) {
  289. keyList = [keyList stringByAppendingString:[NSString stringWithFormat:@"%@;", key]];
  290. }
  291. keyList = [keyList substringToIndex:[keyList length] - 1];
  292. urlString = [NSString stringWithFormat:MS_V1_USER_FRIENDS_APP_DATA_KEYS, [NSString stringWithFormat: @"%d", userId] ,keyList];
  293. }
  294. else
  295. {
  296. urlString = [NSString stringWithFormat:MS_V1_USER_FRIENDS_APP_DATA, [NSString stringWithFormat: @"%d", userId]];
  297. }
  298. return [self makeRawV1Request:urlString queryParameters:nil requestMethod:@"GET" requestBody:nil contentType:nil];
  299. }
  300. - (NSString*) getIndicators: (NSInteger) userId
  301. {
  302. NSString *urlString = [NSString stringWithFormat:MS_V1_MOODS, [NSString stringWithFormat: @"%d", userId]];
  303. return [self makeRawV1Request:urlString queryParameters:nil requestMethod:@"GET" requestBody:nil contentType:nil];
  304. }
  305. - (void) sendNotification: (NSInteger) appId recipients: (NSArray*) recipients content: (NSString*) content button0Surface:(NSString*) button0Surface button0Label:(NSString*) button0Label button1Surface:(NSString*) button1Surface button1Label:(NSString*) button1Label mediaItem: (NSString*) mediaItem
  306. {
  307. }
  308. #pragma mark --Activities--
  309. - (NSString*) getActivities:(NSString*) userId activityTypes:(NSString*)activityTypes extensions:(NSString*)extensions
  310. composite:(NSString*)composite culture:(NSString*)culture datetime:(NSString*)dateTime pageSize:(NSString*)pageSize{
  311. NSString *urlString = [NSString stringWithFormat:MS_V1_ACTIVITIES, userId];
  312. NSMutableDictionary *params = [self makeQueryDictionary:nil format:nil activityTypes:activityTypes
  313. extensions:extensions composite:composite culture:culture datetime:dateTime pageSize:pageSize];
  314. return [self makeRawV1Request:urlString queryParameters:params requestMethod:@"GET" requestBody:nil contentType:nil];
  315. }
  316. - (NSString*) getFriendActivities:(NSString*) userId activityTypes:(NSString*)activityTypes extensions:(NSString*)extensions
  317. composite:(NSString*)composite culture:(NSString*)culture datetime:(NSString*)dateTime pageSize:(NSString*)pageSize{
  318. NSString *urlString = [NSString stringWithFormat:MS_V1_FRIEND_ACTIVITIES, userId];
  319. NSMutableDictionary *params = [self makeQueryDictionary:nil format:nil activityTypes:activityTypes
  320. extensions:extensions composite:composite culture:culture datetime:dateTime pageSize:pageSize];
  321. return [self makeRawV1Request:urlString queryParameters:params requestMethod:@"GET" requestBody:nil contentType:nil];
  322. }
  323. #pragma mark --Raw Requests
  324. - (NSString*) makeRawV1Request:(NSString*)uri queryParameters:(NSDictionary*)queryParams requestMethod:(NSString*)requestMethod
  325. requestBody:(NSData*)requestBody contentType:(NSString*)contentType{
  326. [self clearData];
  327. responseData = nil;
  328. if(context)
  329. {
  330. NSString *urlString = [uri copy];
  331. [uri release];
  332. NSString *queryString = @"?";
  333. NSString *amperSand = @"";
  334. for(id key in queryParams)
  335. {
  336. if(![queryString isEqualToString:@"?"])
  337. amperSand = @"&";
  338. queryString = [queryString stringByAppendingString:[NSString stringWithFormat:@"%@%@=%@", amperSand, key, [queryParams objectForKey:key]]];
  339. }
  340. if([queryString isEqualToString:@"?"])
  341. queryString = @"";
  342. NSURL *url = [NSURL URLWithString: [urlString stringByAppendingString:queryString]];
  343. [context makeRequest:url method:requestMethod body:requestBody contentType:contentType delegate:self];
  344. }
  345. NSString* dataAsString = [[NSString alloc] initWithData:responseData encoding:NSASCIIStringEncoding];
  346. return [dataAsString autorelease];
  347. }
  348. - (NSMutableDictionary*) makeQueryDictionary:(NSArray*) fields
  349. format:(NSString*)format activityTypes:(NSString*)activityTypes extensions:(NSString*)extensions
  350. composite:(NSString*)composite culture:(NSString*)culture datetime:(NSString*)dateTime pageSize:(NSString*)pageSize {
  351. NSMutableDictionary *queryParams = [[NSMutableDictionary new] autorelease];
  352. NSString *fieldList = nil;
  353. if (fields) {
  354. fieldList = @"";
  355. for (NSString *field in fields) {
  356. fieldList = [fieldList stringByAppendingString:[NSString stringWithFormat:@"%@,", field]];
  357. }
  358. fieldList = [fieldList substringToIndex:[fieldList length] - 1];
  359. }
  360. if (fieldList) {
  361. [queryParams setValue:fieldList forKey:@"fields"];
  362. }
  363. if (format) {
  364. [queryParams setValue:format forKey:@"format"];
  365. }
  366. if (pageSize) {
  367. [queryParams setValue:pageSize forKey:@"page_size"];
  368. }
  369. if (extensions) {
  370. [queryParams setValue:extensions forKey:@"extensions"];
  371. }
  372. if (activityTypes) {
  373. [queryParams setValue:activityTypes forKey:@"activityTypes"];
  374. }
  375. if (composite) {
  376. [queryParams setValue:composite forKey:@"composite"];
  377. }
  378. if (culture) {
  379. [queryParams setValue:culture forKey:@"culture"];
  380. }
  381. if (dateTime) {
  382. [queryParams setValue:dateTime forKey:@"dateTime"];
  383. }
  384. return queryParams;
  385. }
  386. #pragma mark -
  387. #pragma mark OAResponseDelegate methods
  388. - (void)apiTicket:(OAServiceTicket *)ticket didFinishWithData:(NSData *)data {
  389. NSString *dataOutput = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
  390. self.httpResponse = (NSHTTPURLResponse*)[ticket response];
  391. self.responseStatusCode = [httpResponse statusCode];
  392. NSLog(@"UrlRequest: %@, Http Status Code: %@, Http Response: %@",
  393. [[[ticket response] URL] absoluteString],
  394. [NSString stringWithFormat:@"%d", responseStatusCode],
  395. dataOutput);
  396. if (ticket.succeeded) {
  397. self.responseData = data;
  398. }
  399. [dataOutput release];
  400. if(context.MSDelegate)
  401. {
  402. NSString* dataAsString = [[NSString alloc] initWithData:responseData encoding:NSASCIIStringEncoding];
  403. if ([context.MSDelegate respondsToSelector:@selector(api:didFinishMethod:withValue:withStatusCode:)]) {
  404. [context.MSDelegate api:self didFinishMethod:self.methodName withValue:dataAsString withStatusCode:self.responseStatusCode];
  405. }
  406. }
  407. }
  408. - (void) apiTicket:(OAServiceTicket *)ticket didFinishWithError:(NSError *)error{
  409. NSString *message = [NSString stringWithFormat:@"Http Response Error %@ %@",
  410. [error localizedDescription],
  411. [error localizedFailureReason]];
  412. NSLog(@"%@", message);
  413. self.httpResponse = (NSHTTPURLResponse*)[ticket response];
  414. self.responseStatusCode = [httpResponse statusCode];
  415. if(context.MSDelegate)
  416. {
  417. if ([context.MSDelegate respondsToSelector:@selector(api:didFailMethod:withError:)]) {
  418. [context.MSDelegate api:self didFailMethod:self.methodName withError:error];
  419. }
  420. }
  421. }
  422. @end