Advertisement
Guest User

Untitled

a guest
Mar 1st, 2017
44
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.96 KB | None | 0 0
  1. import hmac
  2. import config
  3. import base64
  4. import urllib.parse
  5. import urllib
  6. import collections
  7. import requests
  8. import calendar
  9. import pprint
  10. import hashlib
  11. import time
  12. import string
  13. import random
  14.  
  15. streamUrl = "https://stream.twitter.com/1.1/statuses/filter.json?"
  16.  
  17.  
  18. class GenertateAuthHeader():
  19.     def generateOauthNonce(self):
  20.         lst = [random.choice(string.ascii_letters + string.digits) for n in range(32)]
  21.         str = "".join(lst)
  22.         return str
  23.  
  24.     def createSignatureString(self, baseString, signingKey):
  25.         outputStream = hmac.new(signingKey, baseString.encode(encoding='ascii'), hashlib.sha1)
  26.         return str(base64.b64encode(outputStream.digest()), encoding='ascii').rstrip('\n')
  27.  
  28.     def createSignatureBaseString(self, urlEncodedUrl="", urlOauthEncodedHeader=""):
  29.         return urlEncodedUrl + urlOauthEncodedHeader
  30.  
  31.     ##This creates a URL string that is encoded to I can attach
  32.     ##The Authorization ehader and encode to make the Signature
  33.     def createUrlString(self, httpMethod="POST", params=""):
  34.         baseString = ""
  35.         methodCapitalized = httpMethod.upper()
  36.         baseString += methodCapitalized
  37.         baseString += "&"
  38.         baseString += urllib.parse.quote(streamUrl)
  39.         baseString += "&"
  40.         baseString += urllib.parse.quote(params)
  41.         return urllib.parse.quote(baseString)
  42.  
  43.     ##This is becuase the keys need to be in order when creating the signature
  44.     def createUnorderedDictToOrdered(self, inDict):
  45.         orderedDict = collections.OrderedDict(sorted(inDict.items()))
  46.         return orderedDict
  47.  
  48.     def createSigningKey(self):
  49.         return str(urllib.parse.quote(config.twitterCSecret) + "&" + urllib.parse.quote(config.twitterAToken))
  50.  
  51.     ##agian this dictionary is for the signature
  52.     def createAuthDict(self):
  53.         oauthNonce = self.generateOauthNonce()
  54.         timeStamp = str(calendar.timegm(time.gmtime()))
  55.         authString = {
  56.             'oauth_consumer_key': urllib.parse.quote(config.twitterCKey),
  57.             'oauth_nonce': oauthNonce,
  58.             'oauth_signature_method': 'HMAC-SHA1',
  59.             'oauth_timestamp': timeStamp,
  60.             'oauth_token': config.twitterAToken,
  61.             'oauth_version': '1.0'
  62.         }
  63.         return self.createUnorderedDictToOrdered(authString)
  64.  
  65.     def generateSignatureString(self):
  66.         aDict = self.createAuthDict()
  67.         signingKey = self.createSigningKey()
  68.         encodedUrl = self.createUrlString()
  69.         orderedKeys = self.createUnorderedDictToOrdered(aDict)
  70.         encodedSigningKey = ""
  71.         for x in orderedKeys.items():
  72.             encodedSigningKey += urllib.parse.quote_plus(x[0]) + "=" + urllib.parse.quote(x[1]) + ","
  73.         baseString = encodedUrl + urllib.parse.quote(encodedSigningKey)
  74.  
  75.         return self.createSignatureString(baseString, bytes(signingKey, encoding='ascii'))
  76.  
  77.     ##This method only needs to be run to get the full authorization header WITH Signature
  78.     def generateAuthorizationHeader(self):
  79.         header = self.createAuthDict()
  80.         headerString = "OAuth "
  81.         count = 0
  82.         for x, v in header.items():
  83.             headerString += x + "=\"" + v + "\", "
  84.             if count == 1:
  85.                 headerString += "oauth_signature=\"" + self.generateSignatureString() + "\", "
  86.             count += 1
  87.  
  88.         return headerString[:-2]
  89.  
  90.  
  91. if __name__ == '__main__':
  92.  
  93.     authHeader = GenertateAuthHeader()
  94.     authorizationHeader = authHeader.generateAuthorizationHeader()
  95.     header = {
  96.         'Accept': '*/*',
  97.         'Connection': 'Keep-Alive',
  98.         'Content-Type': 'application/x-www-form-urlencoded',
  99.         'Authorization': authorizationHeader,
  100.         'Host': 'stream.twitter.com'
  101.     }
  102.  
  103.     data = {
  104.         'language': config.twitterSearchLanguage,
  105.         'track': config.twitterSearchTerms
  106.     }
  107.  
  108.     print(header)
  109.  
  110.     r = requests.post(streamUrl, headers=header, params=data)
  111.  
  112.     print(r.url)
  113.     print(r)
  114.     print(r.text)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement