tech.guitarrapc.cóm

Technical updates

はじめてのお寿司屋さんは PowerShell で調べてから行くですし

寿司 Advent Calendar 2013 - 22日目の記事です。

12/18 から 6日間連続で、弊社が寿司テロをさせていただいております。寿司社の面目躍如というところでしょうか。

さて、昨日はsri_1128さんによる築地の寿司大いってきたよーという、都内の寿司勢にとってはうらやましくなる記事でした。

行きたいと思っていた 一新さんに行こうと粘ったのですが.....いっぱいでした。

[gnavi:410121:detail]

なので検索と同僚おすすめで 寿司好さんにしました。

[gnavi:361541:detail]

目次

お店選びはPowerShell でAPI叩いて検索

PowerShell は さくっとAPIを叩くにも便利です。検索はPowerShellで。当然最低PowerShell V3からですが、私はPowerShell V4を推奨しますしここで紹介します。

GitHub にコード置いておきますね。

https://github.com/guitarrapc/PowerShellUtil/tree/master/HotPepperAPI

ぐるなび

API叩こう! と思ったのですが、はてなブログのサイドバーにあります、次。

ホットペッパー

はてなブログせんせーになかった!やろう!

永遠のβ版 グルメサーチAPI (ver 1.1) ベータ版

まぁなんというか永遠が永遠になりましたね。

■2007.11.19 ホットペッパーWebサービスはリクルートWebサービスに統合されました。

ホットペッパーWebサービスはリクルートWebサービスに統合されました。そのためリクルートWebサービスの利用規約が適用されますので、こちら をご覧ください。

現在公開中の「ホットペッパーWebサービス(http://api.hotpepper.jp)」に関しましては、リクルートWebサービスへの統合後も当面の間稼動いたしますが、今後はサービスレベルの向上や機能追加等を行わない計画ですので、新しく開発をされる方は、 http://webservice.recruit.co.jp/hotpepper/で提供されるリクルートWebサービス版をお使いください。

ユーザー登録

とはいえ、後継サービス(後述)と同じAPIキーが利用できるのでとりあえず発行されましょう。

ユーザー登録

登録したメールアドレスに確認メールがくるので、アクセスするとAPIキーも届きます!やったね!

お店を旧APIでしらべちゃうのですし

えいやっと、PowerShell V4で調べちゃいます。 ShopNameは、UTF8(URLエンコード) とのことなので、[System.Uri]::EscapeDataString()でさくっとUTF8エンコードします。

$key = "APIキーを入れてね"
$storeName = "築地すし好 新橋三丁目店"
$urlEncodeStoreName = [System.Uri]::EscapeDataString($storeName)
$responce = Invoke-RestMethod -Method Get "http://api.hotpepper.jp/GourmetSearch/V110/?key=$key&ShopName=$urlEncodeStoreName"
$result = $responce.Results.Shop
$result
if ($result.count -ne 0)
{
    # IE, Chrome, Opera
    $browsers = @("C:\Program Files\Internet Explorer\iexplore.exe",
                 "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe",
                 "C:\Program Files (x86)\Google\Opera\opera.exe")
    $browser = $browsers.where({Test-Path $_},"last",1)
    & $browser $result.ShopUrl
}

ほーら簡単!オブジェクトとして取得できました!

ShopIdFront          : J000010185
ShopName             : 築地すし好 新橋三丁目店
ShopNameKana         : つきじすしこう しんばしさんちょうめてん
ShopAddress          : 東京都港区新橋3‐15‐4
StationName          : 新橋
KtaiCoupon           : 1
LargeServiceAreaCD   : SS10
LargeServiceAreaName : 関東
ServiceAreaCD        : SA11
ServiceAreaName      : 東京
LargeAreaCD          : Z011
LargeAreaName        : 東京
MiddleAreaCD         : Y005
MiddleAreaName       : 銀座・有楽町・新橋・築地・月島
SmallAreaCD          : X020
SmallAreaName        : 新橋
Latitude             : 35.6653423303
Longitude            : 139.7559146915
GenreCD              : G004
GenreName            : 和食
FoodCD               : R011
FoodName             : 寿司
BudgetCD             : B002
BudgetDesc           : 2001~3000円
BudgetAverage        : 3000円
GenreCatch           : 寿司店
ShopCatch            : にぎり こだわり1品料理
Capacity             : 25
Access               : 新橋駅烏森口徒歩5分
KtaiAccess           : 新橋駅烏森口徒歩5分
ShopUrl              : http://www.hotpepper.jp/strJ000010185/?vos=nhppalsa000016
KtaiShopUrl          : http://hpr.jp/strJ000010185/?uid=NULLGWDOCOMO&vos=hpp336
KtaiQRUrl            : http://webservice.recruit.co.jp/common/qr?url=http%3A%2F%2Fhpr.jp%2FstrJ000010185%2F%3Fuid%3DNULLGWDOCOMO%26vos%3Dhpp337
PictureUrl           : PictureUrl
Open                 : 月~金/17:00~翌3:30土/17:00~24:00
Close                : 日・祝
PartyCapacity        : 6
Wedding              :
Course               : あり
FreeDrink            : なし
FreeFood             : なし
PrivateRoom          : なし
Horigotatsu          : なし
Tatami               : なし
Card                 : 利用可
NonSmoking           : 一部禁煙 :ランチ全禁煙/夜テーブル可・カウンター不可
Charter              : 貸切不可
Ktai                 : つながる
Parking              : なし
BarrierFree          : なし
Sommelier            : いない
OpenAir              : なし
Show                 : なし
Equipment            : なし
Karaoke              : なし
Band                 : 不可
Tv                   : なし
English              : あり
Pet                  : 不可
Child                : お子様連れOK
ブラウザで見たい

そういうかと思って、自動的に IE、Chrome、Opera のいずれかがインストールされているとお店のurlも開いちゃいます。(え....そこまでするの....)*1

f:id:guitarrapc_tech:20131223073947p:plain

ホットペッパー APIリファレンス

ということで、現在のAPIはこれです。

ユーザー登録

永遠のβ版と一緒です。すでに持っている人はいりません。

ユーザー登録

お店をAPIでしらべちゃうのですし

さくっとランキングとか見てみましょう。

料理マスタ

こっちのAPIは、グルメサーチから店名サーチまでわかれています。

料理名マスタで寿司を探しちゃいましょう 使うuri stringはこれです。

"http://webservice.recruit.co.jp/hotpepper/food/v1/?key=$key"

$key = "APIキーを入れてね"
(Invoke-RestMethod -Method Get "http://webservice.recruit.co.jp/hotpepper/food/v1/?key=$key").results.food | where name -eq "寿司"
code name food_category
---- ---- -------------
R011 寿司   food_category

寿司code は、R011ですね。

地域マスタ

地域は、新橋です。東京とか面倒なので、直接指定します。

http://webservice.recruit.co.jp/hotpepper/small_area/v1/?key=$key&keyword=新橋

$key = "APIキーを入れてね"
$areaName = "新橋"
(Invoke-RestMethod -Method Get "http://webservice.recruit.co.jp/hotpepper/small_area/v1/?key=$key&keyword=$areaName").results.small_area | where name -eq $areaName
code name middle_area large_area service_area large_service_area
---- ---- ----------- ---------- ------------ ------------------
X020 新橋   middle_area large_area service_area large_service_area
ランキング

指定条件でランキング順に出ます。

$key = "APIキーを入れてね"
$foodName = "寿司"
$areaName = "新橋"
$foodCode = (Invoke-RestMethod -Method Get "http://webservice.recruit.co.jp/hotpepper/food/v1/?key=$key").results.food | where name -eq $foodName | select -ExpandProperty code
$areaCode = (Invoke-RestMethod -Method Get "http://webservice.recruit.co.jp/hotpepper/small_area/v1/?key=$key&keyword=$areaName").results.small_area | where name -eq $areaName | select -ExpandProperty code
(Invoke-RestMethod -Method Get "http://webservice.recruit.co.jp/hotpepper/gourmet/v1/?key=$key&food=$foodCode&small_area=$areaCode").results.shop | Format-Table -Autosize
id         name            logo_image                                                                  name_kana             address                  station_name
--         ----            ----------                                                                  ---------             -------                  ------------
J000789240 すしざんまい 新橋店      http://imgfp.hotp.jp/IMGH/07/91/P012880791/P012880791_69.jpg                すしざんまい しんばしてん         東京都港区新橋1-12-10 康楽ビル1F 2F 新橋
J001029596 すしざんまい 新橋SL広場前店 http://imgfp.hotp.jp/IMGH/85/35/P017548535/P017548535_69.jpg                すしざんまいしんばしえすえるひろばまえてん 東京都港区新橋2-9-4 新橋乾杯ビル1階    新橋
J000694425 鮨 でですけ          http://imgfp.hotp.jp/SYS/cmn/images/common/diary/custom/m30_img_noimage.gif すし でですけ               東京都港区新橋1-17-8 TKK新橋ビル    新橋
J000010185 築地すし好 新橋三丁目店    http://imgfp.hotp.jp/IMGH/03/48/P000980348/P000980348_69.jpg                つきじすしこう しんばしさんちょうめてん  東京都港区新橋3‐15‐4            新橋
J000010779 新橋 大和鮨          http://imgfp.hotp.jp/IMGH/06/47/P015830647/P015830647_69.jpg                しんばし だいわずし            東京都港区新橋2-9-7             新橋
J000010600 蛇の目寿司 西新橋店      http://imgfp.hotp.jp/IMGH/12/33/P000981233/P000981233_69.jpg                じゃのめずし にししんばしてん       東京都港区西新橋2-13-4           内幸町
J000844233 すし旬彩 鷹の羽 新橋店    http://imgfp.hotp.jp/SYS/cmn/images/common/diary/custom/m30_img_noimage.gif すししゅんさいたかのは しんばしてん    東京都港区新橋3‐6‐1             新橋
J000999828 新橋しのだ寿司 新橋本店    http://imgfp.hotp.jp/IMGH/51/52/P015305152/P015305152_69.jpg                しんばししのだす しんばしほんてん     東京都港区新橋2-6-1 さくら新橋ビルB1   新橋
J000010199 新橋しのだ寿司 烏森店     http://imgfp.hotp.jp/IMGH/04/48/P015320448/P015320448_69.jpg                しんばししのだずし からすもりてん     東京都港区新橋3-2-2             新橋
J000010184 築地すし好 新橋店       http://imgfp.hotp.jp/IMGH/03/48/P000980348/P000980348_69.jpg                つきじすしこう しんばしてん        東京都港区新橋3‐18‐1新橋千陽ビル1F    新橋

位置指定していないので 「order=4」(おすすめ順)に表示するとはいえ、実は評価がのっていない謎仕様。ほげー。ここは同僚のおすすめであった、「すし好 新橋三丁目」店にします。

お店を調べる

店名APIです。さっきのクエリがほとんどそのまま使えちゃいます。が、結果がまとめられたりしてるので、ちょっと小細工します。

$key = "APIキーを入れてね"
$storeName = "築地すし好 新橋三丁目店"
$urlEncodeStoreName = [System.Uri]::EscapeDataString($storeName)
$responce = Invoke-RestMethod -Method Get "http://webservice.recruit.co.jp/hotpepper/shop/v1/?key=$key&keyword=$urlEncodeStoreName"
$result = $responce.results.shop | %{
    [PSCustomObject]@{
        id = $_.id
        name = $_.name
        name_kana = $_.name_kana
        address = $_.address
        genre = $_.genre.name
        urls_pc = $_.urls.pc
        urls_mobile = $_.urls.mobile
        urls_qr = $_.urls.qr
        desc = $_.desc
    }}
$result
if ($result.count -ne 0)
{
    # IE, Chrome, Opera
    $browsers = @("C:\Program Files\Internet Explorer\iexplore.exe",
                 "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe",
                 "C:\Program Files (x86)\Google\Opera\opera.exe")
    $browser = $browsers.where({Test-Path $_},"last",1)
    & $browser $result.urls_pc
}

簡単ですね。

id          : J000010185
name        : 築地すし好 新橋三丁目店
name_kana   : つきじすしこう しんばしさんちょうめてん
address     : 東京都港区新橋3‐15‐4
genre       : 和食
urls_pc     : http://www.hotpepper.jp/strJ000010185/?vos=nhppalsa000016
urls_mobile : http://hpr.jp/strJ000010185/?uid=NULLGWDOCOMO&vos=hpp336
urls_qr     : http://webservice.recruit.co.jp/common/qr?url=http%3A%2F%2Fhpr.jp%2FstrJ000010185%2F%3Fuid%3DNULLGWDOCOMO%26vos%3Dhpp337
desc        : 1

もちろんブラウザでも開きますよ。

本題

はい。お店に行ってきました。実は、道を一本はさんで 「寿司好 新橋」店があるんですねー。間違えてそこにいっちゃって同僚に会えず寒い中10分過ごしました。風邪ひきそうです。

外観

外観は、こじんまりとしてて好きです。

カウンター席

寿司!といえばカウンター席ですね。異論は認めます。が、よく考えてください。カウンター席ということは職人様のあのなめらかな手さばき、鋭い視線を味わえるのです。カウンターがいけるならカウンターに座る。おすすめです。

目の前にはネタが見えました。夜にしたのはアレです。

おすすめ握り

選んだのはにぎりセット - おまかせ 3150円。これにアラ汁を足します。

少し待つこと15分、来ましたにゃ!

運悪くウニが品切れでしたが、大将が気を利かせてくださり大トロに。

ずらりと並ぶ14貫。1つずつ出てくるのが一番好きですが、壮観ですね。

反対からも!手前右はカニです。殻付きの。

平目から始めます。

あら汁 も身が多くて、出汁も出てました!いいですね。

最後に、同僚が頼んでいた フグ唐揚げ です。じゅわーっとおいしそうでした...... お寿司屋さんって一品料理が凄まじく美味しいの謎です。サスガです。

出店から始まった寿司がいつの間にかハレの食事になっていますが、たまに食べるから美味しい.... というのはなく、毎日でも美味しいです。でも財布がいたいので、もうちょっと安くなるとうれしいです....ふにゃん。

明日は、NAL-6295 さんによる 映画と寿司です。お楽しみに!

*1:V4のWhere Method Syntax 使ってるのでV3とか知りません。Where + Select -Last 1 でできますが