理系学生日記

おまえはいつまで学生気分なのか

Pocket からリクエストトークン取得するやつ

Pocket の API の version.3 がいつのまにか出ていて、予想通り oauth2 だったので、リクエストトークン取得する殴り書きスクリプト書いた。
スクリプト書く必要ないとおもう。curl あたり使ったらすぐに取得できるとおもう。HTTP::Body 使う必要もないとおもう。

ひさしぶりに Perl 書いたら、思いの外モジュール名わすれててよくない。POST リクエスト送った後、BAD REQUEST とか言われてアレ、アレ、とかおもってたら、HTTP::UserAgent の使い方まちがってるとかそういうのだった。がんばりたい。

#!/usr/bin/env perl
use strict;
use warnings;
use LWP::UserAgent;
use YAML qw(LoadFile);
use FindBin qw/$Bin/;
use Path::Class;
use Log::Minimal;
use HTTP::Body;

$Log::Minimal::COLOR = 1;

my $REQUEST_URL = 'https://getpocket.com/v3/oauth/request';
my $agent = LWP::UserAgent->new;

my $file = file($Bin)->parent->subdir('01.info')->file('app-info.yaml');
my $dat  = LoadFile($file);
my $consumer_key = $dat->{'ConsumerKey'};

debugf("sending request with consumer key: $consumer_key");
my $res = $agent->post(
    $REQUEST_URL, {
	consumer_key => $consumer_key,
	redirect_uri => 'http://www.google.com',
	state        => ''
    }
);

debugf("http statusline: [", $res->status_line, "]");
if ( $res->is_success ) {
    my $content = $res->content;
    my $body = HTTP::Body->new( $res->header('Content-Type'), $res->header('Content-Length'));
    $body->add($content);

    print $body->param->{'code'}, "\n";
}
else {
    croakf "failed. " . $res->status_line;
}