Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/python
- # coding=utf-8
- #
- # Copyright (c) 2017 Benoit Verret <benoit.verret@protonmail.ch>
- #
- # Permission to use, copy, modify, and distribute this software for any
- # purpose with or without fee is hereby granted, provided that the above
- # copyright notice and this permission notice appear in all copies.
- #
- # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- #
- from bs4 import BeautifulSoup
- import datetime
- import getpass
- import requests
- import sys
- import time
- def check_login(html_doc):
- screen_name = u''
- soup = BeautifulSoup(html_doc, 'html5lib', from_encoding="utf-8")
- div_screen_name = soup.find('div', attrs={'class':'account-group js-mini-current-user'})
- if div_screen_name == None:
- return u''
- if u'data-screen-name' not in div_screen_name.attrs:
- return u''
- screen_name = div_screen_name[u'data-screen-name']
- return screen_name
- def check_mentions(reply, screen_name):
- div_tweet = reply.find('div')
- if div_tweet == None:
- return False
- if u'data-mentions' not in div_tweet.attrs:
- return False
- mention = screen_name in div_tweet[u'data-mentions']
- return mention
- if __name__ == '__main__':
- headers = {}
- headers['User-Agent'] = 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:50.0) Gecko/20100101 Firefox/50.0'
- sess = requests.session()
- sess.headers = headers
- # session[username_or_email]
- username = raw_input('Phone, email or username: ')
- # session[password]
- password = getpass.getpass()
- while True:
- # Wait 5 minutes and log back in when something goes wrong.
- problem = False
- screen_name = u''
- print
- print('###############################################')
- print
- # GET https://twitter.com/login
- url = 'https://twitter.com/login'
- response = sess.get(url, headers=headers)
- # Restart bot if status code is not 200.
- if response.status_code == 200:
- resp = response.content
- else:
- print >> sys.stderr, 'Error ' + str(response.status_code)
- problem = True
- if problem == False:
- soup = BeautifulSoup(resp, 'html5lib', from_encoding="utf-8")
- input_token = soup.find('input', attrs={'name':'authenticity_token'})
- auth_token = input_token[u'value']
- time.sleep(5)
- # POST https://twitter.com/sessions
- payload = {}
- payload['session[username_or_email]'] = username
- payload['session[password]'] = password
- payload['authenticity_token'] = auth_token
- payload['scribe_log'] = ''
- payload['redirect_after_login'] = ''
- payload['remember_me'] = '1'
- url = 'https://twitter.com/sessions'
- response = sess.post(url, data=payload, headers=headers)
- if response.status_code == 200:
- resp = response.content
- else:
- print >> sys.stderr, 'Error ' + str(response.status_code)
- problem = True
- # Restart bot if not logged in.
- if problem == False:
- screen_name = check_login(resp)
- if screen_name == u'':
- print >> sys.stderr, url
- print >> sys.stderr, 'Not logged in.'
- problem = True
- time.sleep(5)
- while problem == False:
- # GET https://twitter.com/i/notifications
- url = 'https://twitter.com/i/notifications'
- response = sess.get(url, headers=headers)
- if response.status_code == 200:
- resp = response.content
- else:
- print >> sys.stderr, url
- print >> sys.stderr, 'Error ' + str(response.status_code)
- break
- screen_name = check_login(resp)
- print(screen_name)
- if screen_name == u'':
- print >> sys.stderr, url
- print >> sys.stderr, 'Not logged in.'
- break
- time.sleep(5)
- soup = BeautifulSoup(resp, 'html5lib', from_encoding="utf-8")
- # Find replies.
- replies = soup.find_all('li', attrs={'data-component-context':'reply_activity'})
- for reply in replies:
- if 'highlighted' in reply[u'class']:
- tweet_id = reply[u'data-item-id']
- tweet_header = reply.find('div', attrs={'class':'stream-item-header'})
- tweet_content = reply.find('div', attrs={'class':'js-tweet-text-container'})
- print(tweet_id)
- print(tweet_header.text)
- print(tweet_content.text)
- print
- print('###############################################')
- print
- print(datetime.datetime.now())
- time.sleep(60)
- time.sleep(300)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement