高木先生のMACアドレスと位置情報サービスに関する記事 の注釈6にある、Google位置情報サービスからMACアドレスを指定して住所を抜き出すスクリプトが、上手く動かないので改造してみた。
うまく動かない理由は高木先生も触れられている通り、Googleの仕様変更により、2つ以上のMACアドレスを与えなければ、住所データを返してくれなくなったため。元々のスクリプトは1つしかMACアドレスを送れない仕様となっていたので、それを2つ送れるように変更し、返ってくる住所情報が日本語になるようにしてみた。
#!/bin/bash
if [ $# != 2 ]; then
echo "# Google Gears WiFi Geolocation API query by ShadowHat=esYou"
echo "# Shadow@SquatThis.net"
echo "#"
echo "# Use: $0 MAC1 MAC2"
echo "# $0 00-C0-26-A9-42-F7 00-C0-26-A9-42-F8"
echo "#"
exit;
fi;
curl http://www.google.com/loc/json -H "Pragma: no-cache" -H "Cache-control: no-cache" -d "{ \"version\": \"1.1.0\", \"host\":
\"maps.google.com\", \"request_address\": true, \"address_language\":
\"ja_JP\", \"wifi_towers\": [ { \"mac_address\": \"$1\",
\"signal_strength\": 8, \"age\": 0 },
{ \"mac_address\": \"$2\", \"signal_strength\": 8, \"age\": 0 } ] }"
echo ""
./スクリプト名 MACアドレス1 MACアドレス2
とすれば、データがあればGoogleから住所情報が返ってくる。高木先生が公開されている、FONのMACアドレスで動作確認したところ、同じ情報が返ってきた。
もっとたくさん同時に送るようにするには、
if [ $# != 2 ]; then
の数字を増やして、
{ \"mac_address\": \"$1\", \"signal_strength\": 8, \"age\": 0 },
の部分を追加していけばいい。例えば
\"wifi_towers\": [ { \"mac_address\": \"$1\",
\"signal_strength\": 8, \"age\": 0 },
{ \"mac_address\": \"$2\", \"signal_strength\": 8, \"age\": 0 }.
{ \"mac_address\": \"$3\", \"signal_strength\": 8, \"age\": 0 },
{ \"mac_address\": \"$4\", \"signal_strength\": 8, \"age\": 0 } ] }"
みたいな感じで。この例だと4つまで同時に送れるようになる。