FlutterからYahoo APIを叩いて飲食店情報を取得しよう(Geocodingもあるよ)

2021-06-02

はじめに

どうも、連日朝の8時頃から22時まで労働に勤しむ社畜です。 労働時間が長いことが嫌で転職したのに、出向という形で飛ばされてしまった。 飛ばされた先は、少数精鋭部隊のソルジャーチームで日に日に人が抜けていく。 詰んでるので激しいフォローなども無く、プロジェクトは燃え落ち朽ちるのを待つのみ。

炎上しすぎると無情に時間だけが過ぎていくのです。私には分かります。

辛いときは美味い飯を食べたいものです。 うまい飯を探しましょう。

飲食店APIについて

一昔前は、ぐるなびAPIやホットペッパー飲食店APIがありましたが提供終了(終了予定)となっております。 代わりに何か無いかなと探した所、Google map APIかYahoo APIがヒットしました。 Google map APIは有料なのでYahoo APIでいきましょう。 ただ困ったことに、Yahoo APIで取得できる情報はGeocodが含まれていないため別口で取得する必要があります。 今回は、飲食店情報を取得して、住所からGeocodを取得するところまで進めます。

Yahoo APIを取得するコード

Yahoo APIの飲食店をFlutterから取得していきましょう。 APIキーは別途取得しておいてください。

Yahoo!ローカルサーチAPI

とりあえず動かしたい人向けにコードを置いておきます。

基本的には前回までのコードべース拡張していきます。 https://github.com/kenpos/yahoo_api_flutter

ローカルサーチAPIから取得

取得したYahoo APIキーで<APIキー>を置き換えると良いです。 特に説明する箇所も無いです。URLに座標や、検索する単語を指定し周辺の店を取得することも可能です。

void requestSample2() async {
  var uri = Uri.parse(
      'https://map.yahooapis.jp/search/local/V1/localSearch?appid=<APIキー>&output=json&query=ラーメン');
  http.Response res = await http.get(uri);
  if (res.statusCode == 200) {
    String data = res.body;
    Map<String, dynamic> map = jsonDecode(data);
    var yapi = YahooApi.fromJson(map);
    print(yapi.resultInfo.total);
    for (var i = 0; i < yapi.resultInfo.count; i++) {
      print(yapi.feature[i].name);
      String add = yapi.feature[i].property.address;
      print(yapi.feature[i].property.address);
      requestAddCoder(add);
    }
  } else {
    throw Exception('Failed to load post');
  }
}

住所から座標を取得する

巨人の肩を借りていきます。 geocoding

flutter pub add geocoding

これを使うための関数を用意します。 locationFromAddressの引数に、文字列に住所を渡せばlatとlongが貰える。

Future<void> requestAddCoder(String address) async {
  List<Location> locations = await locationFromAddress(address);
  print(locations.first.latitude);
  print(locations.first.longitude);
}

結果

まずはDebug Consoleに店の名前と座標を表示しています。

まとめ

次回は、座標を基に地図データをプロットしていくことにしましょう。 UIにInputBoxを置いて検索できるようにもしていきたいですね。 今日はここまで。