TNLExample/TAPI/TAPISearchRequests.m (91 lines of code) (raw):

// // TAPISearchRequests.m // TNLExample // // Created on 5/24/18. // Copyright © 2020 Twitter. All rights reserved. // #import "TAPIError.h" #import "TAPISearchRequests.h" @implementation TAPISearchRequest { NSString *_query; TNLParameterCollection *_nextResultsParams; } - (instancetype)initWithQuery:(NSString *)query { if (self = [super init]) { _query = [query copy]; } return self; } - (instancetype)initWithNextResultsObject:(id)nextResultsObject { TNLParameterCollection *params = nextResultsObject; if (![params isKindOfClass:[TNLParameterCollection class]]) { return nil; } if (self = [super init]) { _nextResultsParams = [params copy]; } return self; } - (NSString *)endpoint { return @"search/tweets.json"; } - (void)prepareParameters:(TNLMutableParameterCollection *)params { [super prepareParameters:params]; if (_query) { params[@"q"] = _query; params[@"count"] = @100; params[@"include_entities"] = @1; } else if (_nextResultsParams) { [params addParametersFromParameterCollection:_nextResultsParams]; } else { assert(false); } } + (Class)responseClass { return [TAPISearchResponse class]; } @end @implementation TAPISearchResponse - (void)prepare { [super prepare]; if (!self.anyError) { NSDictionary *root = _parsedObject; if ([root isKindOfClass:[NSDictionary class]]) { _statuses = [TAPIStatusModelsFromJSONObjects(root[@"statuses"]) copy]; if (_statuses.count) { NSDictionary *metaData = root[@"search_metadata"]; if ([metaData isKindOfClass:[NSDictionary class]]) { NSString *nextResults = metaData[@"next_results"]; if ([nextResults hasPrefix:@"?"]) { nextResults = [nextResults substringFromIndex:1]; } if (nextResults.length) { TNLParameterCollection *params = [[TNLParameterCollection alloc] initWithURLEncodedString:nextResults options:0]; if (params.count) { _nextResultsObject = params; } } } } } if (_statuses.count == 0) { _parseError = [NSError errorWithDomain:TAPIParseErrorDomain code:TAPIParseErrorCodeUnexpectedResponseStructure userInfo:nil]; } } } - (NSArray<id<TAPIImageEntityModel>> *)imagesFromStatuesRemovingSensitiveImages:(BOOL)removeSensitive { NSMutableArray *results = [[NSMutableArray alloc] init]; for (id<TAPIStatusModel> status in self.statuses) { if (!status.possiblySensitive || !removeSensitive) { for (id<TAPIImageEntityModel> image in status.images) { [results addObject:image]; } } } return [results copy]; } @end