Twitterで相手からfollowされてるかチェックするスクリプト

Perl No Comments »

少し前に書いたPerlスクリプト。
Twitterで相手が自分をfollowしてるかチェックするためのものです。

Twitterで、この人自分のことをfollowしてくれてるのか知りたいということがたまにあります。検索してみたらこんなスクリプトを作ってる人がいました。
<?chocolife> Twitterで『あの人』が自分をfollowしているかどうかを調べるAppleScript

下記のようなURLにアクセスすることで知ることができるみたいですね。

http://twitter.com/friendships/exists.xml?user_a=[相手]&user_b=[自分]

AppleScript動かないのでPerlで書きました。スクリプトの構造や機能はあんまり真似してないです。

使い方

% perl ./doesfollow.pl

と叩くと

TargetUser?:

と聞かれるので相手のアカウントを入力します。
すると下記のどちらかが返ってきます。

おめでとう![相手]はあなたをフォローしています
残念ながら[相手]はあなたをフォローしていません

それだけです。

作り方

doesfollow.plというファイルを作ります。こんな↓。Net::Twitter使ってます。evalとかよくわからないけどつけてます。

$account は自分のに書き換えてください。

作った後これ↓を知ってファイル名をdoesfollow.plにしました。
Twitterで誰が誰をFollowしているかを調べるだけのツール『Does Follow』 - 100SHIKI ~ 世界のアイデアを日替わりで

自分がfollowしてる人全員まとめてチェックしてくれるツールないかな。。と思ったらこの辺で確認できそうです。
FriendOrFollow.com - Who's not following you back? Who aren't you following?
「Twitterの「片想い」「片想われ」リストのhtmlを生成するJavaScript」のWeb版(管理人日記) - むぅもぉ.jp

なんか不要なもの書いた気がします。

CGIエラー

Perl No Comments »
[Fri Apr 24 19:15:34 2009] [error] [client 127.0.0.1] (2)No such file or directory: exec of '/path/to/script.cgi' failed
[Fri Apr 24 19:15:34 2009] [error] [client 127.0.0.1] Premature end of script headers: script.cgi

ということで、script.cgi の1行目Perlへのパスを書き換えた。

#!/usr/local/bin/perl

から

#!/usr/bin/env perl

へ。

ココを疑うのを忘れることがある。

最新ニュースなどをシグネチャに挿入する

Perl, opera, ubuntu No Comments »

会社用メールアカウントのシグネチャに最新ニュース的なものを書いたりしてたけど、いよいよ手で更新するのが面倒くさくなってきた。で、機械にやらせようと。会社のサイトのフィードから最新ニュースを取得してシグネチャを更新する。

シグネチャ用のファイルを探す

まずは書き換えるべきファイルを探す。
UbuntuのOperaでは
/home/username/.opera/mail/signature2.txt 。
(アカウントをいくつか作ってたので"2"がついてるのかな)

Windows Operaの場合は
C:\Documents and Settings\username\Application Data\Opera\mail 内かな。

Thunderbirdだと自由に設定できるみたい。
(Tools > AccountSettingsからAttach this signatureにチェック入れてChoose)

フィードを読んでファイルを更新するスクリプトを書く

次はスクリプト書く。Perlでやった。XML::TreePPとかいうモジュールを使用。
$fileにさっき探したシグネチャのファイルを指定、$strにはシグネチャのフォーマットを書く。
(この例ではlivedoorのニュースを最新のもの1件、タイトルとURLを挿入)

#!/perl/bin/perl
 
use strict;
use warnings;
use XML::TreePP;
 
my $tpp = XML::TreePP->new();
my $tree = $tpp->parsehttp( GET => "http://news.livedoor.com/topics/rss.xml" );
my $file = "/home/username/.opera/mail/signature2.txt";
 
my $str = < < "EOM";
山田太郎 <sample\@yourdomain.com>
==注目のニュース==
$tree->{rss}->{channel}->{item}->[0]->{title}
$tree->{rss}->{channel}->{item}->[0]->{link}
EOM
 
open my $fh, '>', $file or die $!;
print $fh $str;
close $fh;
 
exit;

これをsignature.plなどとして、
$ perl /path/to/script/signature.pl
すると、シグネチャファイルが書き換えられる。
(↑このパス適当。ファイルまでのパスをちゃんと書く。)

スクリプトが毎日定時に実行されるよう設定する

毎度手動でスクリプトを実行したくないので、定期的に実行するよう設定。

$ sudo crontab -e

するとエディタが開くので下記のように書いて(毎日12時に実行)

# m h  dom mon dow   command
0 12  * * *   /bin/sh /usr/local/sbin/daily >/dev/null 2>&1
$ sudo gedit /usr/local/sbin/daily

して次のようなファイルを作ります。

#!/usr/bin/sh
$ perl /path/to/script/signature.pl

cronに関しては下記のサイトを参考にしました。
Ubuntu/cronでスクリプトを回そう - TOBY SOFT wiki

以上でおk。
個人的なメールアカウントならAmazonのWishlist(フィードあるのか)など入れると面白そう。

WWW::Mechanize::Plugin::Web::Scraper をインストール

Perl No Comments »

WWW::Mechanize::Plugin::Web::Scraper をインストールした時のメモ。
Web::ScraperとWWW::Mechanizeはインストール済み。

cpan> install WWW::Mechanize::Plugin::Web::Scraper
こける
cpan> install ExtUtils::Command::MM
OK
cpan> install WWW::Mechanize::Pluggable
こける
cpan> force install WWW::Mechanize::Pluggable
OK
cpan> install WWW::Mechanize::Plugin::Web::Scraper
OK

--
このブログのテンプレート、文字が小さい気がしてきた。
テンプレートそろそろ変えるかな。

CGI::Application::DispatchでURL操作

Perl, dev No Comments »

CGI::Application::Dispatchで下記のようなURLを実装する方法。

http://yourdomain.com/app.cgi/[param1]/[param2]

(mod_rewriteは使わない)

app.cgi

#!/usr/bin/perl
use strict;
use warnings;
use lib qw (./lib);
use CGI::Carp qw (fatalsToBrowser);
use CGI::Application::Dispatch;

CGI::Application::Dispatch->dispatch(
    prefix  => 'WebApp',
    table   => [
        ''               => { app => 'Index', rm => 'index' },
        ':param1/:parm2' => { app => 'Index', rm => 'hoge' },
    ]
);

lib/WebApp/Index.pm (¥マークほんとは半角)

package WebApp::Index;
use strict;
use warnings;
use lib qw (./lib);
use base qw (WebApp);

sub setup {
    my $self = shift;
    $self->start_mode('index');
    $self->run_mode(
        index => 'do_index',
        hoge  => 'do_hoge',
    );
}

sub do_index {
    return "TopPage";
}

sub do_hoge {
    my $self = shift;
    my $p1 = $self->param('param1');
    my $p2 = $self->param('param2');
    return "¥$p1 is $p1. And ¥$p2 is $p2.";
}

1;

lib/WebApp.pm

package WebApp;
use strict;
use warnings;
use lib qw (./lib);
use base qw (CGI::Application);

sub cgiapp_prerun {
    my $self = shift;
    $self->header_props( -charset => 'utf-8' );
}

1;

こんな感じで動いた。無駄な記述もあるのかもしれんけど、とりあえず動いた。

http://yourdomain.com/app.cgi

で「TopPage」が表示されて

http://yourdomain.com/app.cgi/fuga/dodo

だと「$p1 is fuga. And $p2 is dodo.」が表示される。

Powered by WordPress | WP Theme & Icons by N.Design Studio
Entries RSS Comments RSS Log in