Androidアプリで Hotpepper API を使う


Hotpepper API のデータを使って、Androidで飲食店検索アプリを作りました。
その際の手順をまとめておきます。

## リクルートWebサービスにユーザー登録する
http://webservice.recruit.co.jp/hotpepper/reference.html

1. 上記サイトの「新規登録」ボタンをクリック
2. 画面の手順に従ってメアドを入力し、ユーザー登録
3. リクルートWebサービスからAPIキーが記載されたEメールが届く。

## 店舗データのリクエスト
例えば、御茶ノ水周辺の飲食店をJSON形式で出力する場合は下記のようになる
http://webservice.recruit.co.jp/hotpepper/gourmet/v1/?key=(取得したAPIキー)&format=json&keyword=御茶ノ水
※ 上記の(...)の部分には取得したAPIキーを入れてください

## 出力されたデータ内容
例えば以下のようなデータが出力されます

```
{
    "results": {
        "results_start": 1,
        "results_returned": "10",
        "api_version": "1.26",
        "shop": [{
            "name_kana": "ふくのや",
            "other_memo": "※不明点等、お気軽に店舗へご相談下さい!!",
            "photo": {
                "mobile": {
                    "l": "http://imgfp.hotp.jp/IMGH/44/34/P019604434/P019604434_168.jpg",
                    "s": "http://imgfp.hotp.jp/IMGH/44/34/P019604434/P019604434_100.jpg"
                },
                "pc": {
                    "l": "http://imgfp.hotp.jp/IMGH/44/34/P019604434/P019604434_238.jpg",
                    "m": "http://imgfp.hotp.jp/IMGH/44/34/P019604434/P019604434_168.jpg",
                    "s": "http://imgfp.hotp.jp/IMGH/44/34/P019604434/P019604434_58_s.jpg"
                }
            },
            "large_area": {
                "name": "東京",
                "code": "Z011"
            },
            "sommelier": "いない",
            "party_capacity": "30",
            "large_service_area": {
                "name": "関東",
                "code": "SS10"
            },
            "mobile_access": "お茶の水駅30秒､水道橋駅10分､秋葉原駅10分",
            "id": "J000011431",
            "address": "東京都千代田区神田駿河台２－４－４　サンロイヤルビル５Ｆ",
            "lng": "139.7638532018",
            "course": "あり",
            "show": "なし",
            "parking": "なし ：お酒を飲まれる際はお車でのお越しはご遠慮ください。",
            "non_smoking": "一部禁煙 ：喫煙席：30席、禁煙席：6席／煙が流出しないように壁があります",
            "horigotatsu": "あり ：最大30名様OKです",
            "name": "福の家",
            "genre": {
                "name": "居酒屋",
                "catch": "お茶の水駅30秒　個室　料理居酒屋",
                "code": "G001"
            },
            "open": "月-金、祝前日: 11:30-14:30 （料理L.O. 14:00 ドリンクL.O. 14:00）17:00-23:30土、日、祝日: 16:00-23:30",
            "card": "利用可",
            "tatami": "あり ：お座敷席もご用意しております。必ず事前にご予約をお願い致します。",
            "charter": "貸切可 ：50名 ～120名までOKです",
            "wifi": "未確認",
            "equipment": "なし",
            "sub_genre": {
                "name": "和食",
                "code": "G004"
            },
            "shop_detail_memo": "各種飲み放題付きコース等をご用意しております。",
            "band": "不可",
            "middle_area": {
                "name": "神田・神保町・秋葉原・御茶ノ水",
                "code": "Y020"
            },
            "lat": "35.6994648121",
            "karaoke": "なし",
            "logo_image": "http://imgfp.hotp.jp/IMGH/29/51/P000982951/P000982951_69.jpg",
            "midnight": "営業している",
            "budget": {
                "average": "（宴会・通常平均）3000円～4000円／（ランチ）800円",
                "name": "3001～4000円",
                "code": "B003"
            },
            "urls": {
                "qr": "http://webservice.recruit.co.jp/common/qr?url=http%3A%2F%2Fhpr.jp%2FstrJ000011431%2F%3Fuid%3DNULLGWDOCOMO%26vos%3Dhpp337",
                "mobile": "http://hpr.jp/strJ000011431/?uid=NULLGWDOCOMO&vos=hpp336",
                "pc": "http://www.hotpepper.jp/strJ000011431/?vos=nhppalsa000016"
            }
            ...以下略       
          
```


## データをparseする
Androidアプリの場合、parseの方法は下記サイトにまとめられています。
http://tkm0on.hatenablog.com/entry/2015/05/21/183608

Hotpepper APIからデータをparseしたい場合は、下記のようになります。

```java
private List<MessageRecord> parse(JSONObject json) throws JSONException {
    ArrayList<MessageRecord> records = new ArrayList<MessageRecord>();
    JSONArray jsonMessages = json.getJSONObject("results").getJSONArray("shop");
    for (int i =0; i < jsonMessages.length(); i++) {
        JSONObject jsonMessage = jsonMessages.getJSONObject(i);
        String url = jsonMessage.getJSONObject("photo").getJSONObject("mobile").getString("l"); //画像
        String title = jsonMessage.getString("name"); //店名
        String content1 = jsonMessage.getJSONObject("genre").getString("catch"); //キャッチコピー
        String content2 = jsonMessage.getString("access"); //アクセス
        String content3 = jsonMessage.getString("open"); //営業時間
        String content4 = jsonMessage.getJSONObject("budget").getString("average"); //予算(平均)
        String shopUrl = jsonMessage.getJSONObject("urls").getString("pc"); //webサイト
        Double shopAddressLng = Double.valueOf(jsonMessage.getString("lng")); //緯度
        Double shopAddressLat = Double.valueOf(jsonMessage.getString("lat")); //経度
        MessageRecord record = new MessageRecord(url, title, shopUrl, shopAddressLng, shopAddressLat, i);
        records.add(record);
    }
    return records;
}

```


以上