К сожалению, я не могу предложить воспроизводимый набор данных. Я пытаюсь подключиться к API и извлечь данные отчета из GoodData. Мне удалось успешно подключиться и вытащить отчет, но иногда не удается. В сценарии есть определенный момент, что он не работает, и я не могу понять, почему он работает иногда, а не другие.
подключиться к gd api, получить временный токен
Я создал следующую функцию для загрузки отчета. Параметры функции - это идентификатор проекта в gooddata, временный токен, который я получил от входа в систему / аутентификации, имя файла, который я хочу, чтобы он вызывался, и 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 привязывается к обычному URL-адресу gooddata вместе с заголовками для извлечения информации в текстовый формат, который затем преобразуется в csv / dataframe.
По какой-то причине фрейм данных возвращается, просто превращая URI в фрейм данных вместо того, чтобы извлекать данные из ссылки. Последнее, что я нахожу странным, это то, что когда я запускаю Spyder и пробую это, он всегда терпит неудачу в первый раз. Если я попытаюсь запустить его снова, он будет работать. Я не знаю почему. Поскольку я пытаюсь запустить его по расписанию, он успешно запускается в течение нескольких дней пару раз в день, а затем просто перестает работать.