Python Twitter

since 2013-06-12

python から twitter

http://d.hatena.ne.jp/Wacky/20120527/1338118005

https://github.com/bear/python-twitter

Windows 8 + Python 2.7 で頑張ってみる:

> easy_install pip
> git clone git@github.com:bear/python-twitter.git
> cd python-twitter
> pip install -r requirements.txt
> python setup.py build
> python setup.py install
> python setup.py test
...
...
...
Ran 37 tests in 0.188s

OK

さっそく import して何が出てくるか見てみる:

from __future__ import unicode_literals, print_function
import twitter
print(dir(twitter))
> python hello_twitter.py
['ACCESS_TOKEN_URL', 'AUTHORIZATION_URL', 'Api', 'CHARACTER_LIMIT', 
'DEFAULT_CACHE', 'DirectMessage', 'Hashtag', 'List', 'REQUEST_TOKEN_URL', 
'SIGNIN_URL', 'Status', 'StringIO', 'Trend', 'TwitterError', 
'Url', 'User', '_FileCache', '_FileCacheError', '__author__',
'__builtins__', '__doc__', '__file__', '__loader__', '__name__',
'__package__', '__version__', 'calendar', 'datetime', 'gzip', 
'httplib', 'md5', 'oauth', 'os', 'parse_qs', 'parse_qsl', 'rfc822', 
'simplejson', 'sys', 'tempfile', 'textwrap', 'time', 'urllib', 'urllib2', 
'urlparse']

https://dev.twitter.com/ でアプリケーションを新規作成して CONSUMER_KEY などを取得しておく。

python を実行して import twitter すれば help(twitter.Api) などができる。

音声エンジンとくっつける

くっつけてみた。

SAPI の処理は python_windows 参照。

事前に COM のライブラリを作っておく必要がある。

  • スタートメニュー - すべてのプログラム - Python 2.7 - PythonWin
  • Tools - Com Makepy Utility
  • Select Library で Microsoft Speech Object Library 5.4 を選択。

Windows 8 で動作確認。

# coding: UTF-8
 
from __future__ import unicode_literals, print_function
 
CONSUMER_KEY = ''
CONSUMER_SECRET = ''
ACCESS_KEY = ''
ACCESS_SECRET = ''
 
from win32com.client import constants
import win32com.client
import pythoncom
 
# https://github.com/bear/python-twitter
import twitter
 
twitter_api = twitter.Api(
	consumer_key = CONSUMER_KEY,
	consumer_secret = CONSUMER_SECRET,
	access_token_key = ACCESS_KEY,
	access_token_secret = ACCESS_SECRET)
 
speaker = win32com.client.Dispatch("SAPI.SpVoice")
 
message = ''
 
def say(phrase):
	print(phrase.encode('mbcs', 'ignore'))
	speaker.Speak(phrase)
 
class ContextEvents(win32com.client.getevents("SAPI.SpSharedRecoContext")):
	def OnRecognition(self, StreamNumber, StreamPosition, RecognitionType, Result):
		global message
		newResult = win32com.client.Dispatch(Result)
		cmd = newResult.PhraseInfo.GetText()
		print(cmd)
		if "ついったーをよんで" in cmd:
			for s in twitter_api.GetHomeTimeline()[:3]:
				say(s.text)
				pythoncom.PumpWaitingMessages()
		elif message and ("いまのをついーとして" in cmd):
			status = twitter_api.PostUpdate(message)
			say(message+ ' とツイートしました')
			message = ''
		else:
			say('あなたは ' + cmd + ' と言いました')
			message = cmd
 
class SpeechRecognition:
	def __init__(self, wordsToAdd):
		self.listener = win32com.client.Dispatch("SAPI.SpSharedRecognizer")
		self.context = self.listener.CreateRecoContext()
		self.grammar = self.context.CreateGrammar()
		self.grammar.DictationSetState(1)
		self.wordsRule = self.grammar.Rules.Add("wordsRule",
						constants.SRATopLevel + constants.SRADynamic, 0)
		self.wordsRule.Clear()
		[ self.wordsRule.InitialState.AddWordTransition(None, word) for word in wordsToAdd ]
		self.grammar.Rules.Commit()
		self.grammar.CmdSetRuleState("wordsRule", 1)
		self.grammar.Rules.Commit()
		self.eventHandler = ContextEvents(self.context)
 
if __name__=='__main__':
	wordsToAdd = [ "こんぴゅーたーついったーをよんで",  "こんぴゅーたーいまのをついーとして" ]
	speechReco = SpeechRecognition(wordsToAdd)
	say("こんばんは")
 
	while 1:
		pythoncom.PumpWaitingMessages()
  • DictationSetState(1) で、ディクテーション(大語彙音声認識)を有効にする。wordsToAdd のコマンド認識も同時に実行されている。
python-twitter.txt · 最終更新: 2013/06/12 23:57 by Takuya Nishimoto
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0