Client is unable to access DSS API with their DSS ID. However, the same credentials are working fine for GUI. Client has shared the below API payload. Can you please assist?
Power Query:
let
// Etapa 1: Datas para os últimos 31 dias
Today = Date.ToText(DateTime.Date(DateTime.LocalNow()), "yyyy-MM-dd"),
StartDate = Date.ToText(Date.AddDays(DateTime.Date(DateTime.LocalNow()), -30), "yyyy-MM-dd"),
// Etapa 2: Autenticação
AuthUrl = https://selectapi.datascope.refinitiv.com/RestApi/v1/Authentication/RequestToken,
AuthBody = Text.ToBinary("{""Username"":""134884"",""Password"":""XXXX""}"),
AuthHeaders = [
#"Content-Type" = "application/json"
],
AuthResponse = Web.Contents(AuthUrl, [
Headers = AuthHeaders,
Content = AuthBody
]),
Token = Text.FromBinary(AuthResponse),
CleanToken = Text.Middle(Token, 1, Text.Length(Token) - 2),
// Etapa 3: Payload com intervalo de datas
ExtractionPayloadTemplate = "
{
""ExtractionRequest"": {
""@odata.type"": ""#DataScope.Select.Api.Extractions.ExtractionRequests.StandardExtractionRequest"",
""ContentFieldNames"": [""Instrument Name"", ""RIC"", ""Close Price"", ""Date""],
""IdentifierList"": {
""@odata.type"": ""#DataScope.Select.Api.Extractions.ExtractionRequests.InstrumentIdentifierList"",
""InstrumentIdentifiers"": [
{""Identifier"": ""CORRA="", ""IdentifierType"": ""Ric""},
{""Identifier"": ""USDSOFR="", ""IdentifierType"": ""Ric""}
],
""ValidationOptions"": null,
""UseUserPreferencesForValidationOptions"": false
},
""Condition"": {
""ReportDateRangeType"": ""Range"",
""QueryStartDate"": ""#STARTDATE#"",
""QueryEndDate"": ""#ENDDATE#""
}
}
}",
ExtractionPayloadText = Text.Replace(Text.Replace(ExtractionPayloadTemplate, "#STARTDATE#", StartDate), "#ENDDATE#", Today),
ExtractionPayload = Text.ToBinary(ExtractionPayloadText),
// Etapa 4: Extração
ExtractionUrl = https://selectapi.datascope.refinitiv.com/RestApi/v1/Extractions/ExtractWithNotes,
ExtractionHeaders = [
#"Authorization" = "fPNY5cRpwzJwuoWuhioKObFdM4MROayKg-t0bNKiCVFwUgTcI5xHQK4DybGQ3HcNuTr8Ibf2CXkHu5FMVo02uvN6DMXegeQaO2V_22BfOXRDbjQR2OXw11hww61dRoGwswzsJ8zu-rlev4Z31sCzXeXXWiugMDL7chE4BKz1VrNk7DxhsxpQuxD3mZCO0f32oO7z4FQtUKE-bUrY2PtuXVRypgcHwG1OIKMusnE6VMT_R7ILZZsmgVgdawbAgnHykwE5SkinZPhzkMJ7KjQwUUB848wZ1henTmOwIwKIxhY" & CleanToken,
#"Content-Type" = "application/json"
],
ExtractionResponse = Web.Contents(ExtractionUrl, [
Headers = ExtractionHeaders,
Content = ExtractionPayload
]),
// Etapa 5: Conversão da resposta em tabela
ResultText = Text.FromBinary(ExtractionResponse),
CsvTable = Csv.Document(ResultText, [Delimiter = "#(tab)", Encoding = 65001, QuoteStyle = QuoteStyle.None]),
PromotedHeaders = Table.PromoteHeaders(CsvTable, [PromoteAllScalars = true])
in
PromotedHeaders
Python:
import requests
# Configurações de autenticação
username = '134884'
password = 'XXXXX'
login_url = '
https://selectapi.datascope.refinitiv.com/DataScopeApi/v1/ExtractionService.asmx
'
# Configuração SOAP para login
soap_login_request = f"""<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance
" xmlns:xsd="
http://www.w3.org/2001/XMLSchema
" xmlns:soap="
http://schemas.xmlsoap.org/soap/envelope/
">
<soap:Header>
<CredentialsHeader xmlns="http://datascope.com/select/ExtractionService/v1/">
<Username>{username}</Username>
<Password>{password}</Password>
</CredentialsHeader>
</soap:Header>
<soap:Body>
<Login xmlns="http://datascope.com/select/ExtractionService/v1/">
<!-- Adicione outros parâmetros de login, se necessário -->
soap:Body>
</soap:Envelope>"""
# Solicitação HTTP para login
try:
headers = {
'Content-Type': 'text/xml; charset=utf-8',
'SOAPAction': 'http://datascope.com/select/ExtractionService/v1/Login'
}
login_response = requests.post(login_url, data=soap_login_request, headers=headers)
login_response.raise_for_status() # Levanta exceção para códigos de status HTTP 4xx/5xx
# Verifique o tipo de conteúdo da resposta
content_type = login_response.headers.get('Content-Type')
print(f"Tipo de conteúdo: {content_type}")
if 'text/xml' in content_type:
# Parse the XML response
login_root = ET.fromstring(login_response.content)
# Process the XML response (exemplo simples)
for elem in login_root.iter():
print(elem.tag, elem.text)
print("Login realizado com sucesso.")
else:
print("Erro: A resposta não está no formato XML esperado.")
print("Conteúdo da resposta:")
print(login_response.text) # Exibe o conteúdo da resposta para análise
except requests.exceptions.HTTPError as err:
print(f"Erro HTTP: {err}")
except requests.exceptions.RequestException as err:
print(f"Erro na solicitação: {err}")
except ET.ParseError as err:
print(f"Erro ao parsear XML: {err}")