Ошибка HTTP 400 Неверный запрос, вызывающий api с python

#python #api

Вопрос:

 
list = [i for i in range(2321)]
for i in range(0, len(my_list), 100):
    my_list[i:i 100]
    query_get_data_by_dea_schedule = 'https://api.fda.gov/drug/ndc.json?search=dea_schedule:"{}"amp;limit={}'.format('CII', i)
    print(query_get_data_by_dea_schedule)
    data_df = pd.DataFrame(pd.read_json(path_or_buf=query_get_data_by_dea_schedule, orient='values', typ='series', convert_dates=False)['results'])
    all_data_df = all_data_df.append(data_df)

 

Я пытаюсь запустить это, чтобы получить данные для 2321 строки, которые поступают из Управления по санитарному надзору за качеством пищевых продуктов и медикаментов для пунктов списка 3. Мне нужно читать по 100 за раз, потому что это предел. Я не уверен, что я здесь делаю не так. Кроме того, правильно ли я читаю это 100 раз за раз, чтобы сохранить его в кадре данных? Он останавливается и выдает мне : HTTPError: Ошибка HTTP 400: Неверный запрос. заранее спасибо.

Комментарии:

1. Были ли вы задушены поставщиками API?

2. в этом ли проблема ? Я не знаю

3. всегда помещайте полное сообщение об ошибке (начинающееся со слова «Обратная связь») в вопрос (не комментарий) в виде текста (не скриншот, не ссылка на внешний портал). Есть и другая полезная информация.

4. с чем вы пытаетесь это сделать my_list[i:i 100] ? Это бесполезно.

5. возможно, разделить код на более простые строки — т. Е. запустите pd.read_json() в отдельной строке — и используйте print() , чтобы увидеть, для каких значений вы получаете ошибку.

Ответ №1:

Основываясь на документации, которую вы должны использовать skip вместо limit — и использовать всегда limit=100 — как limit=100amp;skip=0 , limit=100amp;skip=100 , limit=100amp;skip=200 limit=100amp;skip=300 , и т. Д.

Минимальный код, который работает для меня:

 import pandas as pd

url = 'https://api.fda.gov/drug/ndc.json?search=dea_schedule:"{}"amp;limit={}amp;skip={}'
all_data_df = []

limit = 100
for skip in range(0, 2321, limit):
    query = url.format('CII', limit, skip)
    print('query:', query)
    data = pd.read_json(query, orient='values', typ='series', convert_dates=False)
    data = data['results']
    all_data_df.append(data)
    
print(all_data_df)
 

Комментарии:

1. Большое спасибо