Проблемы с получением информации из API - PullRequest
0 голосов
/ 02 июля 2018

К сожалению, я не могу предложить воспроизводимый набор данных. Я пытаюсь подключиться к 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 и пробую это, он всегда терпит неудачу в первый раз. Если я попытаюсь запустить его снова, он будет работать. Я не знаю почему. Поскольку я пытаюсь запустить его по расписанию, он успешно запускается в течение нескольких дней пару раз в день, а затем просто перестает работать.

Ответы [ 2 ]

0 голосов
/ 03 июля 2018

Причина, по которой вы иногда получаете URI для результата данных, а не фактический результат данных, заключается в том, что результат данных еще не готов. Иногда для вычисления отчета требуется некоторое время. Помимо URI вы также получаете HTTP-статус 202. Это означает, что запрос был принят, но результат еще не получен.

Проверка статуса HTTP с помощью метода getcode (). Если вы получите 202, запросите URI еще раз, пока не получите 200, а затем прочитайте результат данных.

0 голосов
/ 03 июля 2018

Сначала попробуйте, если получите ответ на 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"

...