Archive for the 'Twitterrific' Category

2010/03/08 Twitterrificを使って、特定のアカウントの発言を監視

Twitterrificを使って、特定のアカウントの発言内容を監視するAppleScriptを作成しました。

Twitter経由で自宅のMacに命令を送ってテレビ録画を……などと考え、TwitterクライアントでAppleScript対応のTwitterrificをコントロール。自宅のMacにTwitterrificをインストールして、適宜自動処理用のTwitterアカウントを取得。Twitterrificが動作するようになったら、監視対象のTwitterアカウント(自分)をフォローするようにして、外でのTwitter経由の発言が自宅マシンでも見えるようにしておきます。

本Scriptの中に、

property masterAccount : “piyomaru”

という行があり、これが監視対象の(自分の)Twitterアカウントです。とりあえず、このあたりを書き換えていただいて、本Scriptを「アプリケーション」形式で保存。その際に、「実行後、自動的に終了しない」をチェックしておきます。

これで、本Scriptは10秒間隔でTwitterrificに問い合わせを行い、「#m2tv」の文字列を含む監視対象アカウントの発言が流れて来ないか、監視します。

条件に合致する発言があれば、その内容をそのまま発言者にエコーバックするようにしています。

twitterific1.jpg

実際には、このエコーバックした後にコマンド解釈部を入れて、さまざまなコマンドを実行させるようにするとよいでしょう。

ただ……実際に動かしてみて分かったのですが、Twitterrificが3分間隔でTwitterにアクセスするため、最悪の場合にはコマンドを送って返ってくるまで6分ぐらいかかることになり……Twitter経由でTV録画予約はできないことはないですけれども、ほかの手段を考えるかTwitterrific以外のアクセス手段を検討したほうがよさそうです(自前でTwitterへのアクセスプログラムをAppleScriptで作ったほうがよさそう)。

スクリプト名:twittEcho v2
property idleTime : 10
property idleF : false
property lastTweet : ""
property lastTweetDate : ""

property masterAccount : "piyomaru" –監視対象のアカウント

idleMain(true) of me

repeat
  idleMain(false) of me
  
delay 5
end repeat

on idleMain(initF)
  tell application "Twitterrific"
    set aList to every tweet whose screen name = masterAccount and text of it contains "#m2tv"
    
if aList is not equal to {} then
      set anItem to contents of first item of aList
      
set thisPostDate to date of anItem
      
      
      
–初期化フラグをtrueにして呼んだ場合には、処理に必要な変数の初期化のみ行ってリターン
      
if initF = true then
        set lastTweetDate to thisPostDate
        
return
      end if
      
      
      
if thisPostDate is not equal to lastTweetDate then
        
        
set lastCommand to text of anItem
        
        
try
          with timeout of 30 seconds
            post update ("@" & masterAccount & " (echo)" & lastCommand)
            
            
if lastCommand contains "beep" then
              say "Message from twitter"
            end if
          end timeout
        end try
        
        
set lastTweetDate to thisPostDate
      end if
    end if
  end tell
end idleMain

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

2009/07/20 Twitterifficで選択中の発言の時間をGrowlで表示。アイコン付きで v3

Twitterrifficで選択中の発言が行われた時間をGrowlでアイコン付き表示するAppleScriptの改良版です。

URL Access Scriptingに指定するURLのうちファイル名に該当する部分の長さが32文字以上だと、勝手にダウンロード時にファイル名を丸められてしまう、という問題に対処するため、28文字でファイル名チェックを行い、短く付け替えています。

ちょうど、坂本龍一教授をFollowして、たまたま発言を見つけたので時刻を調べてみたらエラーに遭遇。ファイル名を調べてみたら37文字で、テンポラリフォルダに入っていた画像ファイルがすべて途中で丸められていることが判明。URL Access Scriptingの32文字制限に気付いて、対策を施したものです。

ダウンロード後に画像が真っ白になっているケースが見られたので、syncコマンドを実行してキャッシュの内容をHDDにシンクロさせています。

(more…)

2009/07/20 Twitterifficで選択中の発言の時間をGrowlで表示。アイコン付きで v2

Twitterrifficからアイコンを取得して、ダウンロードを行おうとすると弾かれるケースが見られたので、とりあえず「すでにダウンロードしたアイコンがあれば使用する」ように処理を変更したバージョンです。

アイコンのダウンロードが行えない時に、TwitterアカウントのURLを個別にAppleScriptで取得して、そのままSafariで表示すると問題ないようなので、案外User Agent名称のチェックをサーバー側で行っているのかもしれません。

URL Access ScriptingにはUser Agent名称を詐称する機能はないため、そのための対策を行うのであればシェルからcurlコマンドを呼び出す必要が出てくることでしょう。

もう少し、エラーが発生する状況を観察してみることとします。

(more…)

2009/07/20 Twitterrifficで選択中の発言の時間をGrowlで表示。アイコン付きで

Twitterrifficで選択中の発言がいつ行われたかを確認するために、発言の時間をGrowlで表示するAppleScriptです。

twitter2.jpg

Twitterrifficの画面上では発言時刻が表示されないので、正確な時刻が知りたいと考えて作り始めたものですが……その時間があればWebブラウザで確認できたような……(汗)

一度こうしてAppleScriptを作ってしまえば、次回からはScript Menuから呼び出すだけになるので、まあ……無意味ではなかったのでしょう。

本Scriptでは、指定画像でGrowlの表示を行いたかったので、Twitterrificから取得した画像のURLから画像をダウンロードし、それを指定してメッセージを表示させてみました。

Twitterriffic側のselectionから画像のURLを取得しようとした時に、画像を指定していないアカウントの場合にはmissing valueが返ってくるようになっているのですが、selectionからURLを取得すると、missing valueが返ってくるのではなく変数への代入そのものが実行されなかったため、一度selectionのpropertiesをまるごと変数に代入し、そこからURLを取得して判定するようにしてみました。

(more…)

2009/06/13 津田大介氏の最近の発言を取得してMacJournalにスクラップする

twitterrificをコントロールして、津田大介氏のtwitter上の発言を集めて、時系列順に並べかえ直して、MacJournalの指定のジャーナル内に新規ジャーナルエントリを作成して、そこに文章を入れるAppleScriptです。

mj11.jpg

▲twitteriffic上で津田大介氏によるテキスト中継が行われている様子

mj10.jpg

▲スクリプト実行後 MacJournalの指定エントリに発言内容がまとめられている

スクリプト名:津田大介氏の最近の発言を取得してMacJournalにスクラップする
津田大介氏のtwitter上の発言を集めてテキスト化
tell application "Twitterrific"
  set tList to every tweet whose screen name is equal to "tsuda"
  
set textList to {}
  
repeat with i in tList
    set the end of textList to {date of i, text of i}
  end repeat
end tell

set sortedList to shellSortListAscending(textList, 1) of me

set pureText to {}
repeat with i in sortedList
  set {aDate, aText} to i
  
set the end of pureText to (aText & return & return)
end repeat

set pureText to pureText as string

Journalの階層状況は個人によって異なるので、このまま動くわけではありません
ご自分の環境に合わせて書き換えて使ってみてください
tell application "MacJournal"
  tell document 1
    tell journal "個人"
      tell journal "業界動向"
        tell journal "音楽配信"
          tell journal "津田大介"
            set jRes to make new journal entry
            
tell jRes
              set plain text content to pureText
            end tell
          end tell
        end tell
      end tell
    end tell
  end tell
end tell

シェルソートで入れ子のリストを昇順ソート
on shellSortListAscending(a, keyItem)
  set n to length of a
  
set cols to {1391376, 463792, 198768, 86961, 33936, 13776, 4592, 1968, 861, 336, 112, 48, 21, 7, 3, 1}
  
repeat with h in cols
    if (h (n - 1)) then
      repeat with i from h to (n - 1)
        set v to item (i + 1) of a
        
set j to i
        
repeat while (j h) and ((contents of item keyItem of item (j - h + 1) of a) > (item keyItem of v))
          set (item (j + 1) of a) to (item (j - h + 1) of a)
          
set j to j - h
        end repeat
        
set item (j + 1) of a to v
      end repeat
    end if
  end repeat
  
return a
end shellSortListAscending

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

2009/06/11 津田大介氏のtwitter上の発言を集めてテキスト化

twitterificをコントロールして、「歩く人間メディア」、「中継するテキスト放送局」ともいえる津田大介氏の投稿をまとめるAppleScriptです。

twitterificなどのtwitterクライアントは、なぜか画面上の方に新しい発言が表示されるので、そのままテキスト化すると時系列が逆になってしまいます。

そこで、twitterific上の各発言のタイムスタンプでソートを行い、時系列順に並ぶ(上が古くて下が新しい)テキストにまとめてみたものです。

定期的にtwitterificから津田氏のテキストを抜き出して、MacJournalの専用エントリにペーストしているのですが、そこまですべて自動化してみてもよいかもしれません。

スクリプト名:津田大介氏のtwitter上の発言を集めてテキスト化
津田大介氏のtwitter上の発言を集めてテキスト化
tell application Twitterrific
  set tList to every tweet whose screen name is equal to tsuda
  
set textList to {}
  
repeat with i in tList
    set the end of textList to {date of i, text of i}
  end repeat
end tell

set sortedList to shellSortListAscending(textList, 1) of me

set pureText to {}
repeat with i in sortedList
  set {aDate, aText} to i
  
set the end of pureText to (aText & return & return)
end repeat

set pureText to pureText as string

シェルソートで入れ子のリストを昇順ソート
on shellSortListAscending(a, keyItem)
  set n to length of a
  
set cols to {1391376, 463792, 198768, 86961, 33936, 13776, 4592, 1968, 861, 336, 112, 48, 21, 7, 3, 1}
  
repeat with h in cols
    if (h (n - 1)) then
      repeat with i from h to (n - 1)
        set v to item (i + 1) of a
        
set j to i
        
repeat while (j h) and ((contents of item keyItem of item (j - h + 1) of a) > (item keyItem of v))
          set (item (j + 1) of a) to (item (j - h + 1) of a)
          
set j to j - h
        end repeat
        
set item (j + 1) of a to v
      end repeat
    end if
  end repeat
  
return a
end shellSortListAscending

シェルソートで入れ子のリストを降順ソート
on shellSortListDecending(a, keyItem)
  set n to length of a
  
set cols to {1391376, 463792, 198768, 86961, 33936, 13776, 4592, 1968, 861, 336, 112, 48, 21, 7, 3, 1}
  
repeat with h in cols
    if (h (n - 1)) then
      repeat with i from h to (n - 1)
        set v to item (i + 1) of a
        
set j to i
        
repeat while (j h) and ((contents of item keyItem of item (j - h + 1) of a) < (item keyItem of v))
          set (item (j + 1) of a) to (item (j - h + 1) of a)
          
set j to j - h
        end repeat
        
set item (j + 1) of a to v
      end repeat
    end if
  end repeat
  
return a
end shellSortListDecending

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

2009/05/09 Twitterrificで選択中の投稿をキーにして発言検索

Mac OS X用twitterクライアントのうちの1つ、Twitterrificを使って、選択中の発言を行った人(のアカウント名)をキーにしてWeb上で検索を行います。同アプリケーションはAppleScriptに対応しているため、他のアプリケーションと組み合わせていろいろ激しい処理ができそうです(発言時刻で統計処理してみるとか、形態素解析して使用キーワードをリストアップしてみるとか、マインドマップ上にマッピングしてみるとか)。

元ネタは、こちらに載っていたのですが……いろいろと危なっかしい記述(System Eventsでプロセス名称を指定していないとか)や、下手くそな記述(open locationをSafariへのtellブロック内で行っている……エラーが出るし、そもそもそんな必要はないのだが ーー;)があったので、修正したものです。

ただ、下手はともかくとしてたしかに役立つScriptです。

tw1.jpg

▲Twitterrific上で関連する発言を探したい人の発言を選択して……

tw2.jpg

▲このAppleScriptをスクリプトメニューから呼び出します

tw3.jpg

▲Webブラウザ上(Safariでもなんでも、OSでデフォルト指定されているもの)で関連する発言が検索されます

tw4.jpg

▲激しく便利……

スクリプト名:Twitterrificで選択中の投稿をキーにして発言検索
元ネタ:http://macmembrane.com/scripts-and-tricks-for-twitterrific/
おそろしく下手くそだったので、書き直した

tell application Twitterrific
  set theTweeter to screen name of selection
end tell

try
  tell application System Events
    tell process Twitterrific
      key code 53
    end tell
  end tell
end try

open location http://search.twitter.com/search?q= & @ & theTweeter

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に