初投稿です. Qiita の使い方よくわからないです.
Twitter の OAuth ログインをブラウザを使わずテストを書く機会があったので汎用化できるところだけ取り出して残しておきます.
ただ Twitter API のエラーなのかテスト対象の機能のエラーなのか判別できないのが問題なので考え中です.
twitteroauth.py
# -*- coding: utf-8 -*-
import mechanize
import cookielib
class TwitterWebOAuth(object):
"""Twitter Web OAuth"""
def __init__(self, username, password, is_cookie=False):
self._is_cookie = is_cookie
self._username = username
self._password = password
def oauth(self, oauth_url, callback_proc):
"""OAuth with twitter account"""
br = self._browser()
br.open(oauth_url)
self._login_with_twitter(br)
url = br.geturl()
return callback_proc(url, br)
def patch(self, proc):
"""patch script using Browser"""
self._browser()
return proc()
def _browser(self):
br = mechanize.Browser()
br.set_handle_equiv(True)
br.set_handle_redirect(True)
br.set_handle_referer(True)
br.set_handle_robots(False)
if self._is_cookie:
cj = cookielib.CookieJar()
br.set_cookiejar(cj)
return br
def _login_with_twitter(self, br):
url = br.geturl()
br.open(url)
br.select_form(nr=0)
br.form['session[username_or_email]'] = self._username
br.form['session[password]'] = self._password
br.submit()
例
Qiita にログインして自分の設定画面を開いてみましょう.
pip install mechanize
を忘れずに.
test.py
# -*- coding: utf-8 -*-
from twitteroauth import TwitterWebOAuth
def callback(url, br):
br.open('https://qiita.com/settings/profile')
url = br.geturl()
print url
# 設定画面でなんかしようとおもったけどめんどくなってきた
if __name__ == '__main__':
to = TwitterWebOAuth('naoiwata', 'xxxxxx', True)
to.oauth(
'https://qiita.com/auth/twitter',
callback
)
ファイルを実行すると https://qiita.com/settings/profile
と出力されるので, ログインして自分のプロフィール設定画面が開いたようです.