OSX のコマンドラインから、wi-fi の情報をつかって位置情報を得る

linux のコマンドラインから、wi-fi の情報をつかって位置情報を得る - tokuhirom's blog.

を見て、面白そうだと思ったのでその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です!

by typester / at 2012-07-21T12:32:00 / perl · osx / Comments(0)