NAME
    WebService::MobileMe - access MobileMe iPhone stuffs from Perl

VERSION
    version 0.005

SYNOPSIS
        use WebService::MobileMe;

        my $mme = WebService::MobileMe->new(
            username => 'urmom@me.com', password => 'HUGELOVE' );
        my $location = $mme->locate;

        $mme->sendMessage( message => 'Hi Yaakov!', alarm => 1 );

        $mme->remoteLock( 42 );

DESCRIPTION
    THIS MODULE THROWS EXCEPTIONS, USE TRY::TINY OR SIMILIAR IF YOU WISH TO
    CATCH THEM.

    This module is alpha software released under the release early, release
    sort of often principle. It works for me but contains not much error
    checking yet, soon to come! (maybe)

    This module supports retrieving a latitude/longitude, sending a message,
    and remote locking of an iPhone via the 'Find My iPhone' service from
    Apple's MobileMe, emulating the Find My iPhone iOS app.

    Timestamps returned are those returned in the JSON which are JavaScript
    timestamps and thus in miliseconds since the epoch. Divide by 1000 for
    seconds.

METHODS
  "new"
        my $mme = new WebService::MobileMe->new(
            username => '', password => '', debug => 1);

    Returns a new "WebService::MobileMe" object. The only arguments are
    username and password coresponding to your MobileMe login and debug.

    If you have a paid MobileMe account, include the @me.com in the
    username.

    The constructor logs in to Mobile Me and retrieves the currently
    available information. If something fails, it will thow an error.

  "locate"
        my $location = $mme->locate();

    Takes an optional device number, starting at 0. Returns the raw json
    parsed from Apple.

    This is currently:

        $location = {
            'horizontalAccuracy' => '10',
            'longitude' => '-74.4966423982358',
            'latitude' => '39.4651979706557',
            'positionType' => 'GPS',
            'timeStamp' => '1290924314359',
            'isOld' => bless( do{\(my $o = 0)}, 'JSON::XS::Boolean' ),
            'locationFinished' => bless( do{\(my $o = 1)}, 'JSON::XS::Boolean' )
        };

    NOTE: The timeStamp is a JavaScript timestamp so it is miliseconds since
    the epoch. Divide by 1000 for seconds since.

  sendMessage
        my $r = $mme->sendMessage( message => 'Hello, World!', alarm => 1);

    Takes one required and three optional arguments. Returns a structure
    containg the parsed JSON returned by apple

    *   "message" (REQUIRED)

        The message to display.

    *   "alarm"

        A true value cause the iPhone to make noise when the message is
        displayed, defaults to false.

    *   "device"

        The device number on the account to send the message to. Defaults to
        0, the first device.

    The returned structure currently looks like:

        $message = {
            'createTimestamp' => '1290933263675',
            'statusCode' => '200'
        }

  remoteLock
        $mme->remoteLock( 42 );

    Sends a remote lock request with the designated passcode. Optionaly also
    takes a device number which defaults to 0, the first device.

    The returned structure currently looks like:

        $lock = {
            'createTimestamp' => '1290929589780',
            'statusCode' => '2200'
        }

  device
        my $device = $mme->device()

    Takes one optional argument, the device number. Defaults to device 0,
    the first device. Returns the full structure for the specified device
    which currently looks like:

        $device = {
            'a' => 'NotCharging',
            'isLocating' => bless( do{\(my $o = 1)}, 'JSON::XS::Boolean' ),
            'deviceModel' => 'FourthGen',
            'id' => 'deadbeef',
            'remoteLock' => undef,
            'msg' => undef,
            'remoteWipe' => undef,
            'location' => {
                 'horizontalAccuracy' => '10',
                 'longitude' => '-74.4966423982358',
                 'latitude' => '39.4651979706557',
                 'positionType' => 'GPS',
                 'timeStamp' => '1290924314359',
                 'isOld' => bless( do{\(my $o = 0)}, 'JSON::XS::Boolean' ),
                 'locationFinished' => $VAR1->{'isLocating'}
            },
            'features' => {
                 'KEY' => $VAR1->{'isLocating'},
                 'WIP' => $VAR1->{'isLocating'},
                 'LCK' => $VAR1->{'isLocating'},
                 'SND' => $VAR1->{'isLocating'},
                 'LOC' => $VAR1->{'isLocating'},
                 'REM' => $VAR1->{'location'}{'isOld'},
                 'CWP' => $VAR1->{'location'}{'isOld'},
                 'MSG' => $VAR1->{'isLocating'}
            },
            'deviceStatus' => '203',
            'name' => 'mmm cake',
            'thisDevice' => $VAR1->{'location'}{'isOld'},
            'b' => '1',
            'locationEnabled' => $VAR1->{'isLocating'},
            'deviceDisplayName' => 'iPhone 4',
            'deviceClass' => 'iPhone'
        };

    remoteWipe, msg, and remoteLock will contain structures similiar to
    those returned by the appropriate methods if they have been used in the
    recent past.

