Home > perl > cpan

cpan Archive

モジュールバージョン確認

今更ながら、perlモジュールのバージョン確認方法。

$ perl -M[モジュール名] -e “print $モジュール名::VERSION”

   $ perl -MFile::Spec -e "print $File::Spec::VERSION"
   1.08

PerlでURLエンコード

食ベログのAPIを使う際に文字列をURIエンコードする必要があったので、そのメモ。

メモ:PerlでURLエンコード・デコードはURI::Escapeを使うを参考にしてURLエンコードをやってみました。

食ベログのAPIを使う際にリクエストの中に駅名を入れたい場合、その駅名をURLエンコードしてやる必要がある。

駅名:新宿 ⇒ URLエンコード:%E6%96%B0%E5%AE%BF

こんな感じです。
以上をPerlで行いたい場合、URL::Escapeというモジュールを使って実現する。

サンプル

結果
escaped: %E6%96%B0%E5%AE%BF
unescaped: 新宿


うまくいけました。
ではでは。

twitter bot作成

twitterでbotを作ろうと決意。

以下のサイトを参考にbotを作りました。

Twitter ボットの作り方 Perl 編

#!/usr/bin/perl

use strict;
use warnings;
use FindBin;
use List::Util;
use Encode;
use YAML::Tiny;
use Net::Twitter;
use AnyEvent::Twitter::Stream;
use DBI;
use Data::Dumper;

my ($sth, $dbh);$dbh = DBI->connect("DBI:mysql:host=localhost;database=hoge", "username, "password");

$sth = $dbh->prepare("select twid from user");
$sth->execute();
my @following_ids;

while (my @val = $sth->fetchrow_array()) {
push @following_ids, $val[0];
}

my $config = (YAML::Tiny->read($FindBin::Bin . '/config.yml'))->[0];
my $twit = Net::Twitter->new(username => $config->{'username'}, password => $config->{'password'});
my $username = $config->{'username'};
my $password = $config->{'password'};

my $template = Encode::encode('utf8', $config->{'template'});

my $cv = AnyEvent->condvar;
my $listener = AnyEvent::Twitter::Stream->new(
username => $username,
password => $password,
method => "filter",
follow => join(",", @following_ids),
on_tweet => sub {
my $tweet = shift;
my $fromuser = $tweet->{user}{screen_name};
my $statusid = $tweet->{id};
my $text = Encode::encode('utf8', $tweet->{text});
my $reply = $template;
return if $fromuser eq $username;
$text =~ s/\s*\@${username}\s*//;
$reply = '@' . "${fromuser} ${reply}";
print "$reply\n";
$twit->update({status => $reply, in_reply_to_status_id => $statusid});
}
);

$cv->recv;

twitter streaming

twitterでリアルタイムにデータを取ってきたかったので、streamingについて調べた。
AnyEvent::Twitter::Streamというのがあったのでこれを使ってみた。

AnyEvent::Twitter::Streamには2種類のデータ取得方法があるらしく、
1.自分または自分がfollowしている人の情報をとってくる
2.自分が設定した情報(track)をとってくる


1.自分がfollowしている人の情報をとってくる。
sample.pl

    #!/usr/bin/perl
use strict;
use warnings;
use AnyEvent::Twitter::Stream;
  
  my $cv = AnyEvent->condvar;
my @following_ids = ("100242797");
  my ($user, $password) = ("username", "******");
my $listener = AnyEvent::Twitter::Stream->new(
username => $user,
password => $password,
method => "filter",
follow => join(",", @following_ids),
on_tweet => sub {
my $tweet = shift;
warn "$tweet->{user}{screen_name}: $tweet->{text}\n";
},
);
$cv->recv;

結果
    test_kiku: ほげ

結構簡単に取れた。
@following_idsにはfollowしているユーザのidをリストで入れる。(idの取得方法は自分で調べるべし。)
AnyEventの詳細はまだ調べてないからわかってないけど、これ使えば色々でけそうだな。


2.自分が設定した情報(track)をとってくる
sample2.pl
    #!/usr/bin/perl
use strict;
use warnings;
use AnyEvent::Twitter::Stream;

my $cv = AnyEvent->condvar;
my ($user, $password) = ("username", "******");
my $guard = AnyEvent::Twitter::Stream->new(
username => $user,
password => $password,
method => "filter",
track => "#test",
on_tweet => sub {
my $tweet = shift;
warn "$tweet->{user}{screen_name}: $tweet->{text}\n";
},
);
$cv->recv;

結果
    test_kiku: #test this is test messege

#testというハッシュタグがついた情報を取ってきた。
他にも自分の注目しているワード?があったときにとってこれるかなと。


さて、こっからが大変だ。

@INC

■モジュールを検索するディレクトリ
perlでモジュールを使用する場合にデフォルトで読み込むディレクトリは@INCに保存されている。

こうすれば見れる。

# perl -e “print @INC”;

■モジュールの検索場所追加
“use lib”を使用すると、モジュールの検索場所を追加することができる。

sample
—–
#!/usr/bin/perl

use strict;
use warnings;
use lib ‘/home/user/module/’;
use MyModule;

—–

以上のようにすることで、’/home/user/module/’ディレクトリ以下も検索するようになる。

ホーム > perl > cpan

Search
Feeds
Meta

Return to page top