вызов функции Python (библиотека requests)
Всем привет! Помогите, пожалуйста, разобраться в вызове функций на Python. у меня есть скрипт, по сути набор функций и, если правильно выражаюсь, результат выполнения одной функции влияет на выполнение другой. первая функция - это получение токена
def get_token():
url = 'https://stata.com/api/sign_in'
data = {"login":"avokado","password":"green"}',
}
response = requests.post(url, data=data)
token = response.json()
token = token['access_token']
return token
дальше я собираю url адрес, по которому будут доступны данные
def get_url(token):
base_url = 'https://api.stata.com/access_token='
url = [
base_url,
token,
]
url = ''.join(url)
return url
при вызове первой функции
get_token()
я получаю token (70ddf80a4528436fe28223bbahe68fe150d30309) а при вызове второй функции get_url(token) я получаю адрес: 'https://api.stata.com/access_token=token' если я правильно понимаю результат вызова второй функции должен быть 'https://api.stata.com/access_token=70ddf80a4528436fe28223bbahe68fe150d30309' ???
ну и получается третья функция
def get_data(url):
res = requests.get(url=url)
data = res.json()
return data
с ней также возникает вопрос, точно понимаю, что вот так не сработает
get_data(url)
Благодарю за любую помощь, ответы, направление на ресурсы
Ответы (1 шт):
Если в 2‑х словах, то вот так как-то.
datetime использовал для демонстрации возможностей так сказать.
Сборку url через Url сделал для наглядности. Мне, к примеру так удобней с динамическим набором параметров работать. Тем более когда их много
from datetime import datetime
from urllib3.util import Url
from urllib.parse import urlencode
import requests
data = {"login":"avokado","password":"green"}
response = requests.get(
'https://api.some_site.com/auth',
data=data
)
# token = 'ad721950597208b6e79e2089a01e41fc0b9707b6'
token = response.json(object_hook=lambda x: x.get('access_token'))
group_id = '6030d723e9fa83692542a70d'
date_start = datetime(2022, 5, 10, 21, 0, 0)
date_end = datetime(2022, 5, 14, 21, 0, 0)
url = Url(
scheme='https',
host='api.some_site.com',
path=f'/api/nr/group/{group_id}/stats',
query=urlencode(
{
'api_version': '1.1',
'access_token': token,
# 'date_end': '2022-05-14T21:00:00.000Z',
# 'date_start': '2022-05-10T21:00:00.000Z',
'date_end': date_end.isoformat(),
'date_start': date_start.isoformat(),
'granularity': 'day'
},
safe=':'
)
)
response = requests.get(url)
Если дату через isoformat не схвает, отформатируйте через strftime
# Ну или просто
response = requests.get(
f'https://api.some_site.com/api/nr/group/{group_id}/stats',
params={
'api_version': '1.1',
'access_token': token,
# 'date_end': '2022-05-14T21:00:00.000Z',
# 'date_start': '2022-05-10T21:00:00.000Z',
'date_end': date_end.isoformat(),
'date_start': date_start.isoformat(),
'granularity': 'day'
}
)