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からレストランデータを取得する。

[python]
# -*- 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()
[/python]

ループで外部ファイルにデータを移す場合
[python]
# -*- 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()
[/python]