从 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" \

"https://secure.gooddata.com/gdc/projects/omaes11n7jpaisfd87asdfhbakjsdf87adfbkajdf/execute/raw/876dfa8f87ds6f8fd6a8ds7f6a8da8sd7f68as7d6f87af?q=as8d7f6a8sd7fas8d7fa8sd7f6a8sdf7"

您有时会得到数据结果的 URI 而不是实际数据结果的原因是数据结果尚未准备好。有时需要一段时间来计算报告。除了 URI,您还会获得 HTTP 状态 202。这意味着请求已被接受,但结果尚未完成。

使用 getcode() 方法检查 HTTP 状态。如果得到202,再次请求URI,直到得到200,再读取数据结果。