LoginSignup
11
10

More than 5 years have passed since last update.

【メモ】pythonでtwitterにつぶやく

Last updated at Posted at 2015-04-23

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の部分はフルパスのほうがいいかも

11
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
10