def _request(self, method='', params=dict()): """Execute an API call on Eventbrite using their HTTP-based API method - string - the API method to call - see https://www.eventbrite.com/doc params - dict - Arguments to pass along as method request parameters Returns: A dictionary with a return structure defined at http://developer.eventbrite.com/doc/ """ #unpack our params if type(params) == type(()) and len(params) > 0: method_arguments = dict(params[0]) else: method_arguments = {} # Add authentication tokens if 'access_token' not in self._auth_tokens: method_arguments.update(self._auth_tokens) # urlencode API method parameters encoded_params = urllib.urlencode(method_arguments) # construct our request url request_url = self.eventbrite_request_template % dict(host=self.eventbrite_api_endpoint, method=method, arguments=encoded_params) #self.logger.debug("REQ - %s", request_url) # Send a GET request to Eventbrite # if using OAuth2.0 for authentication, set additional headers if 'access_token' in self._auth_tokens: self._https_connection.request('GET', request_url, None, {'Authorization': "Bearer " + self._auth_tokens['access_token']}) else: self._https_connection.request('GET', request_url) # Read the JSON response response_data = self._https_connection.getresponse().read() #self.logger.debug("RES - %s", response_data) # decode our response response = json_lib.loads(response_data) if 'error' in response and 'error_message' in response['error'] : raise EnvironmentError( response['error']['error_message'] ) return response
def oauth_handshake( self, tokens ): """Exchange an intermediary access_code for an OAuth2.0 access_token tokens - dict - 'app_key' = API_key, 'client_secret' = client secret, 'access_code' = access_code Returns: an Oauth2.0 access_token, see http://developer.eventbrite.com/doc/authentication/oauth2/ """ params = {'grant_type' : 'authorization_code', 'client_id' : tokens['app_key'], 'client_secret': tokens['client_secret'], 'code' : tokens['access_code'] } request_url = 'https://%(host)s/oauth/token' % dict(host=self.eventbrite_api_endpoint) post_body = urllib.urlencode(params) headers = {'Content-type': "application/x-www-form-urlencoded"} self._https_connection.request('POST', request_url, post_body, headers) response_data = self._https_connection.getresponse().read() response = json_lib.loads(response_data) if 'error' in response or 'access_token' not in response : raise EnvironmentError( response['error_description'] ) return response