よるほーbotを改良した。主に認証関係を

昔、よるほーbotを作成したんですが、その時はまだどこにでも書いてありそうなコードを使ってたのでもうちょっとレベルアップした形で書いてみました。

具体的に

具体的に何したのかっていうとConfig::Pitをしようしてユーザ名を隠したっていうことです。しょぼいとか言うな。なんかいろいろあってこの辺りで1週間ぐらい悩んでた。


ソース

#! /opt/local/bin/perl                                                                                                  
use strict;
use warnings;

use Net::Twitter;
use Config::Pit;
use encoding 'UTF-8', STDOUT => 'cp932';
#use YAML;

my $config = pit_get("twitter.com", require=> {
    username=> '',
    password=> '',
});

my $nt = Net::Twitter->new(
    traits  => [qw/API::REST/],
    %$config,
);

my $text = 'よるほー';
utf8::encode($text);
my $result = $nt->update($text);

実はこのコードを書く上でいろいろ環境を変えたせいで変なことになってます*1が特に気にしないで大丈夫です。


さて、コードを見ていきましょう。

お約束
use strict;
use warnings;

定番ですね。必ず入れましょう。某社に入社できなくなるので

モジュール
use Net::Twitter;
use Config::Pit;
use encoding 'UTF-8', STDOUT => 'cp932';
#use YAML;

行順で説明
Net::Twitterを使います。前回と同じです。
今回の目玉であるConfig::Pitです。あとで使い方を説明します。
エンコードを指定。
Net::Twitterを使う時はYAMLをつかうのがらくっぽそうです。今回はTLの内容を扱ったりすることがないのでコメントアウトしてます。

Config::Pit部分

my $config = pit_get("twitter.com", require=> {
    username=> '',
    password=> '',
});

pit_getとかpit_setとかあるっぽい。説明が逆になっちゃうけど、第一引数で呼び出したいアカウントを指定します。そのあとに必要な情報を呼び出す感じです。

アカウントとパスワードを登録してみる

Config::Pit::Setを使うよりもシェルをガコガコ叩く方が好きなのでシェルの方で説明するよ*2

$ ppit set twitter.com

とか叩くとエディタが起動します。
ちなみにppitってコマンドはConfig::Pitを入れたら入るぽい?
ちなみにエディタは環境変数の$EDITORに依存するらしいです。echo $EDITORとか叩いてみよう
あとはYAML形式で

"username": 'asoans'
"password": '貴様見ているな!!'

みたいな。適宜会わせて入力してください。
これで設定は終了です

以下のソースは前回と同じなので割愛です。Config::Pitの使い方を理解できたらいいの。
あとは前回設定したcronでがんがん動きますね!

番外編

さて、主な設定は済んだのですが、実は僕はこのコードを書く前にPerlのバージョンをあげたりCPANを入れ直してたりしていろいろおかしな事になってました。
順序的にはPerlを入れ直した後にCPANを入れ直したんですが、このときにモジュールの読み込みの設定とか、古いPerlを消してない*3のでPATHの書き方がおかしくてcronさんが参照するPerlがおかしかったりしました。
まぁようするにしょぼいミスに気がつかなかっただけです。前に書いたcrontabは

0 0 * * * perl /Users/asonas/Sites/twitter/twitter.pl

みたいだったんですが、これを

0 0 * * * /opt/local/bin/perl /Users/asonas/Sites/twitter/twitter.pl

とフルパス指定にしてやることで一切合切解決しました。cronさんの参照するPerlがおかしかっただけですね。

余談1

Perl関連でわかんないことがあったらperldocに聞いてみるのが一番早いですね。英語だけど、そんなに難しいことは書いてないのでさらっと読んでそれっぽいコードを参照すると一番解決にたどり着けます

余談2

今まで完全に無視してたんですけど、シェルさんが起動するたびに”You have new mail”とか言ってきててなんかのジョークかと思ってたんですが、調べてみるとホントにメールが来てて /var/mail以下にエラーログが溜まる様になってたんですね。始めて知りました。cronさんがこけてるのを知ったんですけど、エラーログを吐いてくれる場所がわからなくて四苦八苦してました。シェル系でエラーがでるとだいたい/var/mail以下にメールがたまるっぽいですね。catしてよんであげるといいですね。

*1:主にPerlの位置

*2:というか、本番コードにアカウント書かないために使うんだからシェルで隠匿するほうがよいよね。

*3:/usr/bin以下のPerlと/opt/local/bin以下のPerlがあったのね