Skip to content

Instantly share code, notes, and snippets.

@devunt
Last active August 29, 2015 14:19
Show Gist options
  • Save devunt/a7337024e38de7f86c46 to your computer and use it in GitHub Desktop.
Save devunt/a7337024e38de7f86c46 to your computer and use it in GitHub Desktop.
import re
import requests
RE_AUTHENTICITY_TOKEN = re.compile(r'<input.*value="(?P<token>[a-z0-9]{40})".*>')
class Twitter:
def __init__(self, username, password):
self.session = requests.Session()
self.username = username
self.password = password
r = self.session.get('https://twitter.com/')
m = RE_AUTHENTICITY_TOKEN.search(r.text)
self.token = m.group('token')
def login(self):
payloads = {
'session[username_or_email]': self.username,
'session[password]': self.password,
'authenticity_token': self.token,
}
r = self.session.post('https://twitter.com/sessions', data=payloads)
if r.url != 'https://twitter.com/':
raise RuntimeError('Cannot login to Twitter. Please check your login information again.')
def protect(self, protect=True):
payloads = {
'user[protected]': protect * 1,
'auth_password': self.password,
'authenticity_token': self.token,
}
self.session.post('https://twitter.com/settings/security/update', data=payloads)
def unprotect(self):
self.protect(False)
def tweet(self, message):
payloads = {'status': message, 'authenticity_token': self.token}
self.session.post('https://twitter.com/i/tweet/create', data=payloads)
def logout(self):
payloads = {'authenticity_token': self.token}
r = self.session.post('https://twitter.com/logout', data=payloads)
def main():
twitter = Twitter(username='devunt', password='')
twitter.login()
twitter.unprotect()
twitter.tweet('...')
twitter.protect()
twitter.logout()
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment