WWW::Shorten::Bitly(3)

NAME
WWW::Shorten::Bitly - Interface to shortening URLs using <http://bitly.com>

SYNOPSIS
The traditional way, using the WWW::Shorten interface:

    use strict;
    use warnings;

    use WWW::Shorten::Bitly;
    # use WWW::Shorten 'Bitly';  # or, this way

    # if you have a config file with your credentials:
    my $short_url = makeashorterlink('http://www.foo.com/some/long/url');
    my $long_url  = makealongerlink($short_url);

    # otherwise
    my $short = makeashorterlink('http://www.foo.com/some/long/url', {
        username => 'username',
        password => 'password',
        ...
    });

Or, the Object-Oriented way:

    use strict;
    use warnings;
    use Data::Dumper;
    use Try::Tiny qw(try catch);
    use WWW::Shorten::Bitly;

    my $bitly = WWW::Shorten::Bitly->new(
        username => 'username',
        password => 'password',
        client_id => 'adflkdgalgka',
        client_secret => 'sldfkjasdflg',
    );

    try {
        my $res = $bitly->shorten(longUrl => 'http://google.com/');
        say Dumper $res;
        # {
        #   global_hash => "900913",
        #   hash => "ze6poY",
        #   long_url => "http://google.com/",
        #   new_hash => 0,
        #   url => "http://bit.ly/ze6poY"
        # }
    }
    catch {
        die("Oh, no! $_");
    };

DESCRIPTION
A Perl interface to the Bitly.com API <https://dev.bitly.com/api.html>.

You can either use the traditional (non-OO) interface provided by WWW::Shorten. Or, you can use the OO interface that provides you with more functionality.

FUNCTIONS
In the non-OO form, WWW::Shorten::Bitly makes the following functions available.

  makeashorterlink
    my $short_url = makeashorterlink('https://some_long_link.com');
    # OR
    my $short_url = makeashorterlink('https://some_long_link.com', {
        username => 'foo',
        password => 'bar',
        # any other attribute can be set as well.
    });

The function "makeashorterlink" will call the <http://bitly.com> web site, passing it your long URL and will return the shorter version.

<http://bitly.com> requires the use of a user id and API key to shorten links.

  makealongerlink
    my $long_url = makealongerlink('http://bit.ly/ze6poY');
    # OR
    my $long_url = makealongerlink('http://bit.ly/ze6poY', {
        username => 'foo',
        password => 'bar',
        # any other attribute can be set as well.
    });

The function "makealongerlink" does the reverse. "makealongerlink" will accept as an argument either the full URL or just the identifier.

If anything goes wrong, either function will die.

ATTRIBUTES
In the OO form, each WWW::Shorten::Bitly instance makes the following attributes available. Please note that changing any attribute will unset the "access_token" in WWW::Shorten::Bitly attribute and effectively log you out.

  access_token
    my $token = $bitly->access_token;
    $bitly = $bitly->access_token('some_access_token'); # method chaining

Gets or sets the "access_token". If the token is set, then we won't try to login. You can set this ahead of time if you like, or it will be set on the first method call or on "login" in WWW::Shorten::Bitly.

  client_id
    my $id = $bitly->client_id;
    $bitly = $bitly->client_id('some_client_id'); # method chaining

Gets or sets the "client_id". This is used in the Resource Owner Credentials Grants <https://dev.bitly.com/authentication.html#resource_owner_credentials> login method along with the "client_secret" in WWW::Shorten::Bitly attribute.

  client_secret
    my $secret = $bitly->client_secret;
    $bitly = $bitly->client_secret('some_secret'); # method chaining

Gets or sets the "client_secret". This is used in the Resource Owner Credentials Grants <https://dev.bitly.com/authentication.html#resource_owner_credentials> login method along with the "client_id" in WWW::Shorten::Bitly attribute.

  password
    my $password = $bitly->password;
    $bitly = $bitly->password('some_secret'); # method chaining

Gets or sets the "password". This is used in both the Resource Owner Credentials Grants <https://dev.bitly.com/authentication.html#resource_owner_credentials> and the HTTP Basic Authentication <https://dev.bitly.com/authentication.html#basicauth> login methods.

  username
    my $username = $bitly->username;
    $bitly = $bitly->username('my_username'); # method chaining

Gets or sets the "username". This is used in both the Resource Owner Credentials Grants <https://dev.bitly.com/authentication.html#resource_owner_credentials> and the HTTP Basic Authentication <https://dev.bitly.com/authentication.html#basicauth> login methods.

METHODS
In the OO form, WWW::Shorten::Bitly makes the following methods available.

  new
    my $bitly = WWW::Shorten::Bitly->new(
        access_token => 'sometokenIalreadyreceived24123123512451',
        client_id => 'some id here',
        client_secret => 'some super secret thing',
        password => 'my password',
        username => 'my_username@foobar.com'
    );

The constructor can take any of the attributes above as parameters. If you've logged in using some other form (OAuth2, etc.) then all you need to do is provide the "access_token".

Any or all of the attributes can be set in your configuration file. If you have a configuration file and you pass parameters to "new", the parameters passed in will take precedence.

  bitly_pro_domain
    my $bpd = $bitly->bitly_pro_domain(domain => 'http://nyti.ms');
    say Dumper $bpd;

    my $bpd2 = $bitly->bitly_pro_domain(domain => 'http://example.com');
    say Dumper $bpd2;

Query whether a given domain is a valid Bitly pro domain. Returns a hash reference with the information or dies on error.

  clicks
    my $clicks = $bitly->clicks(
        link => "http://bit.ly/1RmnUT",
        unit => 'day',
        units => -1,
        timezone => 'America/New_York',
        rollup => 'false', # or 'true'
        limit => 100, # from 1 to 1000
        unit_reference_ts => 'now', # epoch timestamp
    );
    say Dumper $clicks;

Get the number of clicks <https://dev.bitly.com/link_metrics.html#v3_link_clicks> on a single link. Returns a hash reference of information or dies.

  clicks_by_day
    my $clicks = $bitly->clicks_by_day(
        link => "http://bit.ly/1RmnUT",
        timezone => 'America/New_York',
        rollup => 'false', # or 'true'
        limit => 100, # from 1 to 1000
        unit_reference_ts => 'now', # epoch timestamp
    );
    say Dumper $clicks;

This call used to exist, but now is merely an alias to the "clicks" in WWW::Shorten::Bitly method that hard-sets the "unit" to 'day' and the "units" to 7. Returns a hash reference of information or dies.

  countries
    my $countries = $bitly->countries(
        unit => 'day',
        units => -1,
        timezone => 'America/New_York',
        rollup => 'false', # or 'true'
        limit => 100, # from 1 to 1000
        unit_reference_ts => 'now', # epoch timestamp
    );
    say Dumper $countries;

Returns a hash reference of aggregate metrics about the countries referring click traffic <https://dev.bitly.com/user_metrics.html#v3_user_countries> to all of the authenticated user's links. Dies on failure.

  expand
    my $long = $bitly->expand(
        shortUrl => "http://bit.ly/1RmnUT", # OR
        hash => '1RmnUT', # or: 'custom-name'
    );
    say $long->{long_url};

Expand a URL using <https://dev.bitly.com/links.html#v3_expand>. Older versions of this library required you to pass a "URL" parameter. That parameter has been aliased for your convenience. However, we urge you to stick with the parameters in the API. Returns a hash reference or dies.

  info
    my $info = $bitly->info(
        shortUrl => 'http://bitly.com/jmv6', # OR
        hash => 'jmv6',
        expand_user => 'false', # or 'true'
    );
    say Dumper $info;

Get info about a shorter URL using the info method call <https://dev.bitly.com/links.html#v3_info>. This will return a hash reference full of information about the given short URL or hash. It will die on failure.

  login
    use Try::Tiny qw(try catch);

    try {
        $bitly->login();
        say "yay, logged in!";
    }
    catch {
        warn "Crap! Our login failed! $_";
    };

This method will just return your object instance if your "access_token" is already set. Otherwise, it will make use of one of the two login methods depending on how much information you've supplied. On success, the "access_token" attribute will be set and your instance will be returned (method-chaining). On failure, an exception with relevant information will be thrown.

If you would prefer, you can use one of the other two forms of logging in:

•   Resource Owner Credentials Grants <https://dev.bitly.com/authentication.html#resource_owner_credentials>

•   HTTP Basic Authentication <https://dev.bitly.com/authentication.html#basicauth>

These two forms require at least the "username" and "password" parameters.

  lookup
    my $info = $bitly->lookup(url => "http://www.google.com/");
    say $info;

Use this lookup method call <https://dev.bitly.com/links.html#v3_link_lookup> to query for a short URL based on a long URL. Returns a hash reference or dies.

  referrers
    my $refs = $bitly->referrers(
        link => "http://bit.ly/1RmnUT",
        unit => 'day',
        units => -1,
        timezone => 'America/New_York',
        rollup => 'false', # or 'true'
        limit => 100, # from 1 to 1000
        unit_reference_ts => 'now', # epoch timestamp
    );
    say Dumper $refs;

Use the referrers API call <https://dev.bitly.com/link_metrics.html#v3_link_referrers> to get metrics about the pages referring click traffic to a single short URL. Returns a hash reference or dies.

  shorten
    my $short = $bitly->shorten(
        longUrl => "http://www.example.com", # required.
        domain => 'bit.ly', # or: 'j.mp' or 'bitly.com'
    );
    say $short->{url};

Shorten a URL using <https://dev.bitly.com/links.html#v3_shorten>. Older versions of this library required you to pass a "URL" parameter. That parameter has been aliased for your convenience. However, we urge you to stick with the parameters in the API. Returns a hash reference or dies.

CONFIG FILES
"$HOME/.bitly" or "_bitly" on Windows Systems.

    username=username
    password=some_password_here
    client_id=foobarbaz
    client_secret=asdlfkjadslkgj34t34talkgjag

Set any or all "ATTRIBUTES" in WWW::Shorten::Bitly in your config file in your home directory. Each "key=val" setting should be on its own line. If any parameters are then passed to the "new" in WWW::Shorten::Bitly constructor, those parameter values will take precedence over these.

AUTHOR
Pankaj Jain <pjain@cpan.org>

CONTRIBUTORS

•   Chase Whitener <capoeirab@cpan.org>

•   Joerg Meltzer <joerg@joergmeltzer.de>

•   Mizar <mizar.jp@gmail.com>

•   Peter Edwards <pedwards@cpan.org>

•   Thai Thanh Nguyen <thai@thaiandhien.com>

COPYRIGHT & LICENSE
Copyright (c) 2009 Pankaj Jain, All Rights Reserved <http://blog.pjain.me>.

Copyright (c) 2009 Teknatus Solutions LLC, All Rights Reserved <http://teknatus.com>.

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.