从 API 检索信息时出现问题
Issues retrieving information from API
很遗憾,我无法提供可重现的数据集。我正在尝试连接到 API 并从 GoodData 中提取报告数据。我已经能够成功连接并提取报告,但偶尔失败。脚本中有一个特定点失败了,我无法弄清楚为什么它有时有效而其他无效。
连接到 gd api,获取临时令牌
我创建了以下功能来下载报告。函数参数是 gooddata 中的项目 id,我从日志记录 in/authenticating 收到的临时令牌,我希望调用它的文件名,以及我从调用特定项目和报告 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,连同 headers 将信息提取为文本格式,然后将其转换为 csv/dataframe。
出于某种原因,dataframe 回来只是将 uri 变成一个 dataframe,而不是从 link 中提取数据。我发现的最后一件事很奇怪,当我启动 Spyder 并尝试这个时,它总是第一次失败。如果我再次尝试 运行ning,它将起作用。我不知道为什么。因为我正在尝试 运行 按计划进行此操作,所以它成功地 运行 每天几次,然后就开始失败了。运行
如果您在 curl 上收到回复,请先尝试(确保 URL 正确)
curl \
-H "Content-Type: application/json" \
-H "X-GDC-AuthTT: temp_token" \
您有时会得到数据结果的 URI 而不是实际数据结果的原因是数据结果尚未准备好。有时需要一段时间来计算报告。除了 URI,您还会获得 HTTP 状态 202。这意味着请求已被接受,但结果尚未完成。
使用 getcode() 方法检查 HTTP 状态。如果得到202,再次请求URI,直到得到200,再读取数据结果。
很遗憾,我无法提供可重现的数据集。我正在尝试连接到 API 并从 GoodData 中提取报告数据。我已经能够成功连接并提取报告,但偶尔失败。脚本中有一个特定点失败了,我无法弄清楚为什么它有时有效而其他无效。
连接到 gd api,获取临时令牌
我创建了以下功能来下载报告。函数参数是 gooddata 中的项目 id,我从日志记录 in/authenticating 收到的临时令牌,我希望调用它的文件名,以及我从调用特定项目和报告 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,连同 headers 将信息提取为文本格式,然后将其转换为 csv/dataframe。
出于某种原因,dataframe 回来只是将 uri 变成一个 dataframe,而不是从 link 中提取数据。我发现的最后一件事很奇怪,当我启动 Spyder 并尝试这个时,它总是第一次失败。如果我再次尝试 运行ning,它将起作用。我不知道为什么。因为我正在尝试 运行 按计划进行此操作,所以它成功地 运行 每天几次,然后就开始失败了。运行
如果您在 curl 上收到回复,请先尝试(确保 URL 正确)
curl \
-H "Content-Type: application/json" \
-H "X-GDC-AuthTT: temp_token" \
您有时会得到数据结果的 URI 而不是实际数据结果的原因是数据结果尚未准备好。有时需要一段时间来计算报告。除了 URI,您还会获得 HTTP 状态 202。这意味着请求已被接受,但结果尚未完成。
使用 getcode() 方法检查 HTTP 状态。如果得到202,再次请求URI,直到得到200,再读取数据结果。