読者です 読者をやめる 読者になる 読者になる

Google URL Shortener APIを使う

perl webapi

使ってみたいって思ったのでコードを書いてみる。
cpanから取れるんだろうけど、仕組みを理解したかったので
自分で書いてみた。


はじめに APIキーを取得します。取得は以下の URLから行えます。
https://code.google.com/apis/console/


次にマニュアルを見ます。
http://code.google.com/intl/ja/apis/urlshortener/v1/getting_started.html


APIキーと短くしたい URLをもつ JSONを POSTすることで、
短縮した URLを取得することができます。レスポンスも JSONです。


コードは以下のとおりです。

#!/usr/bin/env perl
use strict;
use warnings;

# reference http://code.google.com/intl/ja/apis/urlshortener/

use Config::Pit;
use JSON::XS;
use HTTP::Request;
use LWP::UserAgent;

my $config = pit_get("goo.gl", require =>{
    key => "Google API Key",
});

my $long_url = shift or die "Usage $0 url\n";
my $posting_json = encode_json({
    key     => $config->{key},
    longUrl => $long_url,
});

my $url = 'https://www.googleapis.com/urlshortener/v1/url';
my $req = HTTP::Request->new('POST', $url);
$req->header('Content-Type' => 'application/json');
$req->content($posting_json);

my $ua = LWP::UserAgent->new(
    agent => 'Google URL Shoter',
    timeout => 10,
);

my $res = $ua->request($req);
unless ($res->is_success) {
    die "Error ", $res->status_line;
}

my $shorten_info = decode_json($res->decoded_content);
print "long url  : ", $shorten_info->{longUrl}, "\n";
print "short url : ", $shorten_info->{id}, "\n";

実行してみます。

 % perl googl.pl http://d.hatena.ne.jp/syohex/
 long url  : http://d.hatena.ne.jp/syohex/
 short url : http://goo.gl/8JLmK

短い方にアクセスした場合にちゃんとオリジナル方のページに
アクセスすることができます。


POSTって具体的にどうやるかってコードを書いたことがなかった
ので知らなかったんですけど、その方法を知ることができました。
HTTP::Requestの使い方も知ることができました。
むしろこっちを知ることができた方がでかいですね。