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

Webサービス即日開発の実践3(Perl)〜Twitter API 1.1対応とhttps対応

しばらく更新が滞ってしまいました。
投稿する時間も惜しんでコーディングしていて、なんとか無事に動くコードが完成しました。

詰まった箇所は、主に以下の2つです。
Twitter APIの仕様変更
②4バイト文字(絵文字や非常用漢字)の取り扱い

①は、サンプルコードが2010年のものでTwitter API 1.0を利用していたため、Twitter API 1.1に対応させる必要がありました。また開発中の1/14にhttpsも必須(http://news.mynavi.jp/news/2014/01/16/459/)になったため、その対応も実施し、以下のように書きました。

package Umakatter::CLI::FeedReader;
use Moose;
use Carp;
use URI;
use XML::Feed;
use Umakatter::CLI::FeedReader::Tweet;
use strict;
use Net::Twitter;
use utf8;

has 'consumer_key' => (
is => 'ro',
isa => 'Str',
default => 'xxxx'
);

has 'consumer_secret' => (
is => 'ro',
isa => 'Str',
default => 'xxxx'
);

has 'access_token' => (
is => 'ro',
isa => 'Str',
default => 'xxxx'
);

has 'access_token_secret' => (
is => 'ro',
isa => 'Str',
default => 'xxxx'
);

no Moose;

sub entries {
my $self = shift;
my $nt = Net::Twitter->new({
traits => [qw/API::RESTv1_1/],
ssl => 1,
consumer_key => $self->consumer_key,
consumer_secret => $self->consumer_secret,
access_token => $self->access_token,
access_token_secret => $self->access_token_secret,
});
my $r = $nt->search({q=>'美味い店', lang=>"ja", count=>100});
return @{$r->{statuses}};
}

sub tweets {
my $self = shift;
my @tweets;
my @entries = $self->entries;
for my $entry (@entries) {
push( @tweets,
Umakatter::CLI::FeedReader::Tweet->new($entry)
);
}
return \@tweets;
}


初期はssl => 1ではなく、api_urlにhttpsのURLを指定して実装していたのですが、https接続でエラーになったため、http://za.toypark.in/html/2009/10-21.htmlを参照して、IO::Socket::SSLMozilla::CAを導入しています。


②は、また次の記事にします。