Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.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 如何循环API键,以在最终数据帧中的单独行中获得它们的输出?_Python_Api_Loops_Dataframe - Fatal编程技术网

Python 如何循环API键,以在最终数据帧中的单独行中获得它们的输出?

Python 如何循环API键,以在最终数据帧中的单独行中获得它们的输出?,python,api,loops,dataframe,Python,Api,Loops,Dataframe,我是python新手,正在尝试通过数据进行循环: 我正在使用sendgrid api global stats端点,并且成功地获得了一个api密钥的输出 我的代码: import pandas as pd import json from pandas.io.json import json_normalize from datetime import date today = date.today().strftime('%Y-%m-%d') import http.client conn

我是python新手,正在尝试通过数据进行循环:

我正在使用sendgrid api global stats端点,并且成功地获得了一个api密钥的输出

我的代码:

import pandas as pd
import json
from pandas.io.json import json_normalize
from datetime import date
today = date.today().strftime('%Y-%m-%d')
import http.client

conn = http.client.HTTPSConnection("api.sendgrid.com")
payload = "{}"
headers = { 'authorization': "Bearer SG.FO0***" }

conn.request("GET", "/v3/stats?aggregated_by=day&start_date={d}&end_date={d}".format(d=today), payload, headers)

res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))

d = data.decode("utf-8")
d = json.loads(d)
d = d[0]['stats'][0]['metrics']

sendgrid = pd.DataFrame([d])
sendgrid.to_csv('sendgrid.csv')
sendgrid
Out[31]: 
   blocks  bounce_drops  bounces  ...  unique_opens  unsubscribe_drops  unsubscribes
0       7            14        9  ...          1240                  0             0
输出:

import pandas as pd
import json
from pandas.io.json import json_normalize
from datetime import date
today = date.today().strftime('%Y-%m-%d')
import http.client

conn = http.client.HTTPSConnection("api.sendgrid.com")
payload = "{}"
headers = { 'authorization': "Bearer SG.FO0***" }

conn.request("GET", "/v3/stats?aggregated_by=day&start_date={d}&end_date={d}".format(d=today), payload, headers)

res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))

d = data.decode("utf-8")
d = json.loads(d)
d = d[0]['stats'][0]['metrics']

sendgrid = pd.DataFrame([d])
sendgrid.to_csv('sendgrid.csv')
sendgrid
Out[31]: 
   blocks  bounce_drops  bounces  ...  unique_opens  unsubscribe_drops  unsubscribes
0       7            14        9  ...          1240                  0             0
但是,这是一个API密钥的输出。我在同一个帐户下有多个API密钥,并且具有按品牌排序的与它们相关的不同数据:

#marketing = SG.UdhzjmjYRC***
#operational = SG.FO0b2Oz***
#SEOmarketing = SG._dnhFlnrSL**
#FFTP = SG.4duN1bHiT9G1**
#PPI_operational = SG.F3zH**
我想循环使用每个品牌(营销、seo营销等)的每个API键,这样我就可以通过同一个应用程序,而不是创建多个应用程序,为所有品牌获取上述输出。 我的目标是使最终数据帧如下所示:

Brand              blocks  bounce_drops  bounces  ...  unique_opens  unsubscribe_drops  unsubscribes
marketing           7            14        9  ...          1240                  0             0
operational         8            12        7               2000                 0              0
SEO                 15           10        8               3333                 1              0

我应该在代码中更改或添加什么?

似乎您只需要创建一个包含键(部门名称)和值(API键)的应用程序,并在大部分工作所在的部分循环

提示:就在设置承载令牌之前,以及接收数据之后。然后将结果合并到同一数据帧中

import pandas as pd
import json
from pandas.io.json import json_normalize
from datetime import date
today = date.today().strftime('%Y-%m-%d')
import http.client

conn = http.client.HTTPSConnection("api.sendgrid.com")
payload = "{}"

keys = {
    "marketing" : "SG.UdhzjmjYRC***",
    "operational": "SG.FO0b2Oz***",
    "SEOmarketing": "SG._dnhFlnrSL**",
    "FFTP": "SG.4duN1bHiT9G1**",
    "PPI_operational": "SG.F3zH**"
}
df = []  # Create new Dataframe

for name, value in keys.items():
    headers = { 'authorization': "Bearer " + value }

    conn.request("GET", "/v3/stats?aggregated_by=day&start_date={d}&end_date={d}".format(d=today), payload, headers)

    res = conn.getresponse()
    data = res.read()
    print(data.decode("utf-8"))

    d = json.loads(data.decode("utf-8"))
    row = d[0]['stats'][0]['metrics']
    # Add Brand to data row here with 'name'
    df.append(row)  # Load data row into df

sendgrid = pd.DataFrame(df)
sendgrid.to_csv('sendgrid.csv')