Matt W.
Matt W.

Reputation: 3722

Exporting gooddata report python

Looking to connect to the Gooddata API and export a report via the API in python. The documentation is a bit confusing to follow.

I've defined a login to my instance of gooddata:

from urllib2 import Request, urlopen
import json
import requests

def login_gooddata(my_email, my_password):
    url = 'https://secure.gooddata.com/gdc/account/login'    

    values = {
        "postUserLogin": {
            "login": my_email,
            "password": my_password,
            "remember": 0,
            "verify_level": 0
        }
    }

    headers = {
      'Content-Type': 'application/json',
      'Accept': 'application/json'
    }
    encoded_values = json.dumps(values)
    #request = Request(url, data=encoded_values, headers=headers)
    r = requests.post(url, data=encoded_values)    
    return r

That successfully logs me in, returning a 200 response.

Given the documentation from the gooddata website on connecting to the API, I'm trying to export a raw project file.

I set the project and object ids:

project_id = 'asibfakuyebkbhdbfaisdf'
object_id = '87234760'


values = {
    "report_req": {
    "reportDefinition": "/gdc/md/"+ project_id + "/obj/" + object_id
    }
  }


headers = {
  'Accept': 'application/json',
  'Content-Type': 'application/json'
}

url = 'https://secure.gooddata.com/gdc/app/projects/' + project_id + '/execute/raw/'

r = requests.post(url, data=json.dumps(values), headers=headers)

request = Request(url, data=json.dumps(values), headers=headers)

response_body = urlopen(requests).read()
print response_body

I played around with using r = requests.post(url, data=encoded_values and request = Request(url, data=encoded_values, headers=headers). Still receiving an error. I'm not really sure how to tackle next steps.

Following directions as stated in documentation for connecting to the API:

enter image description here

Upvotes: 1

Views: 215

Answers (1)

Tomáš Janoušek
Tomáš Janoušek

Reputation: 10727

You need to perform all HTTP requests from a single "session" that remembers cookies from the login: perform s = requests.Session() once, then use s.post instead of requests.post.

See https://stackoverflow.com/a/31571805/3407728 for more.

Upvotes: 1

Related Questions