2012年3月5日月曜日

Tweet 読み上げスクリプト つぶやき Kyoko


Twitterタイムラインに届いた新着ツイートをリアルタイムにKyokoの声でつぶやきます。

以下からダウンロードできます。


<<動作環境>>
Mac OS X 10.7 以上、Twitter.app が必要です。
システム環境設定「スピーチ>テキスト読み上げ」で日本語音声読み上げの"Kyoko"、英語は"Alex"をあらかじめオンにしてください。

<<特徴>>
日本語のtweetは"Kyoko"で、英語は"Alex"で読み上げます。
tweet中のURLやハッシュタグは除外して読み上げます。
AppleScripエディタで「つぶやき Kyoko」のソースリストを参照できます。

<<修正履歴>>
12.03.05 いくつかのバグを修正し、アプリケーション名を「つぶやき Kyoko」に変更。
12.02.11 ツイート末のにあるハッシュタグやアドレスの最後の1文字を発音してしまうバグを修正。
12.02.10 Twiittererを公開

<<制作/著作>>
松本慧 satoshi@mac.com  Twitter:@cometheart http://cometheart.blogspot.com/

ソースリスト

property enableF : true
property intervalSec : 1
property lastUpdate : 0

on run
set intervalSec to 1
tell application "Twitter" to activate
delay 3
set enableF to true
end run

on idle
if enableF = true then
set enableF to false
idleMain() of me
set enableF to true
end if
return intervalSec
end idle

on idleMain()
tell application "Twitter"
set ca to count of every account
if (ca is greater than 0) then
tell account 1
repeat
set ht to a reference to home timeline
--set mt to a reference to mentions timeline
set now to last update of ht
if now is not lastUpdate then
set lastUpdate to now
set n to name of ht
set ss to a reference to (every status of home timeline)
set s to a reference to item 1 of ss
set t to full name of author of s
smartSay(t) of me
set t to text of s
set t to filter(t) of me
smartSay(t) of me
else
exit repeat
end if
end repeat
end tell
end if
end tell
end idleMain

on smartSay(s)
set len to length of s
set i to 1
repeat while (ilen)
if character i of s > "z" then
say s using "Kyoko"
return
end if
set i to i + 1
end repeat
say s using "Alex"
return
end smartSay

on filter(s)
set len to length of s
set t to ""
set i to 1
repeat while (ilen)
if i < len - 6 then
set substring to (characters i thru (i + 6) of s) as string
else
set substring to ""
end if
--display dialog text of substring
if substring is "http://" then
set i to i + 6
repeat while (ilen)
if character i of s > "z" then exit repeat
set i to i + 1
end repeat
else if character i of s is "#" or character i of s is "@" then
set i to i + 1
repeat while (ilen)
if character i of s > "z" then exit repeat
set i to i + 1
end repeat
else if character i of s is "…" then
set i to i + 1
else
set t to t & character i of s
set i to i + 1
end if
end repeat
return t
end filter