Использование каждой итерации al oop в качестве переменной в другом месте с Python - PullRequest
0 голосов
/ 26 мая 2020

Это побочный проект, которым я занимаюсь, поскольку я пытаюсь изучить Python.

Я пытаюсь написать сценарий python, который будет перебирать диапазон дат и использовать каждую дату, которая возвращается в URL-адресе запроса GET.

URL-адрес использует параметр LastModified и ограничивает запросы GET 24-часовым периодом, поэтому я хотел бы запускать запрос GET для каждого дня с даты начала.

Ниже представлено то, что у меня есть сейчас , основная проблема, с которой я сталкиваюсь, заключается в том, как разделить возвращаемые даты таким образом, чтобы я мог использовать каждую дату отдельно для GET, GET также нужно будет зациклить, чтобы использовать каждую дату, я полагаю.

Любые указатель в правильном направлении будет полезен, так как я пытаюсь узнать как можно больше.


start_date = datetime.date(2020, 1, 1)

end_date = datetime.date.today()

delta = datetime.timedelta(days=1)

while start_date <= end_date:
    last_mod = start_date + delta
    print(last_mod)

    start_date += delta

import requests
from requests.auth import HTTPBasicAuth

vend_key = 'REDACTED'
user_key = 'REDACTED'
metrc_license = 'A12-0000015-LIC'
base_url = 'https://sandbox-api-ca.metrc.com'
last_mod_date = ''

a = HTTPBasicAuth(vend_key, user_key)


def get(path):
    url = '{}/{}/?licenseNumber={}&lastModifiedStart={}'.format(base_url, path, metrc_license, last_mod_date, )
    print('URL:', url)
    r = requests.get(url, auth=a)
    print("The server response is: ", r.status_code)

    if r.status_code == 200:
        return r.json()
    # Would like an elif that is r.status_code is 500 wait _ seconds and try again
    elif r.status_code == 500:
        print("500 error, try again.")
    else:
        print("Error")


print((get('/packages/v1/active')))

Вот пример возврата из текущего скрипта, мне не нужно, чтобы он возвращал каждую дату, поэтому я могу удалить печать, но как я могу сделать каждый l oop с даты его собственная переменная для использования в al oop GET?

2020-01-02
2020-01-03
2020-01-04
2020-01-05
2020-01-06
etc...
etc...
etc...
2020-05-24
2020-05-25
2020-05-26
2020-05-27
URL: https://sandbox-api-ca.metrc.com//packages/v1/active/?licenseNumber=A12-0000015-LIC&lastModifiedStart=2020-05-27
The server response is:  200
[]

Ответы [ 2 ]

1 голос
/ 26 мая 2020

Это супер просто, вам нужно использовать while l oop, который генерирует все эти даты в вашей функции get(). Вот что я имею в виду:

import requests
from requests.auth import HTTPBasicAuth

vend_key = 'REDACTED'
user_key = 'REDACTED'
metrc_license = 'A12-0000015-LIC'
base_url = 'https://sandbox-api-ca.metrc.com'

a = HTTPBasicAuth(vend_key, user_key)


def get(path):
    start_date = datetime.date(2020, 1, 1)
    end_date = datetime.date.today()
    delta = datetime.timedelta(days=1)

    while start_date <= end_date:
        last_mod_date = start_date + delta
        print(last_mod_date)

        start_date += delta
        url = '{}/{}/?licenseNumber={}&lastModifiedStart={}'.format(base_url, path, metrc_license, last_mod_date, )
        print('URL:', url)
        r = requests.get(url, auth=a)
        print("The server response is: ", r.status_code)

        if r.status_code == 200:
            return r.json()
        # Would like an elif that is r.status_code is 500 wait _ seconds and try again
        elif r.status_code == 500:
            print("500 error, try again.")
        else:
            print("Error")


print((get('/packages/v1/active')))
0 голосов
/ 26 мая 2020

Единственное, что вы могли бы сделать, это вызвать функцию get внутри while l oop. Сначала измените функцию get, чтобы она принимала новый параметр date, а затем используйте этот параметр при построении URL-адреса.

Например:

def get(path, date):
    url = '{}/{}/?licenseNumber={}&lastModifiedStart={}'.format(base_url, path, metrc_license, date, )
    ...

И затем вызовите get внутри while l oop.

while start_date <= end_date:
    last_mod = start_date + delta

    get(some_path, last_mod)

    start_date += delta

Это вызовет много запросов GET за короткий период времени, поэтому вы можете быть осторожны, чтобы не перегружать сервер запросами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...