Soap API data to Google Sheets



早上好,

我一直很难将soap API数据放入谷歌表单。当我运行Soap请求时,我会得到如图所示的数据。[输出数据][1]

然后我尝试使用不同的方法将这些数据放入谷歌表单,不幸的是,到目前为止还没有任何解决方案奏效。我尝试过的解决方案是将数据酸洗,将其设置在另一个文件中,并将该文件推送到谷歌表单中。

我目前正在研究的解决方案是在pandas数据帧中设置output_data并像那样推送,这是当前的代码,但似乎也不起作用。我将只省略使用API进行身份验证的凭据。

def pandas_to_sheets(pandas_df, sheet, clear = True):
# Updates all values in a workbook to match a pandas dataframe
if clear:
sheet.clear()
(row, col) = pandas_df.shape
cells = sheet.range("A1:{}".format(gspread.utils.rowcol_to_a1(row + 1, col)))
for cell, val in zip(cells, iter_pd(pandas_df)):
cell.value = val
sheet.update_cells(cells)
def iter_pd(df):
for val in list(df.columns):
yield val
for row in df.values:
for val in list(row):
if pd.isna(val):
yield ""
else:
yield val
optionsReportAffiliateSite = [ {'dateFrom' : '01-01-2020', }] 
client = Client(wsdl)
client.service.authenticate(username, password, sandbox, locale, demo)
testReportAffiliateSite = client.service.getReportAffiliateSite(idCampaigns,optionsReportCampaign )
input_dict = zeep.helpers.serialize_object(testReportAffiliateSite)
df = pd.DataFrame(input_dict)
affliatesite = pd.DataFrame(df.values.tolist())[0]
reportdata = pd.DataFrame(df.values.tolist())[1]
pd.json_normalize(affliatesite)
pd.json_normalize(reportdata)
pd.concat([pd.json_normalize(affliatesite), pd.json_normalize(reportdata).reindex(pd.json_normalize(affliatesite).index)], axis=1)
wks = gc.open_by_key('1uPdi2w_1TajnKNN8G3uahgrSHLAPnbAHtHSPeaZN3y0').sheet1
pandas_to_sheets(pd.concat([pd.json_normalize(affliatesite), pd.json_normalize(reportdata).reindex(pd.json_normalize(affliatesite).index)], axis=1), wks)

这给了我一个错误";TypeError:Decimal类型的对象不是JSON可序列化的";

非常感谢。[1] :https://i.stack.imgur.com/efOEN.png

您获得的响应中的十进制值无法序列化为JSON。

因此,您应该将此十进制值转换为另一种可以序列化的类型。例如,float。因此,您可以执行以下操作:

  • 定义此函数,以检查元素是否为十进制并返回转换为浮点的值:
def f(v):
if isinstance(v, Decimal):
return float(v)
else:
return v
  • 遍历您的列表,并为其中的每个值调用上一个函数,使用以下方法:
soapResponse = map(lambda el : {k: f(v) for k, v in el.items()}, soapResponse)

注:

通过from decimal import Decimal导入decimal

参考:

  • 十进制
  • 浮子
  • 地图
  • Python JSON序列化Decimal对象

最新更新