Hatena::ブログ(Diary)

Scrapcode@はてなダイアリー このページをアンテナに追加 RSSフィード

2010-01-31

メールの送信日時で振り分けるAppleScript

MacApple Mailで、これまでは通常のメールボックスをたくさん作って、ルールで振り分けをしてきました。

が、これだと複数のルールに一致するようなメールでも、最初に一致したルールで指定したメールボックスに振り分けられてしまいます。だからと言ってコピーはしたくありません。

そこで、このような整理方法をしたいと考えました。

  1. メールの送信日時を基準に、YYYY/YYYY-MM のメールボックスに振り分ける
  2. スマートメールボックスで分類して表示する

YYYY/YYYY-MMのメールボックスに振り分けるのは、メールが増えた時に動作が鈍くなるだろうからINBOXに全て置いておきたくないためです。

が、標準のルールではそのような振り分けはできません。

ということで、AppleScriptで対応することにしてみました。最初はルールでAppleScriptを指定して自動的に実行させるつもりだったのですが、作り方が悪いのか振り分けされる場合とされない場合があったり、何故かメールが重複してしまったりとわけの分からない事になってしまいました。仕方がないので、選択したメールを振り分けるスクリプトです。

参考にした記事

2010-01-20

NanoAのTwitterプラグイン

NanoANet::Twitter::Liteを使う時に、ほんの少しだけ手助けするプラグインを作りました。

http://github.com/kshino/perl-nanoa/blob/master/app/plugin/twitter.pm

OAuthの利用を前提にしています。Twitterアプリケーション登録が別途必要です。

動作要件

使い方

  1. プラグインファイルをNanoAのapp/plugin/ディレクトリに設置します。
  2. プラグインの読み込みと設定のために後述の例のようなapp/myapp/config.pmを作成します。既に作成済みの場合は、必要部分を追加してください。
  3. $app->twitter_access_token( $access_token, $access_token_secret );でaccess_tokenを指定します。
  4. my $twitter = $app->twitter;でaccess_token指定済みのNet::Twitter::Liteオブジェクトを取得します。
  5. 後は、Net::Twitter::Liteの使い方を参照してください。

app/myapp/config.pmの例

package myapp::config;

use strict;
use warnings;
use utf8;

use base qw{ NanoA::Config };  #<- これ大事!

use plugin::session; #<- access_tokenの取得をmyappから行わない場合は不要
use plugin::twitter; #<- twitterプラグインの読み込み

sub init_app {
    my( $self, $app ) = @_;

    # Net::Twitter::Liteのコンストラクタオプションを参考に、必要な値を指定する
    # ただし、twitterプラグインではデフォルト値がSSL用のものになっているので注意
    $app->twitter_config(
        consumer_key    => 'your_app_consumer_key',
        consumer_secret => 'your_app_consumer_secret',
        clientname => 'your_app_name',
        clientver  => 'your_app_version',
        clienturl  => 'your_app_url',
        ssl        => 1,
# 1つのaccess_tokenしか使用しない場合、ここで一緒に指定してしまうことも可
#        access_token        => 'your_access_token',
#        access_token_secret => 'your_access_token_secret',
     );
}

1;

timelineの取得例

package myapp::twitter_timeline;

use strict;
use warnings;
use utf8;

use base qw{ NanoA };

sub run {
    my $app = shift;

    # access_tokenをまだ設定していない場合、Net::Twitter::Liteオブジェクト取得前に設定
    $app->twitter_access_token(
        'your_access_token', 'your_access_token_secret'
    );

    # Net::Twitter::Liteオブジェクト取得
    my $twitter = $app->twitter;

    return $app->render( 'myapp/template/twitter_timeline', {
        timeline => $twitter->friends_timeline,
    } );
}

1;

access_tokenの取得補助

access_tokenの取得は同じような手順になるので、共通化できる部分をメソッド化しました。

認証URLの生成例

package myapp::twitter_auth;

use strict;
use warnings;
use utf8;

use base qw{ NanoA };

sub run {
    my $app = shift;

    # Twitterでの認証後に戻るURL(callback URL)を生成
    my $callback_url = $app->uri_for( 'myapp/twitter_callback' );

    return $app->render( 'myapp/template/twitter_auth', {
        # Twitterの認証URLを生成
        auth_url => $app->twitter_auth_url( $callback_url ),
    } );
}

1;

callback URLでの処理例

package myapp::twitter_callback;

use strict;
use warnings;
use utf8;

use base qw{ NanoA };

sub run {
    my $app = shift;

    # 認証結果のaccess_token等を次のようなハッシュリファレンスで取得
    # {
    #     access_token        => '',
    #     access_token_secret => '',
    #     user_id             => '',
    #     screen_name         => '',
    # }
    my $token = $app->twitter_callback;

    if( $token ) {
        # 取得したaccess_tokenを保存する
    }

    return $app->render( 'myapp/template/twitter_callback', {
        access_token => $token,
    } );
}

1;

実動サンプル

拙作のはてなハイクの携帯向けWebクライアントハイクなび(d:id:khashi:20091031:1256931321)」に、はてなハイクTwitterクロスポスト機能を昨日追加しました。そのために作成したプラグインです。

「実動サンプル」と書いたものの、ハイクなびを使っていないと見る事はできませんが…。

Connection: close