Twitterのフォロー数が多くなって、遡って読むことが多くなりました。それも一興ですが、本来、つぶやきのように流れていくのがTwitter。遡って読まなければいいじゃんと言われたらそれまでですが、それでいい情報を逃すのももったいないので、読み上げスクリプトを書きました。Mac OS専用です。(すいません。)
# -*- coding: utf-8 -*- # # Murmur tweets # Author: ICHIKAWA, Yuji # Copyright (C) 2012 ICHIKAWA, Yuji (New 3 Rs) All rights reserved. require 'rubygems' require 'tweetstream' # initialize # http://mitukiii.jp/2012/06/04/face-character-regexp/ TEXT = 'a-zA-Z0-9ぁ-ヶ亜-�a-zA-Z' TEXT_PATTERN = /[#{TEXT}]/ NOT_TEXT_PATTERN = /[^#{TEXT}]/ FACE_PATTERN = /(#{NOT_TEXT_PATTERN}*[\((](?:(?!#{TEXT_PATTERN}{3,}).){2,}[\))]#{NOT_TEXT_PATTERN}*)/ LDIG_DIR = 'XXX' # ldigの絶対パスを入れて下さい。 voices = { ja: ['Kyoko'], cs: ['Zuzana'], da: ['Ida'], de: ['Anna', 'Steffi', 'Yannick'], en: ['Agnes', 'Kathy', 'Princess', 'Vicki', 'Victoria', 'Alex', 'Bruce', 'Fred', 'Junior', 'Ralph'], es: ['Diego', 'Monica'], fi: ['Mikko'], fr: ['Audrey', 'Sebastien', 'Thomas', 'Virginie'], id: ['Damayanti'], it: ['Alice', 'Paolo', 'Silvia'], nl: ['Claire', 'Xander'], no: ['Stine'], pl: ['Ageta'], pt: ['Joana'], ro: ['Simona'], sv: ['Alva', 'Oskar'], tr: ['Aylin'], vi: [], ar: ['Maged'], el: ['Alexandros', 'Melina'], sk: ['Laura'], th: ['Narisa'], no: ['Stine'], hu: ['Eszter'], hi: ['Lekha'], ro: ['Milena'], zh: ['Ting-Ting'], :"zh-min-nan" => ['Ya-Ling'], ko: ['Narae', 'Yuna'] } TweetStream.configure do |config| config.consumer_key = ENV['CONSUMER_KEY'] config.consumer_secret = ENV['CONSUMER_SECRET'] config.oauth_token = ENV['ACCESS_TOKEN'] config.oauth_token_secret = ENV['ACCESS_TOKEN_SECRET'] config.auth_method = :oauth end TweetStream::Client.new.sample do |status| # TweetStream::Client.new.userstream do |status| next if status.text.include? 'http:' text = CGI.unescapeHTML status.text.gsub(/RT .*|@\w+|#\S+/, '') if text =~ /[\p{hiragana}\p{katakana}]/ lang = :ja text.gsub!(/[!w!〜w?]/, ' ') text.gsub!(FACE_PATTERN, ' ') else result = `#{LDIG_DIR}/ldig.py -m #{LDIG_DIR}/model.latin ./tweet.txt 2>/dev/null` if result =~ /^\t(\w+)/ lang = $1.to_sym end end File.open('./tweet.txt', 'w') do |f| f.write text end puts text voice = voices[lang] `say #{if lang == :ja then '-r 260' end} -v #{voice[rand(voice.length)]} "#{text}"` if voice and not voice.empty? end
- TwitterのOAuthトークンが必要です。
- 自分のTLではなくてサンプルストリームを使っていたら、言語判定をして音声を選びたくなりました。言語判定は、Language Detection with Infinity-Gramを利用させていただきました。
- インストールしていない言語は無視されます。言語別の音声は「システム環境設定…」=>「音声入力と読み上げ」=>「テキスト読み上げ」=>「システムの声」=>「カスタマイズ…」で選択してインストールしてください。
- 顔文字判定にはhttp://mitukiii.jp/2012/06/04/face-character-regexp/を利用させていただきました。