blpapi.exception.Исключение UnsupportedOperationException: нет конечных точек управления подпиской для моментального снимка (0x00080013)

#python #bloomberg #blpapi

#python #bloomberg #blpapi

Вопрос:

Я пытаюсь запросить моментальный снимок у Bloomberg через Python API, используя примеры программ, которые Bloomberg предоставил вместе с пакетом. Их собственная программа не работает должным образом, и я продолжаю получать сообщение об ошибке:

WARN blpapi_subscriptionmanager.cpp:1653 blpapi.session.subscriptionmanager.{1} Subscription management endpoints are required for snapshot request templates but none are available

blpapi.exception.UnsupportedOperationException: No subscription management endpoints for snapshot (0x00080013).

Часть кода, содержащая запрос моментального снимка, находится в main func:

 def main():
    """main entry point"""
    global options
    options = parseCmdLine()

# Create a session and Fill SessionOptions
    sessionOptions = blpapi.SessionOptions()
    for idx, host in enumerate(options.hosts):
        sessionOptions.setServerAddress(host, options.port, idx)
    sessionOptions.setAuthenticationOptions(options.auth)
    sessionOptions.setAutoRestartOnDisconnection(True)

    print("Connecting to port %d on %s" % (
        options.port, ", ".join(options.hosts)))

    session = blpapi.Session(sessionOptions)

    if not session.start():
        print("Failed to start session.")
        return

    subscriptionIdentity = None
    if options.auth:
        subscriptionIdentity = session.createIdentity()
        isAuthorized = False
        authServiceName = "//blp/apiauth"
        if session.openService(authServiceName):
            authService = session.getService(authServiceName)
            isAuthorized = authorize(authService, subscriptionIdentity,
                                     session, blpapi.CorrelationId("auth"))
        if not isAuthorized:
            print("No authorization")
            return
    else:
        print("Not using authorization")

# Snapshot Request Part:

    fieldStr = "?fields="   ",".join(options.fields)

    snapshots = []
    nextCorrelationId = 0
    for i, topic in enumerate(options.topics):
        subscriptionString = options.service   topic   fieldStr
        snapshots.append(session.createSnapshotRequestTemplate(
            subscriptionString,
            subscriptionIdentity,
            blpapi.CorrelationId(i)))
        nextCorrelationId  = 1

    requestTemplateAvailable = blpapi.Name('RequestTemplateAvailable')
    eventCount = 0
    try:
        while True:
            # Specify timeout to give a chance for Ctrl-C
            event = session.nextEvent(1000)
            for msg in event:
                if event.eventType() == blpapi.Event.ADMIN and  
                        msg.messageType() == requestTemplateAvailable:

                    for requestTemplate in snapshots:
                        session.sendRequestTemplate(
                            requestTemplate,
                            blpapi.CorrelationId(nextCorrelationId))
                        nextCorrelationId  = 1

                elif event.eventType() == blpapi.Event.RESPONSE or 
                        event.eventType() == blpapi.Event.PARTIAL_RESPONSE:

                    cid = msg.correlationIds()[0].value()
                    print("%s - %s" % (cid, msg))
                else:
                    print(msg)
            if event.eventType() == blpapi.Event.RESPONSE:
                eventCount  = 1
                if eventCount >= options.maxEvents:
                    print("%d events processed, terminating." % eventCount)
                    break
            elif event.eventType() == blpapi.Event.TIMEOUT:
                for requestTemplate in snapshots:
                    session.sendRequestTemplate(
                        requestTemplate,
                        blpapi.CorrelationId(nextCorrelationId))
                    nextCorrelationId  = 1
  

Я не знаю, являются ли конечная точка и конечная точка управления подпиской двумя разными вещами, потому что у меня есть еще один код, работающий правильно, а конечной точкой является IP-адрес сервера, с которого я извлекаю данные.

Комментарии:

1. Вероятной причиной этого является подключение к API рабочего стола вместо API BPIPE или сервера. Вам также не хватает кода, который вызывает моментальные снимки; это просто раздел авторизации.

2. Я добавил часть запроса моментального снимка и удалил код для авторизации, поскольку я могу успешно пройти авторизацию. Кроме того, я выяснил, что конечная точка — это IP-адрес, такой же, как IP-адрес сервера. Поэтому я не понимаю, как он не может найти конечную точку. Является ли конечная точка управления подпиской чем-то совершенно другим?

3. Конечная точка управления подпиской — это ваш BPIPE. Если вы не подключаетесь к одному из них, моментальные снимки не будут работать.