Permalink
Browse files

とりあえずタイムライン表示だけ作った

  • Loading branch information...
0 parents commit 8509ec1e29e68b7a0e172d07539b6d6f058f9518 @kentaro committed Jul 25, 2009
Showing with 208 additions and 0 deletions.
  1. +4 −0 .gitignore
  2. +22 −0 LICENSE.TXT
  3. +29 −0 README.TXT
  4. +10 −0 SETUPINFO.XML
  5. +134 −0 plugin/twitter.pl
  6. +9 −0 plugin/twitter.xml
@@ -0,0 +1,4 @@
+covered
+.DS_Store
+atok_direct_script_plugin_test.app
+atok_plugin_installer.app
@@ -0,0 +1,22 @@
+The MIT License
+
+Copyright (c) 2009 @kentaro (http://twitter.com/kentaro)
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,29 @@
+* 準備
+
+このプラグインを利用するに先立って、以下のPerlモジュールをインストール
+してください。
+
+- Template
+- Config::Pit
+- Net::Twitter
+
+また、これらのモジュールは、Mac OSX付属のPerl(/usr/bin/perl)によってロー
+ドできる場所にインストールされている必要があります。Mac Portsの
+Perl(/opt/local/bin/perlなど)でインストールしたモジュールは、通常、OSX
+付属のPerlからはロードできません。必ず、OSX付属のcpanシェルを用いてモ
+ジュールのインストールを行ってください。
+
+さらに、Config::Pitを用いて、twitter.comというキーで、Twitterアカウント
+のusername, passwordを、同名のキーで設定しておく必要があります。いろい
+ろ面倒くさくてすみません……。
+
+* インストール
+
+このファイルと同じ階層に、ATOK for Mac 2009に同梱されている「ATOKダイレ
+クト プラグイン インストーラ」をコピーし、インストールしてください。
+
+* 使い方
+
+「ついったー」「たいむらいん」「TL」という文字列を入力した後、特に設定
+を変更していなければ、Ctrl-tを押すことで、Twitterのタイムラインを取得・
+表示します。また、コメントボックスに、発言、アイコン等が表示されます。
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<setup_info_list>
+ <setup_info>
+ <data_folder_name>plugin</data_folder_name>
+ <plugin_file_name>twitter.pl</plugin_file_name>
+ <plugin_enable>true</plugin_enable>
+ <only_individual_run>false</only_individual_run>
+ <add_position>1</add_position>
+ </setup_info>
+</setup_info_list>
@@ -0,0 +1,134 @@
+package Atok_plugin;
+use strict;
+use warnings;
+use utf8;
+use Template;
+use Config::Pit;
+use Net::Twitter;
+
+my $dispatch_table = {
+ qr/(?:ついったー|たいむらいん|TL)/i => 'friends_timeline',
+};
+
+sub run_process {
+ my $params = shift;
+ my $method;
+
+ for my $regex (keys %$dispatch_table) {
+ if ($params->{composition_string} =~ /$regex/) {
+ $method = $dispatch_table->{$regex};
+ last;
+ }
+ }
+
+ return if !$method;;
+ return (candidate => __PACKAGE__->$method());
+}
+
+sub friends_timeline {
+ my $self = shift;
+ my $client = get_client();
+ my $candidate = [];
+
+ for my $friend (@{$client->friends_timeline || []}) {
+ my $tweet = ATOK::Plugin::Twitter::Tweet->new($friend);
+ push @$candidate, $tweet->to_hash;
+ }
+
+ $candidate;
+}
+
+sub get_client {
+ my $config = pit_get('twitter.com');
+ my $username = $config->{username}
+ or die qq{usernameというキーでtwitterのアカウントを設定してください。};
+ my $password = $config->{password}
+ or die qq{passwordというキーでtwitterのパスワードを設定してください。};
+
+ Net::Twitter->new(
+ traits => [qw(API::REST)],
+ username => $username,
+ password => $password,
+ clientname => 'ATOK::Plugin::Twitter',
+ );
+}
+
+package ATOK::Plugin::Twitter::Tweet;
+use base qw(Class::Accessor::Lvalue::Fast);
+__PACKAGE__->mk_accessors(qw(
+ id
+ tt
+));
+
+sub new {
+ my $class = shift;
+ my $self = $class->SUPER::new(@_);
+ $self->tt = Template->new;
+ $self;
+}
+
+sub user {
+ my $self = shift;
+ $self->{_user} ||= ATOK::Plugin::Twitter::User->new($self->{user});
+}
+
+sub url {
+ my $self = shift;
+ sprintf 'http://twitter.com/%s/%d', $self->user->screen_name, $self->id;
+}
+
+sub to_hash {
+ my $self = shift;
+ +{
+ hyoki => sprintf('@%s (%s)', $self->user->screen_name, $self->user->name),
+ comment_xhtml => $self->to_xhtml,
+ alternative => $self->url,
+ alternative_alias=> 'この発言をブラウザで開く',
+ alternative_type => 'url_jump_string',
+ }
+}
+
+sub to_xhtml {
+ my $self = shift;
+ my $template = $self->template;
+ $self->tt->process(\$template, $self, \my $result);
+ $result;
+}
+
+sub template {
+ return <<'EOS'
+<?xml version="1.0" encoding="UTF-8" ?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
+ <head>
+ <title>Twitter</title>
+ </head>
+ <body>
+ <div style="background-color:#9ae4e8;padding:3px;margin-bottom:1em">
+ <a href="http://twitter.com/home"><img src="http://twitter.com/images/mobile.gif" alt="Twitter"/></a>
+ </div>
+ <div style="float:left; margin: 0 1em 0 1em;">
+ <img src="[% user.profile_image_url %]" />
+ </div>
+ <div style="float:left;">
+ <span style="font-weight:bold;">[% user.screen_name | html %] ([% user.name | html %])</span><br />
+ <a href="http://twitter.com/[% user.screen_name | html %]/status/[% id %]" style="color:#aaaaaa">Tweet</a> <span style="color:#aaaaaa;margin-left:0.5em;">from [% source %]</span>
+ </div>
+ <div style="clear:both;padding:0.5em;">
+ <p>[% text | html %]</p>
+ </div>
+ <div style="color:#ffffff;background-color:#9ae4e8;padding:3px;text-align:center;font-size:80%">
+ <a href="http://github.com/kentaro/atok-plugin-twitter/tree/master" style="color:#ffffff">ATOK::Plugin::Twitter</a> / <a href="http://twitter.com/kentaro" style="color:#ffffff">@kentaro</a>
+ </div>
+ </body>
+</html>
+EOS
+}
+
+package ATOK::Plugin::Twitter::User;
+use base qw(Class::Accessor::Lvalue::Fast);
+__PACKAGE__->mk_accessors(qw(
+ name
+ screen_name
+));
+
+1;
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<plugin_info>
+ <name>ATOK::Plugin::Twitter</name>
+ <name_short>Twitter</name_short>
+ <description>ATOKダイレクトを利用して、Twitterのタイムラインを取得・表示します。</description>
+ <copyright>@kentaro (http://twitter.com/kentaro)</copyright>
+ <major_version>1</major_version>
+ <minor_version>0</minor_version>
+</plugin_info>

0 comments on commit 8509ec1

Please sign in to comment.