アイデアの小槌Bot
twitterアカウント samuraiapps から,8時間に1度,アイデアを創発させるようなつぶやきをします.
このサービスには,下記のAPIを使用しています.
Google急上昇ワードからキーワードを取得し,それから連想される言葉をランダムに組み合わせてつぶやきます.ぜひ,samuraiappsをフォローしてください.
つぶやき例
アイデアの小槌: 慎重 と 発言 from #ideamaker http://samurai-apps.com
ソースコードも公開してます.以下のスクリプトをcronで起動してます.Pythonで,yahoo,はてな,reflexaのAPIにアクセスし,twitterにつぶやくご参考になれば幸いです.ご質問があればお問い合わせ下さい.
参考にさせていただいたサイト:良いもの。悪いもの。
#!/usr/local/bin/python
# -*- coding: utf-8 -*-
import os, sys
import urllib
import time
import datetime
import random
import simplejson
import oauth2
import pickle
from xml.etree.ElementTree import ElementTree
from urllib import urlopen
from oauthtwitter import OAuthApi
import xmlrpclib
def twitter():
if os.path.isfile(KEY_FILE):
access_token = pickle.load(file(KEY_FILE))
else:
tw = OAuthApi(CONSUMER_KEY, CONSUMER_SECRET)
request_token = tw.getRequestToken()
authorization_url = tw.getAuthorizationURL(request_token)
print authorization_url
tw = OAuthApi(CONSUMER_KEY, CONSUMER_SECRET, request_token)
oauth_verifier = raw_input("What is the PIN? ")
access_token = tw.getAccessToken(request_token,oauth_verifier)
pickle.dump(access_token, file(KEY_FILE, "w"))
print("oauth_token: " + access_token['oauth_token'])
print("oauth_token_secret: " + access_token['oauth_token_secret'])
return OAuthApi(CONSUMER_KEY, CONSUMER_SECRET, access_token['oauth_token'], access_token['oauth_token_secret'])
def getyahoo(keyword):
appid = 'xxxxyahooappidxxxx'
ekeyword = urllib.quote(keyword.encode('utf-8'))
url = 'http://search.yahooapis.jp/AssistSearchService/V1/webunitSearch?appid=%s&query=%s&results=50' % (appid, ekeyword)
xml = ElementTree(file=urlopen(url))
result = xml.findall('{urn:yahoo:jp:srchunit}Result')
if len(result) != 0:
ideaword = ((result.text.strip(keyword)).strip()).encode('utf-8')
else:
ideaword = None
return ideaword
def gethatena(keyword):
s = xmlrpclib.ServerProxy("http://d.hatena.ne.jp/xmlrpc")
res = s.hatena.getSimilarWord({'wordlist':keyword})
result = [ ]
for r in res['wordlist']:
result.append(r['word'])
print len(result)
if len(result) != 0:
ideaword = result.encode('utf-8')
else:
ideaword = None
return ideaword
def getreflexa(keyword):
url = 'http://labs.preferred.jp/reflexa/api.php?q=%s&format=xml' % keyword
xml = ElementTree(file=urlopen(url))
result = xml.findall('//word')
if len(result) != 0:
ideaword = (result.text).encode('utf-8')
else:
ideaword = None
return ideaword
#get from google
googleKWURL = 'http://www.google.co.jp/m/services/trends/get'
xml = ElementTree(file=urlopen(googleKWURL))
query = xml.findall('//query')
keyword1 = query.text
keyword2 = query.text
encodekeyword1 = urllib.quote(keyword1.encode('utf-8'))
encodekeyword2 = urllib.quote(keyword2.encode('utf-8'))
keywordlist1 = [ ]
keywordlist2 = [ ]
#Yahoo!
keywordlist1.append(getyahoo(keyword1))
keywordlist2.append(getyahoo(keyword2))
#hatena
keywordlist1.append(gethatena(encodekeyword1))
keywordlist2.append(gethatena(encodekeyword2))
#reflexa
keywordlist1.append(getreflexa(encodekeyword1))
keywordlist2.append(getreflexa(encodekeyword2))
try:
keywordlist1.remove(None)
except:
pass
try:
keywordlist2.remove(None)
except:
pass
CONSUMER_KEY = "xxxx"
CONSUMER_SECRET = "xxxx"
KEY_FILE = "/path/to/twitter_key.dat"
if len(keywordlist1)!= 0 and len(keywordlist2)!=0:
selectkeyword1 = keywordlist1
selectkeyword2 = keywordlist2
twit = 'アイデアの小槌' + ': ' + selectkeyword1 + ' ' + 'と' + ' ' + selectkeyword2 + ' from #ideamaker http://samurai-apps.com'
print twit
tw = twitter()
tw.UpdateStatus(twit)