很遗憾,我无法提供可重复的数据集。我正在尝试连接到API并从GoodData中提取报告数据。我已经能够成功连接并提取报告,但是偶尔失败。脚本中有一个特定的点,它失败了,我无法弄清楚为什么有时它会起作用,而不是其他人。
我创建了以下功能来下载报告。函数参数是gooddata中的项目ID,从登录/身份验证中收到的临时令牌,要调用的文件名以及从调用特定项目和报告ID时获得的uri。 uri就像数据的位置。
uri看起来像(不是真正的uri)。
'{"uri":"/gdc/projects/omaes11n7jpaisfd87asdfhbakjsdf87adfbkajdf/execute/raw/876dfa8f87ds6f8fd6a8ds7f6a8da8sd7f68as7d6f87af?q=as8d7f6a8sd7fas8d7fa8sd7f6a8sdf7"}'
from urllib2 import Request, urlopen
import re
import json
import pandas as pd
import os
import time
# function
def download_report(proj_id, temp_token, file_name, uri, write_to_file=True):
headers = {
'Accept': 'application/json',
'Content-Type': 'application/json',
'X-GDC-AuthTT': temp_token
}
uri2 = re.sub('{"uri":|}|"', '', uri)
put_request = Request('https://secure.gooddata.com' + uri2, headers=headers)
response = urlopen(put_request).read()
with open(file_name + ".csv", "wb") as text_file:
text_file.write(response)
with open(file_name + ".csv", 'rb') as f:
gd_data = pd.read_csv(f)
if write_to_file:
gd_data.to_csv(file_name + '.csv', index=False)
return gd_data
uri附加到普通的gooddata URL,以及标头,将信息提取为文本格式,然后转换为csv / dataframe。
由于某种原因,数据帧基本上只是将uri变成数据帧,而不是将数据从链接中拉出。我发现奇怪的最后一件事是,当我启动Spyder并尝试使用它时,它总是第一次失败。如果我尝试再次运行它,它将起作用。我不知道为什么由于我试图按计划运行此程序,因此它一天成功运行了几天,然后又开始出现故障。
答案 0 :(得分:1)
之所以有时会获取数据结果的URI,而不是实际数据结果的原因,是因为该数据结果尚未准备好。有时需要一段时间才能计算出报告。除URI外,您还将获得HTTP状态202。这表示请求已被接受,但结果尚未完成。
使用getcode()方法检查HTTP状态。如果得到202,则再次请求URI,直到得到200,然后读取数据结果。
答案 1 :(得分:0)
请首先尝试是否在 curl 上收到响应(确保URL正确)
curl \
-H "Content-Type: application/json" \
-H "X-GDC-AuthTT: temp_token" \