DSS API credentials not working

Anirudh Vishnubhatla
edited 3:49AM in DSS

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}")

Best Answer