Python2.7とpython-twitterで適当にtwitterへつぶやいてみた
場合によってはoauth2もインストールしないといけないかも
準備としてpip install twitter oauth2
とかで適当にライブラリを組み込む
クライアントの情報を開発者ページで取得して
なくても平気ですが設定用のxmlを作ります
こんな感じ
設定ファイル
config.xml
<?xml version="1.0" ?>
<config>
<consumer_key>TwitterクライアントのConsumerKey</consumer_key>
<consumer_secret>TwitterクライアントのConsumer_SecretKey</consumer_secret>
</config>
認証するためのスクリプトを書きます
前段階でxml作らない場合は初回起動時に聞いてきます
エラー吐いたらライブラリが足りないかxmlがおかしくなってるので消すか書き直してください
Oauth認証ファイル
oauthing.py
import oauth2,urlparse
import webbrowser
import os
import xml.etree.ElementTree as XML
from xml.dom import minidom
#パーサー
def pretty(elem):
rough_string = XML.tostring(elem,'utf-8')
reparsed = minidom.parseString(rough_string)
return reparsed.toprettyxml(indent=' ')
#格納先
CONSUMER_KEY = ''
CONSUMER_SECLET = ''
# 読み込むコンフィグファイル名
CONFIG_FILE = 'config.xml'
#存在チェック
if os.path.isfile(CONFIG_FILE):
# read consumerkey as config.xml
tree = XML.parse(CONFIG_FILE)
root = tree.getroot()
CONSUMER_KEY = root.find('.//consumer_key').text
CONSUMER_SECLET = root.find('.//consumer_secret').text
else:
# read input as write file
top = XML.Element('config')
con_key = XML.SubElement(top,'consumer_key')
print 'request Consumer Key ? '
con_key.text = raw_input()
CONSUMER_KEY = con_key.text
con_secret = XML.SubElement(top,'consumer_secret')
print 'request Consumer Secret Key ? '
con_secret.text = raw_input()
CONSUMER_SECLET = con_secret.text
with open(CONFIG_FILE,'w') as f:
f.write(pretty(top))
consumer = oauth2.Consumer(key='{0}'.format(CONSUMER_KEY),secret='{0}'.format(CONSUMER_SECLET))
client = oauth2.Client(consumer)
resp,content = client.request('https://api.twitter.com/oauth/request_token','GET')
d = dict(urlparse.parse_qsl(content) )
url ='https://api.twitter.com/oauth/authorize?oauth_token={0}'.format(d['oauth_token'])
webbrowser.open(url)
#ここでブラウザでPIN認証を行う
print 'request pin'
pin = raw_input()
token = oauth2.Token(d['oauth_token'],d['oauth_token_secret'] )
client = oauth2.Client(consumer,token)
resp,content = client.request('https://api.twitter.com/oauth/access_token',
'POST',
body='oauth_verifier={0}'.format(pin)
)
d2 = dict(urlparse.parse_qsl(content) )
#うまく認証できていればここでユーザー情報の書き出し
newroot = XML.Element('config')
tree = XML.parse(CONFIG_FILE)
root = tree.getroot()
CONSUMER_KEY = root.find('.//consumer_key').text
CONSUMER_SECLET = root.find('.//consumer_secret').text
con_key = XML.SubElement(newroot,'consumer_key');
con_key.text = CONSUMER_KEY
con_secret = XML.SubElement(newroot,'consumer_secret')
con_secret.text = CONSUMER_SECLET
oauth = XML.SubElement(newroot,'oauth_token')
oauth.text = d2['oauth_token']
oauth_secret = XML.SubElement( newroot ,'oauth_token_secret')
oauth_secret.text = d2['oauth_token_secret']
with open(CONFIG_FILE,'w') as f:
f.write(pretty(newroot))
つぶやくアカウントと使うクライアントの開発アカウントが同じなら
oauthing.py無視してXML書いてしまえます
config.xml
<?xml version="1.0" ?>
<config>
<consumer_key>TwitterクライアントのConsumerKey</consumer_key>
<consumer_secret>TwitterクライアントのConsumer_SecretKey</consumer_secret>
<oauth_token>Twitterクライアントのoauth_Token</oauth_token>
<oauth_token_secret>TwitterクライアントのOauth_Token_SecretKey</oauth_token_secret>
</config>
認証できれば後はこっちだけで十分です
実際につぶやくファイル
tweet.py
import twitter
import commands
import os
import platform
import urllib
import xml.etree.ElementTree as XML
def check_None(elem,key):
res = None
res = elem.find(key)
if res == None:
res = ''
else:
res = res.text
return res
CONFIG_FILE = 'config.xml'
CONSUMER_KEY = ''
CONSUMER_SECLET = ''
ACCESS_TOKEN_KEY = ''
ACCESS_TOKEN_SECLET = ''
#oauthing.pyで作ったXMLから情報引っ張る
if os.path.isfile(CONFIG_FILE):
tree = XML.parse(CONFIG_FILE)
root = tree.getroot()
CONSUMER_KEY = check_None(root,'consumer_key')
CONSUMER_SECLET = check_None(root,'consumer_secret')
ACCESS_TOKEN_KEY = check_None(root,'oauth_token')
ACCESS_TOKEN_SECLET = check_None(root,'oauth_token_secret')
else:
exit()
api = twitter.Api(
consumer_key = CONSUMER_KEY,
consumer_secret = CONSUMER_SECLET,
access_token_key = ACCESS_TOKEN_KEY,
access_token_secret = ACCESS_TOKEN_SECLET,
cache=None
)
#グローバルIPをつぶやいてみる
ip = None
if platform.system() == 'Windows':
sock = urllib.urlopen('http://ipcheck.ieserver.net')
ip = sock.read()
sock.close()
elif platform.system() == 'Linux':
ip = commands.getoutput('wget -q -O - ipcheck.ieserver.net')
if ip == None:
exit()
#実際につぶやく
status = api.PostUpdate('{0}'.format(ip))
最後のところは適当に改造してください
oauthing.pyを作ったのはアプリの開発アカウントとは別アカウントでやりたかったからです。
cronでまわすのならCONFIG_FILE
の部分はフルパスのほうがいいかも