食べログで指定した地点の近くの飲食店の一覧を取得する
会社の近くの飯屋をピックアップしたかったので。
import click import scipy.optimize import geopy.distance import requests import xml.etree.ElementTree as ET def listup(lat, lon, radius_km): maxlat = scipy.optimize.bisect(lambda x: geopy.distance.distance((lat, lon), (x, lon)).km - radius_km, lat, 90) minlat = scipy.optimize.bisect(lambda x: geopy.distance.distance((lat, lon), (x, lon)).km - radius_km, -90, lat) maxlon = scipy.optimize.bisect(lambda x: geopy.distance.distance((lat, lon), (lat, x)).km - radius_km, lon, 180) minlon = scipy.optimize.bisect(lambda x: geopy.distance.distance((lat, lon), (lat, x)).km - radius_km, 0, lon) print(maxlat, minlat, maxlon, minlon) lst = 100 params = { 'maxLat': maxlat, 'minLat': minlat, 'maxLon': maxlon, 'minLon': minlon, 'lst': lst, 'SrtT': 'trend', } pg = 1 cnt = 9999 rst_list = [] while lst * (pg - 1) < cnt: params['pg'] = pg r = requests.get('https://tabelog.com/xml/rstmap', params=params) root = ET.fromstring(r.text) if pg == 1: cnt = int(root.find('srchinfo').attrib['cnt']) print('{:d} / {:d}'.format(min(cnt, lst * pg), cnt)) for marker in root.findall('marker'): rst_list.append(marker.attrib) pg += 1 return rst_list @click.command @click.argument('latitude', type=float) @click.argument('longitude', type=float) @click.option('--radius-km', type=float, default=0.5) @click.option('--sort-by-score', is_flag=True) def main(latitude, longitude, radius_km, sort_by_score): rst_list = listup(latitude, longitude, radius_km) if sort_by_score: rst_list = sorted(rst_list, key=lambda x: x['score'], reverse=True) for (i, rst) in enumerate(rst_list): print(rst['rstname'], end=' ') print('https://tabelog.com' + rst['rsturl'], end=' ') print(rst['rstcat'], end=' ') print(rst['holiday'], end=' ') print(rst['score'], end=' ') print('https://www.google.co.jp/maps?q={},{}'.format(rst['lat'], rst['lng']), end=' ') print() if __name__ == '__main__': main()
こんな感じで動く。
$ python tabelog.py 35.697011 139.682878 --radius-km 0.1 --sort-by-score | head -n 10 華吉 https://tabelog.com/tokyo/A1319/A131903/13040836/ 中華料理、餃子 日曜日 3.55 https://www.google.co.jp/maps?q=35.69677753867941,139.6825075846003 カフェ デ カリー https://tabelog.com/tokyo/A1319/A131903/13130776/ カレー、カフェ 日曜日 3.50 https://www.google.co.jp/maps?q=35.697083182016286,139.68391515140476 ハイランダー イン トウキョウ https://tabelog.com/tokyo/A1319/A131903/13093730/ バー、パブ、ヨーロッパ料理 無し 3.44 https://www.google.co.jp/maps?q=35.697413738679,139.68246788460678 トリッペリア トリッパ https://tabelog.com/tokyo/A1319/A131903/13129637/ イタリアン、ワインバー 日 3.41 https://www.google.co.jp/maps?q=35.696570638679795,139.68326538459766 すし割烹悠水 https://tabelog.com/tokyo/A1319/A131903/13070320/ 海鮮、寿司、居酒屋 日曜日 3.38 https://www.google.co.jp/maps?q=35.6975662386793,139.68367858460743 坂上刀削麺 https://tabelog.com/tokyo/A1319/A131903/13188505/ 中華料理、刀削麺、居酒屋 無し(ビル休館日に準ずる) 3.38 https://www.google.co.jp/maps?q=35.697492738678896,139.68230588460767 麺家 たいせい https://tabelog.com/tokyo/A1319/A131903/13282456/ ラーメン なし 3.32 https://www.google.co.jp/maps?q=35.69720583867907,139.6822479846048 六味膳食 https://tabelog.com/tokyo/A1319/A131903/13161291/ 居酒屋、創作料理 日・祝日 (ご宴会予約のみやっています) 3.25 https://www.google.co.jp/maps?q=35.69620813868004,139.683320584594