OSX のコマンドラインから、wi-fi の情報をつかって位置情報を得る
を見て、面白そうだと思ったのでそのMac版。MacでコマンドラインからWiFiスポットをスキャンするのは、
/System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airport -s
でいけます。ってことで、
use strict;
use warnings;
use utf8;
use 5.012;
use JSON;
use LWP::UserAgent;
my @addresses = do {
my @lines = split /\n/, qx{/System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airport -s};
shift @lines;
my @r;
push @r, (split /\s+/, $_)[2] for @lines;
@r;
};
my $query = encode_json({
version => '1.1.0',
host => 'maps.google.com',
request_address => JSON::true,
address_language => 'ja_JP',
wifi_towers => [
map +{
mac_address => $_,
signal_strength => 8,
age => 0,
}, @addresses,
],
});
my $ua = LWP::UserAgent->new;
my $res = $ua->post('http://www.google.com/loc/json', Content => $query);
$res->is_success or die $res->status_line;
use YAML;
warn Dump decode_json($res->content);
ってな感じでOKです!