koogawa blog

iOS、Android、foursquareに関する話題

Swift で Foursquare の API を使う

2017.2.11 追記:Swift 3対応版の記事を書きました。

blog.koogawa.com


今月からSwiftの勉強を始めているkoogawaです。

勉強も兼ねて、FoursquareAPI Client を Swift で作ってみました。

github.com

  • 通信には 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解析は複雑になりがちなので、パース方法を利用者側で自由に選べるようにした方が良いと考えたためです。

デモ

近隣のベニューを検索するデモアプリを添付しております。

f:id:koogawa:20150724172338p:plain

アーキテクチャ

手書きですいませんw

f:id:koogawa:20150724170326j:plain

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