python-3.x - 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'
解决方案
推荐阅读
- javascript - 如何根据日期将数据从 gmail 发送到不同的工作表?
- reactjs - 调用 this.props.history.push 后如何进行组件更新?
- javascript - TypeError:使用 cloudinary 时无法读取未定义的属性“路径”
- javascript - IBM Watson WebSocket 连接失败。HTTP 认证失败;没有可用的有效凭证
- html - 无法减少图像和段落之间的额外空间
- dpdk - 在一个 VM 中运行 dpdk pktgen 和数据包捕获
- javascript - JS:如何隐藏引导模式以使输入数据不会持续存在?
- kubernetes - kubernetes helm:如何在父图表中设置子图表的环境变量
- r - 使用 atop() 时完全左对齐
- asp.net-mvc - auth0 回调 url 不存在