def send_request(path, param_dict): # convert single value to one-element list for k in param_dict: v = param_dict[k] if isinstance(v, basestring): param_dict[k] = [v] # create content content = "" for k in param_dict: for v in param_dict[k]: if isinstance(v, unicode): # encode unicode to utf8 v = v.encode("utf-8") content += k + "=" + percent_encode(v) + "&" content = content[0:-1] # remove trailing & # headers host_name = app_id + ".appspot.com" headers = { "Host": host_name, "Accept": "text/html", "Content-Type": "application/x-www-form-urlencoded", "Connection": "keep-alive", "Upgrade-Insecure-Requests": " 1", } # send connection = HTTPSConnection(host_name) connection.request("POST", path, content, headers) # return response status return connection.getresponse().status
def get_stream(delimited='length', filter_level='none', language='en'): sign_dict = oauthd() sign_string = signature_base_string('GET', TWITTER_SAMPLE_STREAM, delimited=delimited, filter_level=filter_level, language=language, **sign_dict) sign_key = signing_key() _hash = hmac.new(sign_key, sign_string, hashlib.sha1) oauth_signature = _hash.digest().encode('base64') sign_dict['oauth_signature'] = percent_encode(oauth_signature) headers={'Authorization': ('OAuth ' + ', '.join(('%s="%s"' % (k, sign_dict[k])) for k in sorted(sign_dict.keys())))} print json.dumps(headers,indent=1) return requests.get(TWITTER_SAMPLE_STREAM, params=dict(delimited=delimited, filter_level=filter_level, language=language), headers=headers, stream=True)
def signing_key(): return '&'.join(percent_encode(x) for x in [OAUTH_CONSUMER_SECRET, ACCESS_TOKEN_SECRET])
def signature_base_string(method, url, **params): method = method.upper() url = percent_encode(url, safe='') plist = percent_encode('&'.join('%s=%s' % (k, params[k]) for k in sorted(params.keys()))) return '&'.join([method, url, plist])