1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Python初心者】第2回 Google Maps APIをやってみた!

Last updated at Posted at 2026-01-04

はじめに

Python初学者のわたしが覚えるために、学んだことを整理し、理解を深めるために記事を書いています。
前回の続きで、Google Maps APIになります!
是非、第1回から見てみてください😊

この記事でやること(本日のゴール⚽️)

今回の記事では、Google Maps APIを使って、
ドーナツ屋さんの情報を取得するまでの流れを、2つのフローに分けて実践していきます💪

  • 日本語のフローを書く(全体像の構成を立てる)
  • ドーナツ屋さんの名前を受け取る
  • Google Maps API(Text Search)で検索する
  • 実行してみる🍩

ここまでをゴールにしたいと思います🍩🍩🍩

Let's 実践!まずは日本語のフローを書く✏️

コードを書くときには、何から始めれば?と毎回迷子になる私ですが、
まずは日本語でフローを書くことが大事!と教えていただいてから、そうしています😊

今回の最終目標はドーナツ屋さんの基本情報と口コミをAPIでゲットしよう!です🍩

対象のドーナツ屋さんは以下の3件にしたいと思います!
🍩 I’m donut ? 福岡店
🍩 JACK IN THE DONUTS 福岡天神店
🍩 ケンジーズドーナツ・ファクトリー
※実際にある店舗でやってみます!


【日本語でコード全体の流れを書く】

今回することを日本語で順番に書きます!👇
※今回は①〜②までを実装し、③以降は次回以降で扱っていきます!

① 調べたいドーナツ屋さんの名前を受け取る
GoogleMapsAPI(Text Search) でお店を検索する
③ 検索結果から place_id を取得する
place_idを使って基本情報を取得する
place_idを使って口コミを取得する
⑥ 取得した情報を1行分のデータにまとめる


① 1つ目のフロー:調べたいドーナツ屋さんの名前を受け取る

最後に実行するときにドーナツ屋さんはリストで準備予定です🍩🍩🍩

今回、GOOGLE_MAPS_API_KEYenvファイルで準備し、そこから読み込んで使用しています!
コンストラクタは、このクラス内で共通して使う設定をまとめておく場所になるので、 APIキーもコンストラクタで取得するようにしました✏️

ポイント
今回はリストでドーナツ屋さんの名前を準備していますが、
実際はスプレッドシートなど、別のデータから大量に受け取ることを想定してこの形で作成しています!
なので、ドーナツ屋の名前がなかった場合にチェックを入れています🤙

#必要なものをimport
import os
import requests

#型ヒント用:戻り値が分かりやすくなるように
from typing import Optional, Dict

from dotenv import load_dotenv
load_dotenv()

class GoogleMapsAPIDemo:
    def __init__(self):
        self.api_key_demo = os.getenv("GOOGLE_MAPS_API_KEY")
    
    #① 調べたいドーナツ屋さんの名前を受け取る    
    def receive_donut_shop_name(self,donut_shop_name: str) ->Optional[str]:
        
        #ドーナツ屋の名前がなければNoneで返す
        if not donut_shop_name:
            return None
        #ドーナツ屋の名前を受け取ったらそれを返す
        return donut_shop_name


② 2つ目のフロー:Google Maps API(Text Search)でお店を検索する

次は実際にAPIでお店の情報を呼び出していきます🍩🍩🍩
requests.getはrequestのメソッドになり、HTTPリクエストを送るためのものです!
response.raise_for_status()もrequestのメソッドになり、APIの通信時にエラーになっていないかの判定をしてくれるものになります!

    def search_donut_shop_name(self,donut_shop_name: str) ->Optional[Dict]:
        try:
            #共通のもの!GoogleMapsAPI(Text Search)のエンドポイント
            url = "https://maps.googleapis.com/maps/api/place/textsearch/json"
        
            #検索ワード、言語、APIキーを指定する
            params = {"query": donut_shop_name,"language": "ja" ,"key":self.api_key_demo}
            #ここでリクエストを送ります!
            response = requests.get(url, params=params)
            #リクエストがエラーになっていないかを確認します
            response.raise_for_status()
            return response.json()
        #通信系エラーのために用意されているもの    
        except requests.exceptions.RequestException as e:
            return None

実行してみる✏️

今回、実行をするときにはドーナツのリストを準備しているため、わざわざ受け取りをする必要はないですが、スプシなどから大量にデータを受け取りしたことを想定しているため、1つ目のフローを通しています🐥
APIは1件ずつのリクエストをしていくので、for文で1件ずつ受け取りし、実行を行うようにしています!

#############実行#############
if __name__ == "__main__":
    #インスタンスを作成
    demo_api = GoogleMapsAPIDemo()
    #ドーナツ屋さんのリスト
    donut_shop_list = ["I’m donut? 福岡店","JACK IN THE DONUTS 福岡天神店","ケンジーズドーナツ・ファクトリー"]
    
    #①ドーナツ屋さんの名前を受け取る
    for donut_shop in donut_shop_list:
        shop_name = demo_api.receive_donut_shop_name(donut_shop)
        if shop_name is None:
            print("ドーナツ屋の名前がありません")
            continue
    
        #②Google Maps APIで検索する
        response_result = demo_api.search_donut_shop_name(shop_name)
        if response_result is None:
            print(f"検索に失敗しました:{shop_name}")
            #なくても処理は続ける
            continue
        
        print(f"検索に成功:{shop_name}")
        #結果を出力する
        print(response_result)

まとめ

今回したことは、

  • 日本語で全体フローを書く
  • ドーナツ屋さんの名前を受け取る
  • Google Maps APIのText Searchで検索する
  • 実行して、リクエストをする

第3回ではplace_idを使って基本情報を取得していきます!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?