question

Upvotes
Accepted
83 1 1 2

TRTH ExtractRawResult returns Error 404

I'm creating a python sample around TRTH starting from the tutorial and I'm getting this 404 error in the last step of the process. Would anyone have a working python sample ?

  • Getting the token works fine
import requests
import json 
requestUrl = "https://hosted.datascopeapi.reuters.com/RestApi/v1/Authentication/RequestToken" 

requestHeaders={
    "Prefer":"respond-async",
    "Content-Type":"application/json"
} 

requestBody={
    "Credentials": {
    "Username": "XXXXX",
    "Password": "*****"
  }
}
r = requests.post(requestUrl, json=requestBody,headers=requestHeaders)
jsonResponse = json.loads(r.text.encode('ascii', 'ignore')) 

token = jsonResponse["value"] 

print token

returns succesfully the token

  • then I can successfuly post a request
Url='https://hosted.datascopeapi.reuters.com/RestApi/v1/Extractions/ExtractRaw'
requestUrl=Url

requestHeaders={
    "Prefer":"respond-async",
    "Content-Type":"application/json",
    "Authorization": "token " + token
}

requestBody={
  "ExtractionRequest": {
    "@odata.type": "#ThomsonReuters.Dss.Api.Extractions.ExtractionRequests.TickHistoryIntradaySummariesExtractionRequest",
    "ContentFieldNames": [
      "Close Ask",
      "Close Bid",
      "High",
      "High Ask",
      "High Bid",
      "Last",
      "Low",
      "Low Ask",
      "Low Bid",
      "No. Asks",
      "No. Bids",
      "No. Trades",
      "Open",
      "Open Ask",
      "Open Bid",
      "Volume"
    ],
    "IdentifierList": {
      "@odata.type": "#ThomsonReuters.Dss.Api.Extractions.ExtractionRequests.InstrumentIdentifierList",  
      "InstrumentIdentifiers": [{
        "Identifier": "CARR.PA",
        "IdentifierType": "Ric"
      }],
      "UseUserPreferencesForValidationOptions":"false"
    },
    
    "Condition": {
      "MessageTimeStampIn": "GmtUtc",
      "ReportDateRangeType": "Range",
      "QueryStartDate": "2016-09-29T00:00:00.000Z",
      "QueryEndDate": "2016-09-30T00:00:00.000Z",
      "SummaryInterval": "OneHour",
      "TimebarPersistence":"true",
      "DisplaySourceRIC":"true"
    }
        
  }
}

r = requests.post(requestUrl, json=requestBody,headers=requestHeaders)

print r
print r.headers
print r.headers["location"]

and get as expected

<Response [202]>

{'Status': 'InProgress', 'Content-Length': '0', 'X-Request-Execution-Correlation-Id': 'c9034ca7-94d4-4c5a-a4ee-75e499b88457', 'X-App-Id': 'Custom.RestApi', 'Set-Cookie': 'DSSAPI-COOKIE=R3479498792; path=/', 'Expires': '-1', 'Server': 'Microsoft-IIS/7.5', 'X-App-Version': '11.0.492.64', 'Location': "https://hosted.datascopeapi.reuters.com/RestApi/v1/Extractions/ExtractRawResult(ExtractionId='0x05b94284924b3016')", 'Pragma': 'no-cache', 'Cache-Control': 'no-cache', 'Date': 'Fri, 19 May 2017 09:42:01 GMT', 'Progress': ''}

https://hosted.datascopeapi.reuters.com/RestApi/v1/Extractions/ExtractRawResult(ExtractionId='0x05b94284924b3016')
  • I can then pull the status
requestUrl = r.headers["location"]
print requestUrl

requestHeaders={
    "Prefer":"respond-async",
    "Content-Type":"application/json",
    "Authorization":"token " + token
}

r2 = requests.get(requestUrl,headers=requestHeaders)

print r2
print r2.headers

until I get

<Response [200]>
  • However, when I try to retrieve the content using
requestUrl = r.headers["location"] + "/$value"

requestHeaders={
    "Prefer":"respond-async",
    "Content-Type":"application/json",
    "Accept-Encoding":"gzip, deflate",
    "Authorization": "token " + token
}

r3 = requests.get(requestUrl,headers=requestHeaders)

print r3

I get

<Response [400]>

would anyone have a working python sample ?

Many thanks

pythontick-history-rest-api
icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

@samuel.schwalm

Once your sample works, if you agree we could post it on the portal. We currently have no Python samples for TRTH, so this would be great to have.

no problem. I'm using jypiter notebook, so it may have to be converted to another editor. in any case I'm happyto share it.

regards

@samuel.schwalm

Great, thank you ! This will be of great benefit to our customers.

Whenever it is ready for publication, package all the necessary files (readme, explanations, whatever is required) in a zip file, and send it to me so I can publish it for you in the TRTH REST downloads section of the developer portal.

Hi @samuel.schwalm

Thank you for your participation in the forum. Are any of the replies below satisfactory in resolving your query? If yes please click the 'Accept' text next to the reply. This will guide all community members who have a similar question. Otherwise please post again offering further insight into your question.

Thanks,

AHS

thank for the info. this is done.

Upvotes
Accepted
13.7k 26 8 12

@samuel.schwalm

400 is a bad request, 404 indicates that the resource specified by the request URL does not exist (see status codes here).

The issue is with the URL when you try to retrieve the content. It is not the location URL. Instead, you must use this URL:

https://hosted.datascopeapi.reuters.com/RestApi/v1/Extractions/RawExtractionResults('0x05b94284924b3016')/$value

This URL contains the JobId (0x05b94284924b3016) which was returned in the body of the previous 200 response.

You can find the details of the On Demand request workflow in this tutorial, and this particular step is described here.

icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

Upvotes
83 1 1 2

Many thanks @Christiaan Meihsl

Indeed with the right url it works better!

requestUrl = "https://hosted.datascopeapi.reuters.com/RestApi/v1/Extractions/RawExtractionResults" + "('" + jobId + "')" + "/$value"


requestHeaders={
    "Prefer":"respond-async",
    "Content-Type":"text/plain",
    "Accept-Encoding":"gzip",
    "Authorization": "token " + token
}


r3 = requests.get(requestUrl,headers=requestHeaders)
extract = r3.text 
print r3
print extract

or with a panda dataframe

rom StringIO import StringIO
import pandas as pd


timeSeries = pd.read_csv(StringIO(r3.text))
timeSeries

Many thanks

Samuel

icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

Great, good to know :)

Write an Answer

Hint: Notify or tag a user in this post by typing @username.

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.