ARGV[0]をtweet

ARGV[0]をtweetしてみた。日本語がダメだ。utf-8で保存したテキストファイルを読んで書いたらいけた。140字を超える文字列を渡すと書けない。

perlのtwitter bot

perlで、twitter apiを使って投稿してみる。BOTのようなことをするわけだが、BOTを作ることが目的ではない。あるサイトを参考にする。 必要なモジュールをインストール。

YAML::Tiny
Net::Twitter

Tinyはcpanでできたが、Twitterは64bitではどうのこうのと言ってエラーになるので、

ppm install Net::Twitter

でインストールする。前にもなんかで失敗して、ppmを使った覚えがある。以下のように書いて、アカウントとパスワードを書いた config.yml というファイルを作る。
#! /usr/bin/perl

use strict;
use warnings;
use YAML::Tiny;
use Net::Twitter;

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

$twit->update('I am not an animal.');

config.yml
username: your_account
password: your_password

スクリプトを実行する。
USER_NAME I am not an animal.
half a minute ago from Perl Net::Twitter

from Perl Net::Twitter は出したくないなあ・・・まあいっか。 

日本語はエンコードしないとダメか・・・・と調べかけるが、とりあえずやってみたら、いけた。さっき書き忘れたが、perlのスクリプトの文字コードは utf-8 で保存する。 よし、これができれば、後は発想しだい。

このページのポストを押したときに更新通知をするとか、ワンクリックでスクリーンショットをアップロードしてURLを通知するとか、やらないけど、spam的なこともできる。 参考にさせていただいたサイトは、とくに紹介しなくても多分有名なので検索すればすぐ見つかるでしょう。非常に親切で、ステップを追って説明されており、内容そのものもですが、表現・説明の仕方も参考になりました。

今回は下準備の段階のみ参考にした。ここが大事。いろんなことをやろうとしていつもつまづくのは最初。環境の問題、OSとかバージョンとかなんとか。これは、何かするときに机の上を片付けるようなもの。または、本を参照させるときにしおりを挟んでおくようなもの。「そこにあるよ」と雑然とした机を指差したり、「これ読めよ。目次でさがせよ」みたいな説明のしかたは、ダメ。手取り足取り教えてられない、社会は仕事はそんなに甘くない、というのはウソだ。それが仕事だ。サービスだ。われわれがしているのは奴隷の労働でも刑務所の作業でもないのだ。 仕事というのは、同じ事の繰り返し、単調な退屈なことの繰り返しがどうしてもある。だが、それはことごとく根絶すべきである。それを根絶するのが仕事でありサービスである。メンドクサイとかタイクツだというのは、別に甘えでもワガママでもない。機械にできることは機械にやらせる。 

道を歩いていて、真ん中に石が落ちていたら脇にどける。自分が通るためにどけた石を、また元の位置に戻して進んでいくような人が、たまにいる。 最近山登りをするようになったのだが、登り始めに必ず「一山」ある。息が切れ、足が重くなり、「こんな調子じゃとても頂上は無理だ」という気にさせられる。が、そこを越えるとすいすいと進む段階が現れる。そして、その後も苦痛や困難は訪れるが、一回乗り越えることを知っているので対処することができる。 しかし、先ほど言ったような前人が石を置いたような困難に出会うと、ダメだ。そういう困難に人は勝てない。そりゃうつ病にもなるさ。そういう道を行くと、そういう人が先に待っているということだ。そして知らず知らず、自分も先人のようになってしまう。

Internal server error 500 じゃ、なにもわからないからね。ftpdをいれて、apacheを入れて、perlをいれればいいんだろ?じゃ、スタート。

 10/02/12(Fri) 18:25

ip addressは、Windowsと同じサブネットの違うアドレスになっていて、ゲートウェイと、Windows pcのアドレスにpingは通る。resolv.confに、ゲートウェイのアドレスが書いてある。ということは、もうインターネットにつながっている。pingが通ることを確認する。 windows pcからftpしてみるが、応答がない。ftpdが無効になっているようだ。inetd.confの、ftpの行がコメントになっているので外す。反映させるにはどうしたらいいのか?わからないので、reboot。 rootのパスワードはなんだっけ?自分の慣例となっているパスワードを入れてみると、合っていた。 psしてみるが、ftpdはない。inetdだから、psではわからないのか。ftp localhostとしてみると、プロンプトが表示された。そしてすぐに気付いた、rootでftpはできないはず、アカウントをつくらないと。と思いはしたが、とりあえずログインしてみると、入れない。やっぱりダメか。

 10/02/12(Fri) 18:36

 アカウントを追加するコマンドは useraddだ。

useradd hogehoge

ホームディレクトリを作らなかったよ、みたいなエラーメッセージがでるが、無視して、パスワードを設定する。
passwd hogehoge

new passwordをきかれ、さらにretypeして設定できた。

windowsからftpすると、無事にログインできたが、ホームディレクトリがないよ、というメッセージが出た。後々面倒だからやっぱり作っておこう。が、後から作ってもパーミッションとかオーナーとかを設定もする必要があって、フォルダを作っただけでは不具合があったことを思い出したので、いったん

userdel hogehoge

で消して、
adduser hogehoge -m

でホームディレクトリを作るようにして作り直し、パスワードも再設定した。デフォルトで作れよ!って感じ。

 10/02/12(Fri) 18:52
じゃ、apacheいれようか。そうそう、virtual pcはX を立ち上げるとマウスを外に出すのに右Altを押さなきゃならないのでCtrl+Alt+BSで終了して、640x480のCUIにしておく。

apacheのインストールなんて、10年ぶりくらいだ。どうなってるんだろう、今・・・? 

apacheの公式サイトにいって最新版をダウンロードしようとしたがリンク切れ。公式サイトだろ?何やってんだよ、とひとつ前のバージョンをクリック。これはある。あ、webブラウザから落とせばいいのか、と、さっき落としたXをたちあげるも、ブラウザがないことに気付く。 netbsdにブラウザをインストール。ブラウザをインストール(笑)だと?なに?netbsdにはブラウザがない?lynx?まあいい・・・ pkgsrc とかいうものがあるのを知る。この後apachやらperlやら入れるから、pkgsrcとやらを入れておくか。 windowsでnetbsdのofficialサイトでありかを確認してから、コマンドでftpして入る。 idは anonymous、パスワードはなしで入れる。

bin
get pkgsrc.tar.gz

10/02/12(Fri) 18:54

その前になんでnetbsdなの?ってきかれるかもしれない。うーん、ちょっと仕事で使ったことがあって、そのときに家でも入れてみたのが、残っていただけで。なんかFreeBSDとほとんど同じっぽいので、いいかな、と。

 10/02/12(Fri) 19:02

 pkgsrc.tar.gzは /usrにダウンロードされていた。
tar xzf ./pkgsrc.tar.gz

なんだいこのおまじないみたいなコマンドは?キョウビiPhoneじゃワンタッチでアプリ入るんだぜ? と、なんかHDD関連のエラーメッセージが緑色に表示されて、停まってしまう。
wd0a: DMA error writing fsbn 25846540 of 25846540-25846543 (wd0 bn 25846603; cn 25641 tn 7 sn 34), retrying
wd0: soft error (corrected)

・・・・?なんだかよくわからないが最終的には正常になったようだ。同じメッセージが2回でる。とおもったらまた出る。何度も出る。もう3分ほどたっている。イヤな予感がする。

 10/02/12(Fri) 19:05

Ctrl+c・・・停まらない。何度か押す。停まった。もう一回やる。同じエラー。なんだよこれは!とりあえずrebootする。

 10/02/12(Fri) 19:09

さっき作ったアカウントでログインしてsuするが、「suできない」と言われるので、rootで入りなおす。またtar する。同じエラーがたくさん出る。とりあえず待ってみるか。 

10/02/12(Fri) 19:09

別の場所にコピーしたら直るかな・・・などと思う。こんなことやらせんなよ・・・ 

10/02/12(Fri) 19:19

 ダメそうなので、やめる。 windowsにapacheのソースを落として、ftpで移す。 httpd-2.2.14.tar.gz 解凍すると、同じエラーが一回だけ出たが、correctedとなって、解凍できた。

 10/02/12(Fri) 19:26 configureでエラーになる。さっさとあきらめて1.3.42にする。古いからな。

./configure
make
make install

ま、慣習だけど、なんで一発でインストールできないのかと思う。 終わった後、ここにインストールされましたよ、というメッセージがでる。コピペに失敗し、消えてしまう。
/usr/local/apache/bin

に、 apachectl というのがある。
apachectl start

で起動した。 windowsのIEからip addressでアクセスするとあの懐かしいテストページが表示された。 次はperlだ。www.perl.comから、perl-5.11.4.tar.gzを落とす。なんか、でかい。

./Configure (先頭は大文字)

すると、unstable releaseだという警告が出る・・・ったく・・。カレントリリースいうたやんけ!!と思いながら previous versionを落とす。 5.6.2 ./Configure すると、なんか言われる。どうもいくつか確認させられるらしい。急ぐなら ./Configure -d にしなさい、と書いてあったので、そうする。終わった・・・ which perl ・・・あれ、make してなかった・・・。make中もいろんなメッセージがダラダラと出たあげく、エラーでstopする・・・

cc: lib/auto/DynaLoader/DynaLoader.a: No such file or directory
*** Error code 1

・・・しらねえよ・・・。何がDynaLoaderだよ・・・どうせいらないんだろこれ?やっぱりpkgsrcから入れるべきなんだろうか・・・ バージョンをさげてみる。

5.005_04.tar.gz

拡張子がtar.tarになっている。リンクの表示名とファイル名が違っていたりリンクが切れていたり、かなりいい加減だ。がんばれがんばれ!落ちるなよ!! ・・・同じ。

pkgsrcをもう一回入れてみる。DMA errorが出まくっているが、すべてcorrectedとなるので、我慢して待っている。FreeBSDを入れてやり直したほうが速いかな・・・ ダメっすね。あきらめます。と思ったら終わった。

 10/02/12(Fri) 23:46

pkgsrcというのは、つまり、netbsdにインストールするプログラムというかアプリケーションというかツールというか、そういうものを管理するものだと思ったが、どうも、ソフトウェアそのもののようだ。あるサイトの案内どおりにアップデートしているのだがもう2,3時間たっている。 OSそのもののインストールよりはるかに長い。

 10/02/13(Sat) 06:35

 まだやってる・・・・。何してんだろう?

 10/02/13(Sat) 06:36 

bonoboとか・・・。明らかにいらない。apache, ftp, perlだけでいいのに・・・。 

10/02/13(Sat) 06:54 

だってもう、7,8時間経ってるんだよ。もちろん寝てたさ。だがここまで来ると最後はどうなるのかみたいので、これはこのままやらせておいて、やっぱりfreebsdをインストールしましょう。

 10/02/13(Sat) 07:11 バージョンは8.0

 10/02/13(Sat) 08:20 一度インストールしたがブートしない。やり直し。パーティションを A にするのを忘れたか?

 10/02/13(Sat) 10:57 だいぶ前にインストールが終わりました。ftpやらapacheやらperlやらは後でやります。netbsdの方は、まだやってます(笑)ほっときましょう! 

10/02/14(Sun) 09:46 どんな設定ミスだろうがなんだろうが24時間終わらない操作ってふざけんなよ!

 10/02/14(Sun) 09:48 freebsdはお急ぎインストールでやったら、nicのアドレスもゲートウェイも何も設定されていない。まず以下を設定する。 nicのアドレス(ifconfig, /etc/rc.conf) デフォルトルート(route, /etc/rc.conf) nameserver (/etc/resolv.conf) ftpとtelnetを有効にする(/etc/inetd.conf)

 10/02/14(Sun) 09:52 作ったアカウントでsuできないので、グループを変える。
usermod -n hoge -G wheel

ナンなの、wheelって。

 10/02/14(Sun) 09:53 さあ、perlだ! その前にxもいれとこうと思ったが、例のportのとこでまたなんかやりだした。膨大な時間がかかるという情報を見付けた。やや古い話だが丸二日かかるとか・・・馬鹿? なんだかウンザリしてきた。freebsdってこんなものなのか?あの味も素っ気もないWindowシステムが使いたかったのだが・・・また今度にするか。vineにはperlも入っていたのでこっちにする。

RSS@perl

#!/usr/bin/perl -w
use strict;
use XML::RSS;
use encoding 'utf8';

use Jcode;


my $rss = new XML::RSS (version => '1.0', encode_output => 0);
    $rss->channel(
    title        => "example.com",
    link         => 'http://example.com',
    language => 'ja',
    description  => "description",
);


open SUBBACK, "<./subback.txt" or die;

while (<SUBBACK>){
    if(/(\d*),(.*),(\d*)/){
        my $jp = $2;
        Jcode::convert( \$jp , 'utf8', 'sjis');
        $rss->add_item(
            title       => "$jp",
            link        => "http://example.com/cgi-bin/bbz/main.cgi",
            description => "$3",
        );
    }
}

close SUBBACK;

print "Content-type: application/xml\n\n";

print $rss->as_string;

やっと書けた・・・。utf8フラグだのなんだのと悩んだが、

encode_output => 0


がポイントだったようだ。

ある方のソースを参考にさせてもらったのだが、そのままではうまくいかず、


use utf8;
binmode STDIN, ":utf8";
binmode STDOUT, ":utf8";


を、以下のようにした。

use encoding 'utf8';


めんどくさいねえ・・・。この辺も、仕様じゃなくてバグが潜んでるんじゃないかと思えてならない・・・。

あと、cgiはいきなりサーバーにあげず、とりあえずwinで動かしてエラーがないことくらいは確認するようにした。さくらと同じ環境をローカルに作れば一番いいんだよな・・・virtual pcでできるかな?