Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python blpapi.exception.UnsupportedOperationException:没有快照的订阅管理终结点(0x00080013)_Python_Bloomberg_Blpapi - Fatal编程技术网

Python blpapi.exception.UnsupportedOperationException:没有快照的订阅管理终结点(0x00080013)

Python blpapi.exception.UnsupportedOperationException:没有快照的订阅管理终结点(0x00080013),python,bloomberg,blpapi,Python,Bloomberg,Blpapi,我试图使用彭博社随包提供的示例程序,通过Python API从彭博社请求快照。他们自己的程序无法正常工作,我不断发现错误: WARN blpapi_subscriptionmanager.cpp:1653 blpapi.session.subscriptionmanager.{1}快照请求模板需要订阅管理终结点,但没有可用的 blpapi.exception.UnsupportedOperationException:快照(0x00080013)没有订阅管理终结点。 包含快照请求的代码部分位于m

我试图使用彭博社随包提供的示例程序,通过Python API从彭博社请求快照。他们自己的程序无法正常工作,我不断发现错误:

WARN blpapi_subscriptionmanager.cpp:1653 blpapi.session.subscriptionmanager.{1}快照请求模板需要订阅管理终结点,但没有可用的

blpapi.exception.UnsupportedOperationException:快照(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

我不知道endpoint和subscription management endpoint是否是两种不同的东西,因为我还有另一种代码工作正常,而endpoint是我提取数据的服务器的IP。

可能的原因是连接到桌面API,而不是BPIPE或服务器API。您还缺少调用快照的代码;这只是授权部分。我添加了快照请求部分并删除了授权代码,因为我能够成功地通过授权。此外,我还发现端点的ip地址与服务器ip地址相同。所以我不明白它怎么找不到端点。订阅管理端点完全是另一回事吗?订阅管理端点是您的BPIPE。除非您连接到一个,否则快照将无法工作。