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 5.0 MiB each and 10.0 MiB total.

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 5.0 MiB each and 10.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 5.0 MiB each and 10.0 MiB total.

Great, good to know :)

Click below to post an Idea Post Idea