This is my first post. I don't know how to use Qiita.
I had the opportunity to write a test for Twitter's OAuth login without using a browser, so I will take out only the parts that can be generalized and leave it. However, I am thinking because it is a problem that I can not determine whether it is an error of the Twitter API or an error of the function under test.
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()
Let's log in to Qiita and open your own settings screen.
Don't forget 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
#I thought I'd do something on the settings screen, but it's getting messy
if __name__ == '__main__':
to = TwitterWebOAuth('naoiwata', 'xxxxxx', True)
to.oauth(
'https://qiita.com/auth/twitter',
callback
)
When I run the file, it outputs https://qiita.com/settings/profile
, so it seems that I logged in and opened my profile setting screen.