Swift で Foursquare の API を使う
2017.2.11 追記:Swift 3対応版の記事を書きました。
今月からSwiftの勉強を始めているkoogawaです。
勉強も兼ねて、Foursquare の API Client を Swift で作ってみました。
- 通信には NSURLSession を利用
- APIのパス(venues/search等)は自由に指定できる
- レスポンスは NSData なので、パース方法を利用者側で選べる(SwiftyJSONがオススメ)
使い方
アクセストークンで初期化します。
let client = FoursquareAPIClient(accessToken: “YOUR_ACCESS_TOKEN”)
APIバージョンを指定することもできます。
// Set v=YYYYMMDD param let client = FoursquareAPIClient(accessToken: “YOUR_ACCESS_TOKEN”, version: "20140723")
ベニューを検索してみましょう。
let parameter: [String: String] = [ "ll": "35.702069,139.7753269", "limit": "10", ]; client.requestWithPath("venues/search", parameter: parameter) { (data, error) in // parse the JSON with NSJSONSerialization or Lib like SwiftyJson // result: {"meta":{"code":200},"notifications":[{"... println(NSString(data: data!, encoding: NSUTF8StringEncoding)) }
レスポンスは敢えて Dictionary にはせず NSData にしました。
SwiftでのJSON解析は複雑になりがちなので、パース方法を利用者側で自由に選べるようにした方が良いと考えたためです。
デモ
近隣のベニューを検索するデモアプリを添付しております。
アーキテクチャ
手書きですいませんw
Venue
オブジェクトはベニューデータを抽象化したデータモデルです。
FoursquareAPIClient
は、Foursquare API とのネットワーク通信を抽象化します。リクエストを送信して、レスポンスを NSData にして返すところまでの責任を負います。
FoursquareManager
は、Venue
オブジェクトを管理するシングルトンオブジェクトです。ベニュー一覧をコントローラから取得するときはこれを介して操作します。予め accessToken
プロパティにアクセストークンを設定しておく必要があります(ここは微妙かも)。
実質的に、FoursquareManager
だけが FoursquareAPIClient
を操作することになります。
ここはこうしたほうが良い、などあればツッコミよろしくお願いします。
今後の予定
現在の状態では GET
にしか対応しておらず、チェックインが出来ません。ハッキリ言って使い物になりません(`;ω;´)
とは言え、せっかくここまで作ったので、POST
にも対応して公開できるよう頑張りたいと思います。
2015.7.28 追記:
POSTにも対応しました!
使い方
let client = FoursquareAPIClient(accessToken: accessToken) client.requestWithPath("checkins/add", method: .POST, parameter: parameter) { [weak self] (data, error) in var response = NSString(data: data!, encoding: NSUTF8StringEncoding) }
GitHub - koogawa/FoursquareAPIClient: Very simple Swift library for Foursquare API v2