通过REST API for Oracle Eloqua Marketing Cloud Service 获取数据,
验证方式是Authenticate using HTTP Basic Authentication验证方式
import base64
import requests
import json
import psycopg2
# 用来操作数据库的类
class GPCommand(object):
# 类的初始化
def __init__(self):
self.hostname = 'xxxxxx'
self.username = 'xxxx'
self.password = 'xxxxx'
self.database = 'xxxx'
def connectGp(self):
try:
#链接数据库
#读取配置利用connect链接数据库
self.connect = psycopg2.connect( host=self.hostname, user=self.username, password=self.password, dbname=self.database )
#创建一个新的cursor
self.cursor = self.connect.cursor()
print("connect gp successful."+'\n' + '数据库连接成功')
return ('con_successful')
except psycopg2.Error:
error = 'Failed to setup Postgres environment.\n{0}'.format(sys.exc_info())
print('connect gp error.'+'\n' + '数据库连接失败')
return 'con_error'+ error
#关闭数据库
def closeMysql(self):
self.cursor.close()
self.connect.close()
print("数据库已关闭")
def insert_data(self,table_name,dict): #_key,dict_value
try:
dicts_values = []
# print(dict)
dict_key = list(dict.keys())
table_key = ",".join(dict_key)
ROWstr = '' # 行字段
for key in dict.keys():
ROWstr = (ROWstr + "'%s'" + ',') % (escape_character(dict[key]))
insert_sql = "insert into %s (%s) values (%s)"\
%(table_name,table_key,ROWstr[:-1])
# print(insert_sql)
self.cursor.execute(insert_sql)
self.connect.commit()
except Exception as e:
print(e)
def escape_character(string):
script = ''
if type(string) == type([]):
script_tmp = ",".join(string)
elif type(string) == type({}):
script_tmp = str(string)
else:
script_tmp = string
if "'" in script_tmp:
nops = []
new_loop = []
itemplist = list(script_tmp)
for i in range(len(itemplist)):
if itemplist[i] == "'":
nops.append(i)
for item in nops:
new_loop.append(item + nops.index(item))
for i in new_loop:
itemplist.insert(i, "'")
script = "".join(itemplist)
else:
script = script_tmp
return script
config_data = [
#{'table_name':'public.accounts_test10','get_url':'/api/REST/1.0/data/accounts','modify_date':'lastUpdatedAt'},
{'table_name':'public.campaigns_test20','get_url':'/api/REST/2.0/assets/campaigns','modify_date':'lastUpdatedAt'},
{'table_name':'public.contact_fields_test10','get_url':'/api/REST/1.0/assets/contact/fields','modify_date':'lastUpdatedAt'}
#{'table_name':'public.contact_lists_test10','get_url':'/api/REST/1.0/assets/contact/lists','modify_date':'lastUpdatedAt'}
#{'table_name':'public.contact_segments_test10','get_url':'/api/REST/1.0/assets/contact/segments','modify_date':'lastUpdatedAt'}
#{'table_name':'public.contact_test10','get_url':'/api/REST/1.0/data/contacts','modify_date':'lastUpdatedAt'} --42w 未全导入
#{'table_name': 'public.content_sections_test10', 'get_url': '/api/REST/1.0/assets/contentSections','modify_date': 'lastUpdatedAt'}
#{'table_name':'public.custom_object_test10','get_url':'/api/REST/1.0/assets/customObjects','modify_date':'lastUpdatedAt'}
#{'table_name':'public.custom_object_data_test10','get_url':'/api/REST/1.0/data/customObject/8','modify_date':'lastUpdatedAt'} -- 需要id去获取,但是id是多少目前不知道custom object data2.0相同
#{'table_name':'public.email_folders_test10','get_url':'/api/REST/1.0/assets/email/folders','modify_date':'lastUpdatedAt'}
#{'table_name':'public.email_footers_test10','get_url':'/api/REST/1.0/assets/email/footers','modify_date':'lastUpdatedAt'}
#{'table_name':'public.email_groups_test10','get_url':'/api/REST/1.0/assets/email/groups','modify_date':'lastUpdatedAt'}
#{'table_name':'public.email_headers_test10','get_url':'/api/REST/1.0/assets/email/headers','modify_date':'lastUpdatedAt'}
#{'table_name':'public.emails_test10','get_url':'/api/REST/1.0/assets/emails','modify_date':'lastUpdatedAt'}
#{'table_name':'public.forms_test10','get_url':'/api/REST/1.0/assets/forms','modify_date':'lastUpdatedAt'}
#{'table_name':'public.images_test10','get_url':'/api/REST/1.0/assets/images','modify_date':'lastUpdatedAt'}
#{'table_name':'public.landing_pages_test10','get_url':'/api/REST/1.0/assets/landingPages','modify_date':'lastUpdatedAt'}
#{'table_name':'public.microsites_test10','get_url':'/api/REST/1.0/assets/microsites','modify_date':'lastUpdatedAt'}
#{'table_name':'public.option_lists_test10','get_url':'/api/REST/1.0/assets/optionLists','modify_date':'lastUpdatedAt'}
#{'table_name':'public.users_test10','get_url':'/api/REST/1.0/system/users','modify_date':'lastUpdatedAt'}
#{'table_name':'public.account_groups_test20','get_url':'/api/REST/2.0/assets/account/groups','modify_date':'lastUpdatedAt'}
#{'table_name':'public.account_test20','get_url':'/api/REST/2.0/assets/account/groups','modify_date':'lastUpdatedAt'} -- 采用的是post,必须提供ids 故先不提取 contact20相同
#{'table_name':'public.campaigns_test20','get_url':'/api/REST/2.0/assets/campaigns','modify_date':'lastUpdatedAt'}
#{'table_name':'public.contact_segments_test20','get_url':'/api/REST/2.0/assets/contact/segments','modify_date':'lastUpdatedAt'}
#{'table_name':'public.custom_objects_test20','get_url':'/api/REST/2.0/assets/customObjects','modify_date':'lastUpdatedAt'}
#{'table_name':'public.emails_test20','get_url':'/api/REST/2.0/assets/emails','modify_date':'lastUpdatedAt'}
#{'table_name':'public.events_test20','get_url':'/api/REST/2.0/assets/eventRegistrations','modify_date':'lastUpdatedAt'}
#external activity需要id
#{'table_name':'public.external_asset_types_test20','get_url':'/api/REST/2.0/assets/external/types','modify_date':'lastUpdatedAt'}
#{'table_name':'public.external_assets_test20','get_url':'/api/REST/2.0/assets/externals','modify_date':'lastUpdatedAt'} -- 没有数据
#{'table_name':'public.programs_test20','get_url':'/api/REST/2.0/assets/programs','modify_date':'lastUpdatedAt'}
#{'table_name':'public.visitor_profile_fields_test20','get_url':'/api/REST/2.0/assets/visitor/fields','modify_date':'lastUpdatedAt'}
#{'table_name':'public.visitor_data_test20','get_url':'/api/REST/2.0/data/visitors','modify_date':'lastUpdatedAt'}
]
for i in range(0 ,len(config_data)):
gpCommand = GPCommand()
gpCommand.connectGp()
result_data=[]
url = 'https://login.eloqua.com/id'
str_encrypt= 'xxxxx\xxxxx:xxxx'
base64_encrypt = str(base64.b64encode(str_encrypt.encode('utf-8')),'utf-8')
Authorization = "Basic %s" % base64_encrypt
headers = { 'Authorization' : Authorization }
r = requests.get(url,headers=headers)
base_url = 'https://secure.p04.eloqua.com'+config_data[i]['get_url']+'?page=1&'+config_data[i]['modify_date']+'>=1540194812'
baseheaders = { 'Authorization' : Authorization,'Accept':'application/json','Content-Type':'application/json'}
br = requests.get(base_url,headers=baseheaders)
br_result = json.loads(br.content.decode())
result_data.append(br_result['elements'])
print(br_result['total'])
page_size = 3 #br_result['total']//1000 + 2
for item in range(2,page_size):
page_url = 'https://secure.p04.eloqua.com'+config_data[i]['get_url']+'?page=' + str(item) +'&'+config_data[i]['modify_date']+'>=1540194812'
br_page = requests.get(page_url, headers=baseheaders)
br_page_result = json.loads(br_page.content.decode())
result_data.append(br_page_result['elements'])
result_data_temp = []
for item in result_data:
for it in item:
result_data_temp.append(it)
print(result_data_temp)
#
for item in result_data_temp:
gpCommand.insert_data(config_data[i]['table_name'],item)
gpCommand.closeMysql()