Expand my Community achievements bar.

SOLVED

analytics-1.4-apis data-sources-api

Avatar

Level 1

Hi,
we're using the data-sources-api of analytics-1.4-apis and we got this error: "invalid columns, at least one is required and columns must match for each upload" when we try to use DataSources.UploadData.

We using python 3.7 with the requests library.

As required by the APi ( sees the doc ), on the post request  we define the columns parameter as array of string:

columns = ["Date", "Evar 96", "Event 97", "Event 99", "Event 98", "Event 100"]
rows = [
["12/31/2020", "100011173", "1", "2", "3", "4"],
["01/29/2021", "100011173", "1", "3", "4", "5"],
["01/30/2021", "100011173", "2", "6", "5", "6"],
["01/31/2021", "100011173", "3", "4", "5", "6"],
["02/01/2021", "100011173", "4", "5", "6", "7"],
]

 

and give it to the API as item of the payload:

payload = {
"columns": columns,
"dataSourceID": dataSourceID,
"finished": True,
"jobName": "pippo123",
"reportSuiteID": rsid,
"rows": rows
}


url = "https://api.omniture.com/admin/1.4/rest/?method="
response = requests.post(url + "DataSources.UploadData", headers=header, data=payload)

 

Now we don't undertand because we got the error?

 

Thanks, Stefano G.

1 Accepted Solution

Avatar

Correct answer by
Employee Advisor

Can you check if "rows" matches with columns? If you can share rows with some the values here, I can review that.

View solution in original post

5 Replies

Avatar

Correct answer by
Employee Advisor

Can you check if "rows" matches with columns? If you can share rows with some the values here, I can review that.

Avatar

Level 1

Hi Khurshid,

I've updated the question with the rows that i'm using in the test

rows = [
["12/31/2020", "100011173", "1", "2", "3", "4"],
["01/29/2021", "100011173", "1", "3", "4", "5"],
["01/30/2021", "100011173", "2", "6", "5", "6"],
["01/31/2021", "100011173", "3", "4", "5", "6"],
["02/01/2021", "100011173", "4", "5", "6", "7"],
]

Avatar

Employee Advisor
I see the payload is fine, except that the last row in "rows" has comma.

Avatar

Level 1

Hi Khurshid,

i found the issue, the cause is not the comma (Python allow trailing comma in a dictonary and clean it before to convert the dict in a "real" JSON).

To resolve the issue, in the requests.post call I must pass the parameters as json and not as data:

 

response = requests.post(url + "DataSources.UploadData", headers=header, json=payload)

 

 

Avatar

Employee Advisor
I have limited experience in Python so could not catch the issue. Glad you identified it.