将API报告结果获取到pandas Dataframe 中

6za6bjd0  于 2023-04-10  发布在  其他
关注(0)|答案(1)|浏览(106)

我遇到了一个问题,因为我的一个供应商。出于某种原因,每当我通过他们的统计API运行任何报告时,它总是使用太平洋标准时间运行,而不管我在东部标准时间的事实。为了解决这个问题,我必须将报告的开始和结束日期拨回三个小时,然后我需要手动将“TimeStamp”列的时间向前更改三个小时。最后我需要将所有结果输入到我的MS SQL示例中。我已经到了可以返回结果的地步,但是我不知道下一步该怎么做。我的直觉告诉我,这可能是一个pandas解决方案,但是我不确定如何将结果导入pandas数据框。以下是我目前所做的(注意我正在与之合作的供应商名为Five9,我为他们找到了一个库,可以帮助我连接到API并获得我想要的报告结果):

from five9 import Five9
import datetime
from datetime import datetime, timedelta
import time
from pytz import timezone
import pyodbc
import json

now_utc = datetime.now(timezone('UTC'))
now_eastern = now_utc.astimezone(timezone('US/Eastern'))

#Change days from current time
startreportime = now_eastern - timedelta(days=2)
endreportime = now_eastern - timedelta(days=1)

#Set start and end time for report criteria
starttime = f"{(startreportime):%Y-%m-%d}" + 'T21:00:00.000'
endtime = f"{(endreportime):%Y-%m-%d}" + 'T20:59:00.000'

#connect to API
client = Five9('MyUID','MyPWD')

#Set variables as start and end
start = starttime
end = endtime

#set criteria using variables
criteria = {'time':{'end':end, 'start':start}}

#Get report and seet criteria for report
identifier = client.configuration.runReport(folderName='Five9 Import Data',\
    reportName='Agent State Details',criteria=criteria)

#Sleep so report has time to complete
time.sleep(30)

#Get report results
get_results = client.configuration.getReportResult(identifier)
results = get_results['records']
print(results)

使用这个我得到这些类型的结果:

[{
    'values': {
        'data': [
            'Mon, 22 Feb 2021 21:00:00',
            'abowling@*****.com',
            'Adam',
            'Bowling',
            'Login',
            None,
            None,
            'TUPSS, Telamon Inbound, Stericycle Environment Inbound, Stericycle ComSol Inbound,
            '01:18:05',
            '08 - TS'
        ]
    }

如果我能把这些结果放到一个dataframe中,我确信我能处理剩下的部分。我知道如何使用timedelta来处理时间戳问题,我可以处理把它从一个dataframe放到sql中。我只是花了很长时间试图弄清楚如何把这些结果放到一个dataframe中。

0pizxfdo

0pizxfdo1#

我不确定是否有人会读到这篇文章,但我让它与以下内容一起工作:

def process_rows(rows):
    for row in rows:
        date1 = row['values']['data'][0]
        date1 = datetime.strptime(date1, '%a, %d %b %Y %H:%M:%S').astimezone(timezone("US/Pacific"))
        date2 = date1.astimezone(timezone("US/Eastern"))
        date2 = date2.strftime('%Y-%m-%d %H:%M:%S')
        cloned_row = [value for value in row['values']['data']]
        cloned_row[0] = str(date2)
         
        if cloned_row[8] == '24:00:00':
            cloned_row[8] = '00:00:00'
                
        yield cloned_row

args = process_rows(results)

insertSQL = ('''
            INSERT INTO [Reporting].[dbo].[AgentState] 
            (TimeStamp, Agent, FirstName, LastName, State, ReasonCode, Media, Skill, StateTime, [Group])
            VALUES (?,?,?,?,?,?,?,?,?,?)
            '''
            )
cursor.fast_executemany = True 
cursor.executemany(insertSQL, args)
conn.commit()

相关问题