AFNetworking2.x
さて、本日は今更ながら超有名ライブラリである AFNetworking を使ってみたいと思います。
ただ、単に使い方を説明するのであれば、他のサイトにお任せすれば良いので、Web-APIを使ってみる形で書きたいと思います。
今回は、
GETリクエスト: OpenWeatherMap API
POSTリクエスト: VoiceText Web API
を試してみました。
AFNetworking を使うためにはCocoaPodsでライブラリをインストールして、
ViewController.mで#import "AFNetworking.h"
を書きましょう。
まずは、OpenWeatherMap APIを使って、GETリクエストを投げてみました。
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
| // ViewController.m
#import "ViewController.h"
#import "AFNetworking.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// AFHTTPSessionManagerをインスタンス化
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
// OpenWeatherMap APIを利用
[manager GET:@"http://api.openweathermap.org/data/2.5/weather?q=Tokyo,jp"
parameters:nil
success:^(NSURLSessionDataTask *task, id responseObject) {
NSLog(@"response: %@", responseObject);
} failure:^(NSURLSessionDataTask *task, NSError *error) {
NSLog(@"error: %@", error);
}
}
|
きちんと値が返ってきました。
続いて、VoiceText Web APIを使って、POSTリクエストを投げてみました。
VoiceText Web APIは無料利用に登録が必要なので、さくっと登録しましょう。
すぐに登録したメールにAPIキーが来ます。
これを使って、POSTリクエストを投げてみました。
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
| // ViewController.m
#import "ViewController.h"
#import "AFNetworking.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// AFHTTPSessionManagerをインスタンス化
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
// APIキーをセット
NSString *apiKey = @"<メールで届いたAPIキー>";
[manager.requestSerializer setAuthorizationHeaderFieldWithUsername:apiKey password:nil];
// リクエストパラメータをセット
NSMutableDictionary *params = [NSMutableDictionary alloc] init];
NSString *text = @"おはようございます。";
[params setObject:text forKey:@"text"];
[params setObject:@"show" forKey:@"speaker"];
[params setObject:@"ogg" forKey:@"format"];]
// Content-Typeをセット
[manager setResponseSerializer:[AFHTTPResponseSerializer serializer]];
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"audio/ogg"];
// OpenWeatherMap APIを利用
[manager POST:@"https://api.voicetext.jp/v1/tts"
parameters:params
success:^(NSURLSessionDataTask *task, id responseObject) {
NSLog(@"response: %@", responseObject);
} failure:^(NSURLSessionDataTask *task, NSError *error) {
NSLog(@"error: %@", error);
}
}
|
注意点は下記です。
- APIキーの設定
VoiceText Web APIではAPIキーを利用する必要があるので、
requestSerializer
のauthorization
にユーザネームとしてAPIキーを設定しましょう。
Content-Type
の設定
audio/ogg
でレスポンスを受け取る必要があるので、responseSerializer
を設定しましょう。
あとは通常のNSURLSession
やNSURLConnection
のPOSTリクエストと同様にリクエストパラメータをセットすれば良いのです。
正しく値が返ってきますね。
AFNetworkingの良いところはエラーでも値が返ってくるところでしょうか。
Content-Type
が対応していないのでsuccess
を通らないということが一目瞭然でした。
今後は、この便利なライブラリを積極的に使っていこうかと思います。
といったところで本日はここまで。