[SwiftUI]Alamofire とSwiftyJSONの使い方をホットペッパーAPIを使って試してみた。

2023年4月6日

スポンサーリンク

スポンサーリンク

はじめに

最近SwiftUIを勉強していて、何か外部ライブラリを使用してみたいと思った。
そこで調査をしいたところ、HTTP通信のライブラリAlamofireJsonファイルを操作できるSwiftyJSONの存在を知った。
ちょうどホットペッパーAPIを使ってみたかったので、この二つを使って試してみた。

導入

環境構築はCOCOAPODSで導入した。
以下を参照すればできた。

【Swift】COCOAPODSでAlamofireとSwiftyJSONをインストールし、API通信をする方法(get)

ホットペッパーAPI

ホットペッパーAPIは端的に行って、店の情報を様々入手できるAPIのようだ。
導入方法や使用方法は、公式サイトを見ればわかる。

今回は公式が出しているサンプルクエリから実施してみる。

実装

今回はホットペッパーAPIのリクエスト結果かapi_versionを切り抜いてみた。

import SwiftUI
import Alamofire
import SwiftyJSON

struct ContentView: View {
    var body: some View {
        VStack {
            Button(action: {
                // AlamofireでAPIリクエストをする
                AF.request("https://webservice.recruit.co.jp/hotpepper/gourmet/v1/?key=[API key]&large_area=Z011&format=json&count=1")
                    .response { response in
                        let json :JSON = JSON(response.data as Any)
                        print(json)
                        let jsonData = json["results"]["api_version"]
                        print(jsonData)
                    }
            }, label: {
                Text("Sample")
            })
        }
        .padding()
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

結果はこんな感じで表示されていた。

{
"results" : {
"results_available" : 31092,
"results_start" : 1,
"api_version" : "1.26",
"results_returned" : "1",
"shop" : [
{
"wifi" : "あり",
"catch" : "本格料理が楽しめる! 各種宴会に◎",
"logo_image" : "https:\/\/imgfp.hotp.jp\/IMGH\/61\/68\/P041106168\/P041106168_69.jpg",
"small_area" : {
"name" : "町田駅",
"code" : "X210"
},
"parking" : "なし",
"photo" : {
"mobile" : {
"s" : "https:\/\/imgfp.hotp.jp\/IMGH\/61\/13\/P041106113\/P041106113_100.jpg",
"l" : "https:\/\/imgfp.hotp.jp\/IMGH\/61\/13\/P041106113\/P041106113_168.jpg"
},
"pc" : {
"s" : "https:\/\/imgfp.hotp.jp\/IMGH\/61\/13\/P041106113\/P041106113_58_s.jpg",
"m" : "https:\/\/imgfp.hotp.jp\/IMGH\/61\/13\/P041106113\/P041106113_168.jpg",
"l" : "https:\/\/imgfp.hotp.jp\/IMGH\/61\/13\/P041106113\/P041106113_238.jpg"
}
},
"band" : "不可",
"sub_genre" : {
"name" : "居酒屋",
"code" : "G001"
},
"middle_area" : {
"name" : "町田",
"code" : "Y105"
},
"free_drink" : "あり",
"shop_detail_memo" : "",
"karaoke" : "なし",
"private_room" : "なし",
"lng" : 139.44749390530001,
"course" : "あり",
"budget_memo" : "",
"id" : "J003451188",
"card" : "利用可",
"tatami" : "なし",
"other_memo" : "〈中国語〉言語に対応できるスタッフがいる",
"mobile_access" : "JR横浜線町田駅JRターミナル口より徒歩約2分",
"barrier_free" : "なし",
"large_area" : {
"name" : "東京",
"code" : "Z011"
},
"free_food" : "あり",
"station_name" : "町田",
"party_capacity" : 60,
"name_kana" : "あじくら",
"large_service_area" : {
"name" : "関東",
"code" : "SS10"
},
"show" : "なし",
"close" : "不定休",
"wedding" : "",
"pet" : "不可",
"address" : "東京都町田市原町田4-1-7三徳ビルB1F",
"lat" : 35.541400861,
"charter" : "貸切可 :40~60名様で貸切可能◎",
"coupon_urls" : {
"sp" : "https:\/\/www.hotpepper.jp\/strJ003451188\/scoupon\/?vos=nhppalsa000016",
"pc" : "https:\/\/www.hotpepper.jp\/strJ003451188\/map\/?vos=nhppalsa000016"
},
"service_area" : {
"name" : "東京",
"code" : "SA11"
},
"child" : "お子様連れOK",
"urls" : {
"pc" : "https:\/\/www.hotpepper.jp\/strJ003451188\/?vos=nhppalsa000016"
},
"horigotatsu" : "なし",
"budget" : {
"name" : "2001~3000円",
"code" : "B002",
"average" : "3000円"
},
"english" : "なし",
"genre" : {
"name" : "中華",
"catch" : "◇本格中華を手ごろな価格で豊富にご用意◇",
"code" : "G007"
},
"open" : "月~日、祝日、祝前日: 11:00~15:00 (料理L.O. 14:45 ドリンクL.O. 14:45)17:00~23:00 (料理L.O. 22:45 ドリンクL.O. 22:45)",
"non_smoking" : "全面禁煙",
"access" : "JR横浜線町田駅JRターミナル口より徒歩約2分\/小田急小田原線相模大野駅より徒歩約17分",
"name" : "味蔵",
"lunch" : "あり",
"capacity" : 55,
"tv" : "なし",
"midnight" : "営業していない",
"ktai_coupon" : 0
}
]
}
}
1.26

これをうまく使えば色々HTTP通信をしてデータを取得できる機能が簡単に実装できそう

スポンサーリンク