M.C.P.C.

―むり・くり―プラスコミュニケーション(更新終了)


| トップページ |

2011年9月10日 00:00

実用! PerlでコマンドラインからTwitter投稿(OAuth対応)

このエントリーをはてなブックマークに追加 mixiチェック

(2013-2-5追記)※このエントリのあと、Twitter API version 1.0の提供が2013年3月までとなり、このエントリの内容が使えなくなりますので、補足エントリ Twitter API version 1.1対応Net::Twitter 4.00000_01が出ているよ - M.C.P.C. (Mamesibori Creation Plus Communication)を用意しましたので、そちらも合わせてお読みください。

※このエントリは、実用! PerlでコマンドラインからTwitter投稿(OAuth対応) - perl-mongers.org [perl-mongers.org] このエントリーのはてなブックマーク件数の再録です(perl-mongers.org消失によりサルベージ)


まいど! 畑違いの業界(印刷屋さんです)からこんにちは! CLです。

最近WindowsからLinuxへログインして作業していることが多いんですけれども、なんかつぶやきたくなったときにこんなの。Twitterにポスト。Net::Twitterモジュールを使います。

と書いたのが2年前。

実用! PerlでコマンドラインからTwitter投稿 - perl-mongers.org

今は2010年の6月なんですけれども、6月いっぱいで、Twitter APIのBASIC認証ができなくなってしまうということで、前書いた記事も結構のアクセス量があるみたいなので、改訂版として書いてみようと思います。

(2010-06-18追記)
Twitterブログ: Twitter APIデベロッパー・コミュニティへのお知らせ (OAuthへの移行に関しての期限延長)

以前、ベーシック認証への対応を2010年6月30日をもって終了し、OAuthに移行する予定であることを発表しましたが、このたびOAuthへの移行の期限を2010年8月16日まで延長ことにしました。 2010年8月16日から段階的にベーシック認証への対応を停止します。

今回の流れは、

  • Twitterでアプリ登録をする(今回追加!)
  • とりあえず投稿できるスクリプトを作ってみる
  • コマンドラインから投稿できるものにグレードアップ

となっています。

いまどきのNet::Twitterは、CPANを使い、イチからインストールすると、1時間ぐらいかかります。僕は、Amazon EC2では、既にNet::Twitterをインストール済みのAMIを用意しています。

Twitterでアプリ登録をする

既に、Twitterのアカウントをとっているのであれば、とても簡単にアプリ登録ができます。

1.ホーム画面の下の方にAPIとあるので、選択します。

Oauth01thumb710x394


2.「Create cool applications!」とかいうページが出ます。クールか......。ともかく、「②Register an app」を選択します。

Oauth02thumb710x474


3.「アプリケーション登録申請」画面が出ます。申請出すと無条件に登録されますし、後から設定は変更できますけれども、順番に「アプリケーション名」「アプリケーションの説明」「アプリケーションのウェブサイトURL」「所属会社/団体」を考えておきましょう。今回は、以下のアプリを作りことにしました。

  • アプリケーション名
    • ちんまん亭
  • アプリケーションの説明
    • コマンドラインから投稿できるTwitterクライアントです
  • アプリケーションウェブサイト
    • http://perl-mongers.org/2010/06/_perltwitteroauth.html
  • 所属会社/団体
    • 斜陽業界

「ラーメン大陸」というクライアント名に倣い、類似した名前にしました。

あと、「アプリケーションの種類」は、自分だけ使うんであれば、「クライアントアプリケーション」でいいと思います。

「Default Access type」は、「Read & Write」にしておきましょう。

全部入れ終わったら、「アプリケーションを登録する」ボタンを選択します。

Oauth03thumb710x890


4.Twitter API使用規約が出ますので、内容を確認の上「I Accept(同意)」を選択します。

Oauth04thumb710x509


5.はい、アプリケーションはできました!Consumer keyとConsumer Secretを控えておきます。

Oauth05thumb710x971


6.次に、このアプリケーションを使ってアクセスするために、自分のアカウントでのAccess Tokenを取得します。右側のサイドバーに、「My Access Token」つうのがありますので、これを選択します。

Oauth06


7.自分のアクセストークンが表示されますので、コピペでもしてメモっておきます。ちなみに、このアクセストークンは、自分のID、パスワードの代わりになりますので人に教えないでください。今回の例では、アクセストークンは適当なものに変えてあります。

Oauth07thumb710x509


8.最後に、今回作ったアプリの設定を変えたくなった時の話をしておきますが、上部に「Your apps」という項目がありますので、ここを選択しますと、作ったアプリ一覧が表示されます。

Oauth08thumb710x509


おめでとうございます! これで、OAuthでTwitterにポストできる準備が整いました。

とりあえず投稿できるスクリプトを作ってみる

まず、固定文字列だったらこんな感じで。「もへもへ」という文字列を投げます。それぞれのキーは自分のを使おう。

Filename:twit_test.pl (UTF-8で)

#!/usr/bin/perl

use strict;
use warnings;
use utf8;
use Net::Twitter;
my $twit = Net::Twitter->new(
    traits => [qw/API::REST OAuth WrapError/],
    consumer_key    => 'o3ca3zChEnEK3sEKM6Uw',
    consumer_secret => 'LU69ATliCLFWalIt1Q8aR7gFYcQuG9hqTOOPFNVNU',
    ssl => 1,
);
$twit->access_token       ('12345678-i9QgwXsXhRj3A1mcX9ok8egM68dJcS26r3lKBaVg8');
$twit->access_token_secret('joCdbaccz7PKmw7VLsFFgsW2JAgOHk4cEW7Src8zH');
$twit->update('もへもへ');
exit;
__END__

実行すると、Twitterに投稿されるはずです。文字化けしてたら、おそらく文字エンコーディングがUTF-8以外です。UTF-8で保存し直すか、Encodeモジュールで適切に変換してあげましょう。

Oauth09thumb710x275


コマンドラインから投稿できるものにグレードアップ

上のスクリプトを生かして、コマンドラインからの文字列を投稿するスクリプトに改造します。今回はタイプ量減らしたいので、コンソールがUTF-8の場合に限定。他の環境の場合、Encodeモジュールやらなにやら使用のこと。

Filename: twitter

#!/usr/bin/perl

use strict;
use warnings;
use Encode;
use utf8;
use Net::Twitter;
my $twit = Net::Twitter->new(
    traits => [qw/API::REST OAuth WrapError/],
    consumer_key    => 'o3ca3zChEnEK3sEKM6Uw',
    consumer_secret => 'LU69ATliCLFWalIt1Q8aR7gFYcQuG9hqTOOPFNVNU',
    ssl => 1,
);
$twit->access_token       ('12345678-i9QgwXsXhRj3A1mcX9ok8egM68dJcS26r3lKBaVg8');
$twit->access_token_secret('joCdbaccz7PKmw7VLsFFgsW2JAgOHk4cEW7Src8zH');
$twit->update( decode_utf8($_) ) for @ARGV;
exit;
__END__

上記twitterというファイルに実行権限を与えておいて、個人用実行ファイルを置くディレクトリ($HOME/bin とかにpath通しておくと便利)に入れるとかしておくと、

$ twitter エロス

とか

$ twitter 'エロス カワユス'

とかで投稿できます。

Oauth10thumb710x399


今回のスクリプトを改造して、定期的にビーコン打ち出すとか、作業が終わったらnotify出すとか応用できます。僕は他のユーザからのリプライにて目覚ましツイート時間を設定できるbotを作ったりしていますよ。

※調子こいて投稿しまくっていると連投制限に引っかかるみたいなので注意しましょう。

投稿 大野 義貴 [Perl] | |

トラックバック(0)

トラックバックURL: http://blog.dtpwiki.jp/MTOS/mt-tb.cgi/3705

コメントする