首页 > 解决方案 > Query_Result 不可迭代。无法转换成数据框

问题描述

我正在尝试下面的代码将 api 响应转换为数据帧,但无法做到这一点。请帮助我获得理想的输出。我正在使用客户端 ID 和密码来连接此 API 并生成类型的查询结果 - <class 'PureCloudPlatformClientV2.models.conversation_aggregate_query_response.ConversationAggregateQueryResponse'>。

代码-

import base64, sys, requests, os
from datetime import datetime, timedelta
import PureCloudPlatformClientV2
from pprint import pprint
from PureCloudPlatformClientV2.rest import ApiException
import pandas as pd
import google.protobuf  as pf
from google.protobuf import json_format

fp = open('/medaff/Scripts/python/test.env', 'r')
lines = [line.rstrip('\n') for line in fp]
Data = {}
for line in lines:
    temp = line.split('=', 1)
    if(len(temp)>1):
        Data[temp[0]] = temp[1]
    else:
        pass

# Credentials
CLIENT_ID = Data['GENESYS_CLOUD_CLIENT_ID'].strip('"')
CLIENT_SECRET = Data['GENESYS_CLOUD_CLIENT_SECRET'].strip('"')
ORG_REGION = Data['GENESYS_CLOUD_REGION'].strip('"')


def get_interval_string():
    """ Gets an ISO-8601 interval from now for the last 7 days """
    now = datetime.now().replace(microsecond=0)
    week_ago = (now - timedelta(days=7)).replace(microsecond=0)
    return f"{ week_ago.isoformat() }/{ now.isoformat() }"


print("-------------------------------------------------------------")
print("- Querying Queue Historical Statistics -")
print("-------------------------------------------------------------")



# Set environment
region = PureCloudPlatformClientV2.PureCloudRegionHosts[ORG_REGION]
PureCloudPlatformClientV2.configuration.host = region.get_api_host()

# OAuth when using Client Credentials
api_client = PureCloudPlatformClientV2.api_client.ApiClient() \
            .get_client_credentials_token(CLIENT_ID, CLIENT_SECRET)

# Genesys Cloud Objects
routing_api = PureCloudPlatformClientV2.RoutingApi(api_client)
analytics_api = PureCloudPlatformClientV2.AnalyticsApi(api_client)

# Get "Support" queue by name
try:
    queue_data = routing_api.get_routing_queues(name='POR-HCP')
except ApiException as e:
    print("Exception when calling RoutingApi->get_routing_queues: {e}")
    sys.exit()

print(f"queueData: {queue_data}")

# Store queue ID
queue_id = queue_data.entities[0].id

# Build analytics query
query = PureCloudPlatformClientV2.ConversationAggregationQuery()
query.interval = get_interval_string()
query.group_by = ['queueId']
query.metrics = ['nOffered', 'tAnswered', 'tTalk']
query.filter = PureCloudPlatformClientV2.ConversationAggregateQueryFilter()
query.filter.type = 'and'
query.filter.clauses = [PureCloudPlatformClientV2.ConversationAggregateQueryClause()]
query.filter.clauses[0].type = 'or'
query.filter.clauses[0].predicates = [PureCloudPlatformClientV2.ConversationAggregateQueryPredicate()]
query.filter.clauses[0].predicates[0].dimension = 'queueId'
query.filter.clauses[0].predicates[0].value = queue_id

print(f"query: {query}")

# Execute analytics query
query_result = analytics_api.post_analytics_conversations_aggregates_query(query)

print(f"queryResult: {query_result}")

query_response =pf.json_format.MessageToJson(query_result)
print(query_response)

我从这段代码中得到的结果 -

queryResult: {'results': [{'data': [{'interval': '2021-09-22T07:13:09.000Z/2021-09-29T07:13:09.000Z',
                        'metrics': [{'metric': 'nOffered',
                                     'qualifier': None,
                                     'stats': {'count': 17,
                                               'count_negative': None,
                                               'count_positive': None,
                                               'current': None,
                                               'denominator': None,
                                               'max': None,
                                               'min': None,
                                               'numerator': None,
                                               'ratio': None,
                                               'sum': None,
                                               'target': None}},
                                    {'metric': 'tAnswered',
                                     'qualifier': None,
                                     'stats': {'count': 17,
                                               'count_negative': None,
                                               'count_positive': None,
                                               'current': None,
                                               'denominator': None,
                                               'max': 17327.0,
                                               'min': 4569.0,
                                               'numerator': None,
                                               'ratio': None,
                                               'sum': 156929.0,
                                               'target': None}},
                                    {'metric': 'tTalk',
                                     'qualifier': None,
                                     'stats': {'count': 29,
                                               'count_negative': None,
                                               'count_positive': None,
                                               'current': None,
                                               'denominator': None,
                                               'max': 2650757.0,
                                               'min': 2124.0,
                                               'numerator': None,
                                               'ratio': None,
                                               'sum': 8402252.0,
                                               'target': None}}],
                        'views': None}],
              'group': {'mediaType': 'voice',
                        'queueId': 'a72dba75-0bc6-4a65-b120-8803364f8dc3'}}]}

试图将其转换为以下数据框 -

metric           stats              queueId
           count       sum  
nOffered   17          None         a72dba75-0bc6-4a65-b120-8803364f8dc3
tAnswered  17          156929.0     a72dba75-0bc6-4a65-b120-8803364f8dc3
tTalk      29          8402252.0    a72dba75-0bc6-4a65-b120-8803364f8dc3

低于错误 -

Traceback (most recent call last):
  File "Genesys_test.py", line 83, in <module>
    query_response =pf.json_format.MessageToJson(query_result)
  File "/root/.local/lib/python3.6/site-packages/google/protobuf/json_format.py", line 127, in MessageToJson
    return printer.ToJsonString(message, indent, sort_keys)
  File "/root/.local/lib/python3.6/site-packages/google/protobuf/json_format.py", line 194, in ToJsonString
    js = self._MessageToJsonObject(message)
  File "/root/.local/lib/python3.6/site-packages/google/protobuf/json_format.py", line 199, in _MessageToJsonObject
    message_descriptor = message.DESCRIPTOR
AttributeError: 'ConversationAggregateQueryResponse' object has no attribute 'DESCRIPTOR'

标签: python-3.xpandasdataframegoogle-analytics-api

解决方案


推荐阅读