Wimpyrr
Wimpyrr

Reputation: 11

How to get a POST request using python on HERE route matching API?

I've tried to do a POST request using python's request library, which looked something like below:

url = "https://rme.api.here.com/2/matchroute.json?routemode=car&filetype=CSV&app_id={id}&app_code={code}" response = requests.post(url,data='Datasets/rtHereTest.csv')

The response I've been getting a code 400

{'faultCode': '16a6f70f-1fa3-4b57-9ef3-a0a440f8a42e',
 'responseCode': '400 Bad Request',
 'message': 'Column LATITUDE missing'}

However, in my dataset, here I have all the headings that's required from the HERE API documentation to be able to make a call.

Is there something I'm doing wrong, I don't quite understand the POST call or the requirement as the HERE documentation doesn't explicitly give many examples.

Upvotes: 0

Views: 1516

Answers (2)

user3505695
user3505695

Reputation:

You can try to post the data using below format.

import requests
    url = "https://rme.api.here.com/2/matchroute.json"
    querystring = {"routemode":"car","app_id":"{app_id}","app_code":"{app_code}","filetype":"CSV"}
    data=open('path of CSV file','r')
    headers = {'Content-Type': "Content-Type: text/csv;charset=utf-8",
        'Accept-Encoding': "gzip, deflate",
        }
    response = requests.request("POST", url, data=data.read().encode('utf-8'), params=querystring,headers=headers)
    print(response.status_code)

Upvotes: 0

ctrlw
ctrlw

Reputation: 130

The data field of your post request should contain the actual data, not just a filename. Try loading the file first:

f = open('Datasets/rtHereTest.csv', 'r')
url = "https://rme.api.here.com/2/matchroute.json?routemode=car&filetype=CSV&app_id={id}&app_code={code}"
response = requests.post(url, data=f.read())
f.close()

Here's what I use in my own code, with the coordinates defined before:

query = 'https://rme.api.here.com/2/matchroute.json?routemode=car&app_id={id}&app_code={code}'.format(id=app_id, code=app_code)
coord_strings = ['{:.5f},{:.5f}'.format(coord[0], coord[1]) for coord in coords]
data = 'latitude,longitude\n' + '\n'.join(coord_strings)
result = requests.post(query, data=data)

Upvotes: 1

Related Questions