Google Places API

PythonでGooglePlacesAPIを利用してみる。

from googleplaces import GooglePlaces, types, lang, json

YOUR_API_KEY   = 'AIzaSyDMiOg7qvttHyeAarDLX2Mxacmrr3soqD4'
google_places  = GooglePlaces(YOUR_API_KEY)

# You may prefer to use the text_search API, instead.
query_result = google_places.nearby_search(
    language   = 'ja',
    location   = '東京, 日本',
    # keyword  = '青百合',
    # radius   = 20000,
    types      = 'food | cafe | bar'
)

if query_result.has_attributions:
    print(query_result.has_attributions)
for place in query_result.places:
    line = []
    geo_name = ''
    location = ''
    tel = ''

    place.get_details()

    # プレイス名称
    geo_name = place.name
    if geo_name == None :
        line.append('NULL')
    else :
        line.append(geo_name)

    # 緯度経度
    location = place.geo_location
    lat = str(location["lat"])
    lng = str(location["lng"])

    if lat == None :
        line.append('NULL')
    else :
        line.append(lat)

    if lng == None :
        line.append('NULL')
    else :
        line.append(lng)

    # 電話番号
    tel = place.local_phone_number
    if tel == None :
        line.append('NULL')
    else :
        line.append(tel)

    print(line)

▼ 出力結果

/Users/xxx/.pyenv/versions/3.4.5/bin/python "/Applications/PyCharm CE.app/Contents/helpers/pydev/pydevd.py" --multiproc --qt-support --client 127.0.0.1 --port 52233 --file /Users/xxx/Dropbox/Sites/pythonTest/googlePlacesApi.py
warning: Debugger speedups using cython not found. Run '"/Users/aaa/.pyenv/versions/3.4.5/bin/python" "/Applications/PyCharm CE.app/Contents/helpers/pydev/setup_cython.py" build_ext --inplace' to build.
pydev debugger: process 38426 is connecting

Connected to pydev debugger (build 163.9735.8)
['東京', {'lat': Decimal('35.7090259'), 'lng': Decimal('139.7319925')}, None]
['ホテル椿山荘東京', {'lat': Decimal('35.7121974'), 'lng': Decimal('139.726076')}, '03-3943-1111']
['ホテルグランドパレス', {'lat': Decimal('35.6973265'), 'lng': Decimal('139.7504322')}, '03-3264-1111']
['庭のホテル東京', {'lat': Decimal('35.700622'), 'lng': Decimal('139.75667')}, '03-3293-0028']
['Hotel Higashi-Shinjuku イーホテル東新宿', {'lat': Decimal('35.6977609'), 'lng': Decimal('139.7071375')}, '03-5287-3588']
['ホテルリステル新宿', {'lat': Decimal('35.692872'), 'lng': Decimal('139.711396')}, '03-3350-0123']
['Citadines Shinjuku Tokyo', {'lat': Decimal('35.6910489'), 'lng': Decimal('139.7131214')}, '03-5379-7208']
['東急ステイ水道橋', {'lat': Decimal('35.70081589999999'), 'lng': Decimal('139.7565031')}, '03-3293-0109']
['エースイン新宿', {'lat': Decimal('35.6925119'), 'lng': Decimal('139.7243036')}, '03-3350-6655']
['東横INN新宿歌舞伎町', {'lat': Decimal('35.69732310000001'), 'lng': Decimal('139.7043361')}, '03-5155-1045']
['ホテル機山館', {'lat': Decimal('35.7080429'), 'lng': Decimal('139.7597332')}, '03-3812-1211']
['シタディーンセントラル新宿東京', {'lat': Decimal('35.6944294'), 'lng': Decimal('139.7042888')}, '03-3200-0220']
['ホテルたてしな', {'lat': Decimal('35.692288'), 'lng': Decimal('139.709014')}, '03-3350-5271']
['ホテルメトロポリタン', {'lat': Decimal('35.7283502'), 'lng': Decimal('139.7079847')}, '03-3980-1111']
['ホテルシェーナ', {'lat': Decimal('35.69599540000001'), 'lng': Decimal('139.704277')}, '03-3232-6711']
['YMCAアジア青少年センター', {'lat': Decimal('35.7000021'), 'lng': Decimal('139.7585113')}, '03-3233-0611']
['新宿区', {'lat': Decimal('35.6938401'), 'lng': Decimal('139.7035494')}, None]

Process finished with exit code 0

ぐるなびAPI

環境

  • Python 3.4.5
  • java 1.8.0

概要

PythonでぐるなびAPIからレストランデータを取得する。

# -*- coding: utf-8 -*-
import sys
import urllib.request
import json

####
# 変数の型が文字列かどうかチェック
####
def is_str( data = None ) :
    if isinstance( data, str ) :
        return True
    else :
        return False

####
# 初期値設定
####
# APIアクセスキー

keyid = ""
# エンドポイントURL
url = "http://api.gnavi.co.jp/RestSearchAPI/20150630/"
hit_per_page = 500

####
# APIアクセス
####
# URLに続けて入れるパラメータを組立
query = [
    ("format","json"),
    ("keyid",keyid),
    ("hit_per_page",hit_per_page)
]
# URL生成
url += "?{0}".format(urllib.parse.urlencode(query))
# API実行
try :
    result = urllib.request.urlopen(url).read()
except ValueError :
    print (u"APIアクセスに失敗しました。")
    sys.exit()

####
# 取得した結果を解析
####
data = json.loads(result.decode('utf-8'))
# エラーの場合
if "error" in data :
    if "message" in data :
        print (u"{0}".format( data["message"] ))
    else :
        print (u"データ取得に失敗しました。")
    sys.exit()

# ヒット件数取得
total_hit_count = None
if "total_hit_count" in data :
    total_hit_count = int(data["total_hit_count"])

# ヒット件数が0以下、または、ヒット件数がなかったら終了
if total_hit_count is None or total_hit_count <= 0 :
    print (u"指定した内容ではヒットしませんでした。")
    sys.exit()

# レストランデータがなかったら終了
if not "rest" in data :
    print (u"レストランデータが見つからなかったため終了します。")
    sys.exit()

# ヒット件数表示
print ("{0}件ヒットしました。".format( total_hit_count ))

# レストランデータ取得
for rest in data["rest"] :
    line = []
#    id = ""
    name = ""
#    access_line = ""
#    access_station = ""
#    access_walk = ""
    tel = ""
    opentime = ""
    latitude = ""
    longitude = ""
    '''
    # 店舗番号
    if "id" in rest and is_str( rest["id"] ) :
        id = rest["id"]
    line.append( id )
    '''
    # 店舗名
    if "name" in rest and is_str( rest["name"] ) :
        name = u"{0}".format( rest["name"] )
    line.append( name )
    '''
    if "access" in rest :
        access = rest["access"]
        # 最寄の路線
        if "line" in access and is_str( access["line"] ) :
            access_line = u"{0}".format( access["line"] )
        # 最寄の駅
        if "station" in access and is_str( access["station"] ) :
            access_station = u"{0}".format( access["station"] )
        # 最寄駅から店までの時間
        if "walk" in access and is_str( access["walk"] ) :
            access_walk = u"{0}分".format( access["walk"] )
        line.extend( [ access_line, access_station, access_walk ] )
    '''
    # 電話番号
    if "tel" in rest and is_str(rest["tel"]) :
        tel = rest["tel"]
    line.append(tel)
    # 営業時間
    if "opentime" in rest and is_str(rest["opentime"]) :
        opentime = rest["opentime"]
    line.append(opentime)
    # 緯度経度
    if "longitude" in rest and is_str(rest["longitude"]):
        longitude = rest["longitude"]
    line.append(longitude)
    if "latitude" in rest and is_str(rest["latitude"]):
        latitude = rest["latitude"]
    line.append(latitude)
    # 出力
    print ("\t".join(line))

sys.exit()

ループで外部ファイルにデータを移す場合

# -*- coding: utf-8 -*-
import sys
import urllib.request
import json

####
# 変数の型が文字列かどうかチェック
####
def is_str( data = None ) :
    if isinstance( data, str ) :
        return True
    else :
        return False

####
# 初期値設定
####
# APIアクセスキー

keyid = "16147047739469cf3"
# エンドポイントURL
url = "http://api.gnavi.co.jp/RestSearchAPI/20150630/"
hit_per_page = 500
offset = 500

for offset in range(0, 550000, 500):
    ####
    # APIアクセス
    ####
    # URLに続けて入れるパラメータを組立
    query = [
        ("format","json"),
        ("keyid",keyid),
        ("hit_per_page",hit_per_page),
        ("offset",offset)
    ]
    # URL生成
    url += "?{0}".format(urllib.parse.urlencode(query))
    # API実行
    try :
        result = urllib.request.urlopen(url).read()
    except ValueError :
        print (u"APIアクセスに失敗しました。")
        sys.exit()

    ####
    # 取得した結果を解析
    ####
    data = json.loads(result.decode('utf-8'))
    # エラーの場合
    if "error" in data :
        if "message" in data :
            print (u"{0}".format( data["message"] ))
        else :
            print (u"データ取得に失敗しました。")
        sys.exit()

    # ヒット件数取得
    total_hit_count = None
    if "total_hit_count" in data :
        total_hit_count = int(data["total_hit_count"])

    # ヒット件数が0以下、または、ヒット件数がなかったら終了
    if total_hit_count is None or total_hit_count <= 0 :
        print (u"指定した内容ではヒットしませんでした。")
        sys.exit()

    # レストランデータがなかったら終了
    if not "rest" in data :
        print (u"レストランデータが見つからなかったため終了します。")
        sys.exit()

    # ヒット件数表示
    #print ("{0}件ヒットしました。".format( total_hit_count ))

    # レストランデータ取得
    for rest in data["rest"] :
        line = []
    #    id = ""
        name = ""
    #    access_line = ""
    #    access_station = ""
    #    access_walk = ""
        tel = ""
        opentime = ""
        latitude = ""
        longitude = ""
        '''
        # 店舗番号
        if "id" in rest and is_str( rest["id"] ) :
            id = rest["id"]
        line.append( id )
        '''
        # 店舗名
        if "name" in rest and is_str( rest["name"] ) :
            name = u"{0}".format( rest["name"] )
        line.append( name )
        '''
        if "access" in rest :
            access = rest["access"]
            # 最寄の路線
            if "line" in access and is_str( access["line"] ) :
                access_line = u"{0}".format( access["line"] )
            # 最寄の駅
            if "station" in access and is_str( access["station"] ) :
                access_station = u"{0}".format( access["station"] )
            # 最寄駅から店までの時間
            if "walk" in access and is_str( access["walk"] ) :
                access_walk = u"{0}分".format( access["walk"] )
            line.extend( [ access_line, access_station, access_walk ] )
        '''
        # 電話番号
        if "tel" in rest and is_str(rest["tel"]) :
            tel = rest["tel"]
        line.append(tel)
        # 営業時間
        if "opentime" in rest and is_str(rest["opentime"]) :
            opentime = rest["opentime"]
        line.append(opentime)
        # 緯度経度
        if "longitude" in rest and is_str(rest["longitude"]):
            longitude = rest["longitude"]
        line.append(longitude)
        if "latitude" in rest and is_str(rest["latitude"]):
            latitude = rest["latitude"]
        line.append(latitude)
        # 外部ファイルへ出力
        lists = (",".join(line))
        f = open('test.tsv', "a")
        f.write(lists)
        f.close()

sys.exit()