Получаем число с Random.org API на Python
У многих веб-сервисов есть свой HTTP API - интерфейс, позволяющий обмениваться с их серверами данными. В этой статье разберёмся, как делать запросы из Python без сторонних библиотек. Рассматривать мы это будем на примере небезызвестного Random.org - теперь никто нас не упрекнёт, что рандом в нашей программе "нечестный")
Необходимая информация об API представлена по ссылке api.random.org
Вот на этой странице вы сможете получить токен для API - просто введите свой email и он придёт в письме.
Мы будем пользоваться самым базовым API методом - generateIntegers, который возвращает случайные числа от min до max.
Полный код с подсветкой можете найти на Pastebin
Для начала, импортируем всё необходимое. А нужно нам немного: HTTPSConnection из http.client для того, чтобы отсылать запросы; dumps и loads из json чтобы кодировать и декодировать данные в JSON, который используется этим API.
from http.client import HTTPSConnection from json import dumps, loads API_TOKEN = 'xxx'# Ваш токен
Теперь давайте создадим словарь с данными для запроса и заголовками. Эти 2 словаря мы запакуем в JSON: теперь они готовы для отправки на сервер.
""" Больше о формате запроса https://api.random.org/json-rpc/1/introduction """ request_data = { # Тело запроса 'jsonrpc': '2.0', 'method': 'generateIntegers', 'params': { 'apiKey': API_TOKEN, 'min': 1, # Нижняя граница рандома 'max': 100, # Верхняя граница 'n': 1, # Количество запрашиваемых чисел }, 'id': 1, } encoded_data = dumps(request_data) headers = { 'Content-Type': 'application/json-rpc', # Тип запроса } encoded_headers = dumps(headers)
Теперь непосредственно к обмену данными. Установим соединение и отправим данные:
connection = HTTPSConnection('api.random.org') connection.request('GET', '/json-rpc/1/invoke', encoded_data, headers)
Получим ответ и распакуем его из JSON:
response = connection.getresponse() response_data = loads(response.read().decode())
Если запрос прошёл успешно, то в response_data['result']['random']['data'] будет лежать массив запрошенных чисел. Запрашивали мы одно число, его и выведем на экран.
print(response_data['result']['random']['data'][0])
Вот так вот просто можно обмениваться данными с любым HTTP API, просто надо внимательно читать описания методов и формата, который требуется.
Жду вас в группе SnakeBlog