Remember the milkのAPIで認証する

30分プログラム、その346。Remember The Milk: Online to-do list and task managementAPIで認証が必要なやつにチャレンジしてみる。
が、うまくいかない。Remember The Milk - Services / API / Authenticationを参考にしてるはずなんだけどなぁ。

使い方

$ <つかえない>

ソースコード

#! /usr/bin/perl
# -*- mode:perl; coding:utf-8 -*-
#
# rtm.pl -
#
# Copyright(C) 2008 by mzp
# Author: MIZUNO Hiroki / mzpppp at gmail dot com
# http://howdyworld.org
#
# Timestamp: 2008/08/13 23:24:51
#
# This program is free software; you can redistribute it and/or
# modify it under MIT Lincence.
#
use strict;
use warnings;

use LWP::Simple;
use JSON::XS;
use Digest::MD5 qw(md5_hex);

use Data::Dumper;

my %default = (
  'api_key' => '<api key>',
  'format'  => 'json');

sub params(%){
    my (%params) = @_;
    join('&',map { "${_}=${params{$_}}" } sort keys %params);
}

sub api_sig(%){
    my (%params) = @_;
    my $concat = join('', map { "${_}${params{$_}}" } sort keys %params);
    my $secret = '<secret key>';
    md5_hex($secret . $concat);
}

sub request($$%){
    my ($rest,%params) = @_;
    my $params = params(%params);
    print Dumper($rest.$params.'&api_sig='.api_sig(%params));
    decode_json get($rest.$params.'&api_sig='.api_sig(%params));
}

my $rest = 'http://api.rememberthemilk.com/services/rest/?';
my $auth = 'http://www.rememberthemilk.com/services/auth/?';

sub auth_key(){
    my $frob = request($rest,
		       'method'=>'rtm.auth.getFrob',
		       %default)->{'rsp'}->{'frob'};
    request($auth,'perms'=>'delete','frob'=>$frob,%default);
}

print Dumper(auth_key());