Talend pardotapi从Prospect表中检索所有记录

Talend pardotapi从Prospect表中检索所有记录,talend,pardot,Talend,Pardot,我使用Talend向Pardot发出API调用,并从Prospect表中检索记录。 这只给了我200张唱片。 有谁能建议一种检索此表中所有可用记录的方法吗 或者如何循环检索200条记录,并在检索到的记录为零时终止。一次只能检索200条记录。如果要检索所有记录,必须使用offset参数循环它。这里,偏移量每次增加200,即当使用offset=0时,它将检索前200条记录,然后将偏移量增加200(offset=200)以检索下200条记录。下面是我如何用Python将所有记录检索到csv文件中的 i

我使用Talend向Pardot发出API调用,并从Prospect表中检索记录。 这只给了我200张唱片。 有谁能建议一种检索此表中所有可用记录的方法吗


或者如何循环检索200条记录,并在检索到的记录为零时终止。

一次只能检索200条记录。如果要检索所有记录,必须使用offset参数循环它。这里,偏移量每次增加200,即当使用offset=0时,它将检索前200条记录,然后将偏移量增加200(offset=200)以检索下200条记录。下面是我如何用Python将所有记录检索到csv文件中的

i=0
final_data = pd.DataFrame() #Initialize an empty dataframe
url = "https://pi.pardot.com/api/Prospect/version/4/do/query? user_key=&api_key=&output=bulk&format=json&sort_by=&src=&offset="+str(i)
while requests.get(url).json()['result'] is not None:
  url = "https://pi.pardot.com/api/Prospect/version/4/do/query? user_key=&api_key=&output=bulk&format=json&sort_by=&src=&offset="+str(i)
  data = pd.DataFrame.from_dict(requests.get(url).json()['result']['prospect'])
  final_data=data.append(final_data)
  i=i+200
final_data.to_csv('complete_data.csv',index=False)

我使用了条件
requests.get(url).json()['result']不是None
,因为我不知道存在的偏移量。所以我每次都检查记录是否存在于偏移量中。如果有数千个偏移,这可能会花费太长的时间。希望这有帮助。

此外,Pardot API密钥每60分钟过期一次。因此最好在python中使用,只要当前密钥过期,python就可以使用新的API密钥

您可以使用以下代码

from pypardot.client import PardotAPI
import requests
import pandas as pd
p = PardotAPI(
    email='',
    password='',
    user_key='')
p.authenticate()    
i=0
final_data = pd.DataFrame()
while i <=p.prospects.query()['total_results'] -1: 
  print(i)
  data=pd.DataFrame.from_dict(p.prospects.query(format='json',sort_by='id',offset=i)['prospect'])
  final_data=data.append(final_data,sort=True)
  i=i+200
final_data.to_csv('complete_data.csv',index=False)
从pypardot.client导入PardotAPI
导入请求
作为pd进口熊猫
p=PardotAPI(
电子邮件=“”,
密码=“”,
用户密钥=“”)
p、 验证()
i=0
final_data=pd.DataFrame()
同时,我提供了一个经过修改的有效解决方案
我避免使用“Offset”参数,因为建议不要将其用于批量数据拉取

"""defining a function for getting an api key using credentials for Pardot user"""

def api_key_gen():
    import requests
    import json

    url = "https://pi.pardot.com/api/login/version/3%20HTTP/1.1"
    
    querystring = {"email":"","password":"","user_key":"","format":"json"}
    
    headers = {
        'Connection': "keep-alive",
        'cache-control': "no-cache"
        }
    
    response = requests.request("POST", url, headers=headers, params=querystring)
    
#    print(json.loads(response.text)['api_key'])
    return (json.loads(response.text)['api_key'])
使用这两个函数获取数据。
  • 第一个函数使用两个日期之间的间隔获取数据
  • 如果在一秒钟内存储了大量记录,则使用第二个函数
  • 使用下面的代码从pardot api获取一个月的数据,以保持较小的数据大小。此外,每当api密钥过期时,将获取一个新的密钥api密钥并在URL中使用。日期用于相互比较,以便仅获取所需时间段的数据。除了日期参数外,我已尝试保持整个过程的动态

    import pandas as pd
    import requests
    import json
    from datetime import datetime,timedelta
    
    """using a start date and target date to fetch data for a particular time span"""
    
    max_date = '2014-02-03 08:02:57'
    target_date = datetime.strptime('2014-06-30 23:59:59','%Y-%m-%d %H:%M:%S')
    
    
    final_data = pd.DataFrame() #Initialize an empty dataframe
    api_key = api_key_gen()
    last_maxDate = max_date
    last_maxId = '' #get the id of first record for desired year and fill here
    url = "https://pi.pardot.com/api/prospect/version/3/do/query? user_key=&api_key="+str(api_key)+"&output=bulk&created_after="+str(max_date)+"&created_before="+str(target_date)+"&format=json"
    print("Start Time : ",datetime.now())
    i =1
    while json.loads((requests.request("GET", url)).text)['result'] is not None:
    #    max_date = datetime.strptime(str(max_date),'%Y-%m-%d %H:%M:%S')-timedelta(seconds=1)
        last_maxDate = datetime.strptime(str(last_maxDate),'%Y-%m-%d %H:%M:%S')
        api_key = api_key_gen()
        data = fetchFromDate(api_key, max_date, target_date)
        if len(data) < 200:
            final_data=data.append(final_data,ignore_index=True)
            break
        else:
            max_id = max(data['id'])
            max_date = max(data['created_at'])
            max_date = datetime.strptime(str(max_date),'%Y-%m-%d %H:%M:%S')-timedelta(seconds=1)
    #        print(type(max_date),type(last_maxDate))
            if bool(max_date == last_maxDate) & bool(int(max_id) == int(last_maxId)):
                print("Running through Id's")
                api_key = api_key_gen()
                data = fetchFromId(api_key, max_id)
    #            final_data=data.append(final_data,ignore_index=True)
                max_id = max(data['id'])
                max_date = max(data['created_at'])
            final_data=data.append(final_data,ignore_index=True)
            last_maxDate = max_date
            last_maxId = max_id
            print("Running Loop :",i,max_date,max_id)
            i += 1
    
    print(max(data['created_at']))
    print(max(data['id']))
    final_data.to_csv('file.csv',index=False)
    print("End Time : ",datetime.now())
    
    将熊猫作为pd导入
    导入请求
    导入json
    从datetime导入datetime,timedelta
    “”“使用开始日期和目标日期获取特定时间跨度的数据”“”
    最大日期='2014-02-03 08:02:57'
    target_date=datetime.strtime('2014-06-30 23:59:59','%Y-%m-%d%H:%m:%S')
    final_data=pd.DataFrame()#初始化空数据帧
    api_key=api_key_gen()
    last_maxDate=最大日期
    last_maxId=“”#获取所需年份的第一条记录的id并在此处填写
    url=”https://pi.pardot.com/api/prospect/version/3/do/query? user_key=&api_key=“+str(api_key)+”&output=bulk&created_after=“+str(max_date)+”&created_before=“+str(target_date)+”&format=json”
    打印(“开始时间:”,datetime.now())
    i=1
    而json.load((requests.request(“GET”,url)).text)['result']不是None:
    #max_date=datetime.strtime(str(max_date),“%Y-%m-%d%H:%m:%S”)-timedelta(秒=1)
    last_maxDate=datetime.strTime(str(last_maxDate),“%Y-%m-%d%H:%m:%S”)
    api_key=api_key_gen()
    数据=fetchFromDate(api密钥、最大日期、目标日期)
    如果len(数据)<200:
    final\u data=data.append(final\u data,ignore\u index=True)
    打破
    其他:
    max_id=max(数据['id'])
    max_date=max(数据['created_at'])
    max_date=datetime.strtime(str(max_date),“%Y-%m-%d%H:%m:%S”)-timedelta(秒=1)
    #打印(类型(最大日期),类型(最后一个最大日期))
    如果bool(max_date==last_maxDate)&bool(int(max_id)==int(last_maxId)):
    打印(“通过Id运行”)
    api_key=api_key_gen()
    数据=fetchFromId(api\u键,最大id)
    #final\u data=data.append(final\u data,ignore\u index=True)
    max_id=max(数据['id'])
    max_date=max(数据['created_at'])
    final\u data=data.append(final\u data,ignore\u index=True)
    last_maxDate=最大日期
    last\u maxId=max\u id
    打印(“运行循环:”,i,max\u date,max\u id)
    i+=1
    打印(最大值(数据['created_at']))
    打印(最大值(数据['id']))
    最终数据到csv('file.csv',index=False)
    打印(“结束时间:”,datetime.now())
    
    上述答案有利于循环。如果您只需要有限数量的字段,请查看移动响应格式,它没有200条记录的限制。但是,它只支持几个预定义字段

    import pandas as pd
    import requests
    import json
    from datetime import datetime,timedelta
    
    """using a start date and target date to fetch data for a particular time span"""
    
    max_date = '2014-02-03 08:02:57'
    target_date = datetime.strptime('2014-06-30 23:59:59','%Y-%m-%d %H:%M:%S')
    
    
    final_data = pd.DataFrame() #Initialize an empty dataframe
    api_key = api_key_gen()
    last_maxDate = max_date
    last_maxId = '' #get the id of first record for desired year and fill here
    url = "https://pi.pardot.com/api/prospect/version/3/do/query? user_key=&api_key="+str(api_key)+"&output=bulk&created_after="+str(max_date)+"&created_before="+str(target_date)+"&format=json"
    print("Start Time : ",datetime.now())
    i =1
    while json.loads((requests.request("GET", url)).text)['result'] is not None:
    #    max_date = datetime.strptime(str(max_date),'%Y-%m-%d %H:%M:%S')-timedelta(seconds=1)
        last_maxDate = datetime.strptime(str(last_maxDate),'%Y-%m-%d %H:%M:%S')
        api_key = api_key_gen()
        data = fetchFromDate(api_key, max_date, target_date)
        if len(data) < 200:
            final_data=data.append(final_data,ignore_index=True)
            break
        else:
            max_id = max(data['id'])
            max_date = max(data['created_at'])
            max_date = datetime.strptime(str(max_date),'%Y-%m-%d %H:%M:%S')-timedelta(seconds=1)
    #        print(type(max_date),type(last_maxDate))
            if bool(max_date == last_maxDate) & bool(int(max_id) == int(last_maxId)):
                print("Running through Id's")
                api_key = api_key_gen()
                data = fetchFromId(api_key, max_id)
    #            final_data=data.append(final_data,ignore_index=True)
                max_id = max(data['id'])
                max_date = max(data['created_at'])
            final_data=data.append(final_data,ignore_index=True)
            last_maxDate = max_date
            last_maxId = max_id
            print("Running Loop :",i,max_date,max_id)
            i += 1
    
    print(max(data['created_at']))
    print(max(data['id']))
    final_data.to_csv('file.csv',index=False)
    print("End Time : ",datetime.now())