-
Notifications
You must be signed in to change notification settings - Fork 10
/
OPEWikipediaManager.m
129 lines (110 loc) · 6.02 KB
/
OPEWikipediaManager.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
//
// OPEWikipediaAPIManager.m
// OSM POI Editor
//
// Created by David on 6/11/13.
//
//
#import "OPEWikipediaManager.h"
#import "AFNetworking.h"
#import "OPETranslate.h"
@implementation OPEWikipediaManager
-(NSArray *)seperateRawWikipediaValue:(NSString *)rawValue
{
NSString * languageString = @"";
NSString * wikipediaString = @"";
if ([rawValue length]) {
wikipediaString = rawValue;
NSError * error = nil;
NSRegularExpression* regex = [NSRegularExpression regularExpressionWithPattern:@"([^:]+):" options:0 error:&error];
NSArray* matches = [regex matchesInString:rawValue options:0 range:NSMakeRange(0, [rawValue length])];
if ([matches count]) {
NSTextCheckingResult * match = matches[0];
NSString * tempLanguage = [rawValue substringWithRange:match.range];
if ([tempLanguage rangeOfString:@"http"].location == NSNotFound)
{
languageString = tempLanguage;
wikipediaString = [wikipediaString componentsSeparatedByString:languageString][1];
languageString = [languageString substringToIndex:[languageString length]-1];
}
}
}
return @[languageString,wikipediaString];
}
-(void)fetchSuggesionsWithLanguage:(NSString *)language query:(NSString *)query success:(void (^)(NSArray *results))success failure:(void (^)(NSHTTPURLResponse *response, NSError *error, id JSON))failure
{
if (![language length]) {
language = @"en";
}
NSString * urlString = [NSString stringWithFormat:@"http://%@.wikipedia.org/w/api.php?action=opensearch&search=%@&limit=10&format=json",language,[query stringByReplacingOccurrencesOfString:@" " withString:@"_"]];
NSURLRequest * urlRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:urlString]];
AFHTTPRequestOperation * requestOperation = [[AFHTTPRequestOperation alloc] initWithRequest:urlRequest];
requestOperation.responseSerializer = [AFJSONResponseSerializer serializer];
[requestOperation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
NSArray * results = (NSArray *)responseObject;
if (success) {
success(results[1]);
}
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
if (failure) {
failure(operation.response,error,operation.responseData);
}
}];
[requestOperation start];
}
-(void)fetchAllWikipediaLanguagesSucess:(void (^)(NSArray *results))success failure:(void (^)(NSHTTPURLResponse *response, NSError *error, id JSON))failure
{
NSString * urlString = @"http://en.wikipedia.org/w/api.php?action=query&meta=siteinfo&siprop=languages&format=json";
NSURLRequest * urlRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:urlString]];
AFHTTPRequestOperation * requestOperation = [[AFHTTPRequestOperation alloc] initWithRequest:urlRequest];
requestOperation.responseSerializer = [AFJSONResponseSerializer serializer];
[requestOperation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
NSDictionary * results = (NSDictionary *)responseObject;
if (success) {
success(results[@"query"][@"languages"]);
}
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
if (failure) {
failure(operation.response,error,operation.responseData);
}
}];
[requestOperation start];
}
-(void)fetchNearbyPoint:(CLLocationCoordinate2D)center withLocale:(NSString *)locale success:(void (^)(NSArray *results))success failure:(void (^)(NSHTTPURLResponse *response, NSError *error, id JSON))failure
{
NSString * urlString = [NSString stringWithFormat:@"http://%@.wikipedia.org/w/api.php?action=query&list=geosearch&gsradius=10000&gscoord=%@|%@&format=json",locale,[[NSNumber numberWithDouble:center.latitude] stringValue],[[NSNumber numberWithDouble:center.longitude] stringValue]];
NSURLRequest * urlRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:[urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]];
AFHTTPRequestOperation * requestOperation = [[AFHTTPRequestOperation alloc] initWithRequest:urlRequest];
requestOperation.responseSerializer = [AFJSONResponseSerializer serializer];
[requestOperation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
NSDictionary * results = (NSDictionary *)responseObject;
if (success) {
success([results[@"query"][@"geosearch"] valueForKey:@"title"]);
}
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
if (failure) {
failure(operation.response,error,operation.responseData);
}
}];
[requestOperation start];
}
-(NSArray *)mostPopularLanguages
{
NSError * error = nil;
NSString * systemLanguage = [[OPETranslate systemLocale] componentsSeparatedByString:@"-"][0];
NSLocale *currentLocale = [[NSLocale alloc] initWithLocaleIdentifier:systemLanguage];
NSDictionary * systemLanguageDictionary = @{@"code": systemLanguage,@"*":[currentLocale displayNameForKey:NSLocaleIdentifier value:systemLanguage]};
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"wikipediaLanguages" ofType:@"json"];
NSData *jsonData = [NSData dataWithContentsOfFile:filePath];
NSArray * jsonArray = (NSArray *)[NSJSONSerialization JSONObjectWithData:jsonData options:nil error:&error];
NSMutableArray * array = [NSMutableArray array];
[jsonArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
NSLocale *currentLocale = [[NSLocale alloc] initWithLocaleIdentifier:systemLanguage];
NSDictionary * systemLanguageDictionary = @{@"code": obj,@"*":[currentLocale displayNameForKey:NSLocaleIdentifier value:obj]};
[array addObject:systemLanguageDictionary];
}];
[array removeObject:systemLanguageDictionary];
[array insertObject:systemLanguageDictionary atIndex:0];
return array;
}
@end