Connect with us

Обучение

Заметки Python #13: Работа с API и запуск локального сервера

1 195

 

В этом выпуске мы поговорим о библиотеке request, работой с API и запустим локальный сервер

В прошлый раз мы, чтобы получить данные из кода, копировали HTML-элемент вручную в среду разработки. Сегодня мы попробуем сделать это с помощью модуля request. Он не встроенный, его нужно установить отдельно, как и BeautifulSoup

[code]

import requests

zapros = requests.get(«https://digital2.ru»)
code = zapros.text

print(zapros)
print(code)

[/code]

 

Результат:

Работа с API


Application Programming Interface (API) — интерфейс, созданный специально для того, чтобы машине (компьютеру) было проще считать нужную информацию с сайта. Т.е. можно спарсить код, где вставляется погода с помощью регулярных выражений или BeautifulSoup. но лучше (и правильней) сделать это с помощью API

С помощью API удобно получать именно данные, а не какой-либо участок кода с ними. В API меньше кода — всё собрано в одном месте. Нет нужды парсить это регулярными выражениями. И API всегда будет работать, даже если источник поменял на сайте HTML-код.

Сейчас мы отправим запрос на вызов API сайта https://openweathermap.org/ и получим результат в виде JSON (текстовый формат обмена данными, основанный на JavaScript). Не забывайте импортировать модуль json при этом

[code]

import requests
import json

link = «http://samples.openweathermap.org/data/2.5/weather?q=London,uk&appid=b6907d289e10d714a6e88b30761fae22»

response = requests.get(link) # отправляем запрос на получение кода страницы
text = response.text # в переменной текст у нас код страницы (обычный текст)

# получаем код в виде объекта (словаря)
data = json.loads(text)

# чтобы получить значение погоды необходимо использовать подсловарь main

print (data [«main»] [«temp»])

[/code]

 

Результат (здесь температура указана в кельвинах)

Как запустить свой сервер?

Поднять свой локальный сервер можно с помощью библиотеки flask. Её тоже нужно отдельно устанавливать — она не встроенная.

 

[code]

from flask import Flask

application = Flask (__name__) # здесь мы задаем имя нашего файла

@application.route («/») # указываем путь, где будут создаваться страницы. В качестве аргумента у нас /

# создаем функцию, которая генерирует нам страницу

def index ():
return «Санек, проставляйся»

# Запускаем сайт только тогда, когда запускаем этот файл
if __name__ == «__main__»:
application.run ()

[/code]

 

Результат — сервер запущен:

Аргументы в web-запросах

Веб-запрос может содержать в себе один или несколько аргументов. С помощью Python мы можем анализировать и работать с этими данными. Например, узнать, как «проставится» друг на свой день рождения

Создаем простую html-страницу с формой запроса:

[code]

<!DOCTYPE html>
<html lang=»en»>
<head>
<meta charset=»UTF-8″>
<title>Чекаем бухлишко</title>
</head>
<body>
<form>
<input type = «text» name = «whisky» placeholder=»Че бухаем, поцоны»>
<button>Чекаем</button>
</form>
</body>
</html>

[/code]

Важное замечание: при использовании библиотеки flask, html-файлы нужно создавать в подкаталоге templates, иначе будет ошибка jinja2.exceptions.TemplateNotFound: home.html

Далее запустим сервер и откроем index.html. Попытаемся что-либо ввести. Мы увидим, что сайт передает наш ответ в аргументе Key

Если мы вводим неправильный ответ, то увидим:

Если мы угадали, то

Как выглядит проверка, средствами скрипта на питон. Давайте напишем его:

[code]

import requests

link = «http://127.0.0.1:5000/answer?key=» # копируем ссылку с аргументом.

answers = [‘Vodka’, ‘Beer’, ‘Lawsons’] # создадим список потенциальных ответов

for n in answers: # перебираем все варианты из списка
checklink = link + str(n) #добавляем элемент к нашему линку, чтобы было answer?key=n
response = requests.get(checklink).text #получаем текст этой страницы, записываем ей в переменную response
if response == «Не Не, не будем это пить»:
print(«Не, это не оно»)
else:
print(«Угадал»)

[/code]

 

Результат:

Свой Aviasales

Aviasales — один из лучших агрегаторов авиабилетов, сделанный нашими соотечественниками. Помимо прекрасного сервиса, aviasales предоставляет доступ к своим API, а это значит мы можем сделать свой сервис по поиску цен на различные направления

Конкретно нас интересует API календаря цен. Прочитать про него можно здесь. В документации мы получим пример запроса API и применим его на практике. Запрос без аргументов выглядит так: http://min-prices.aviasales.ru/calendar_preload

[code]

data = json.loads(requests.get(link).text)

# Выводим на экран только элементы массива

prices = (data [«best_prices»]) # все значения лучшей цены.
bestofthebest = sorted(prices, key=lambda k: k[‘value’]) # сортировка по самому дешевому билету
datasorted = [bestofthebest[0]] # самый дешевый — первый элемент массива
returndate = min(datasorted, key=itemgetter(‘return_date’))[‘return_date’]

print(prices) #все лучше цены
print(bestofthebest) # самый дешевый
print(returndate) # когда возвращаемся, если берем самый дешевый билет

[/code]

 

Результат:

 

Как мы видим, в результате мы получаем данные формата json с лучшей ценой на конкретные направления (в нашем случае это — Москва-Сыктывкар)

Нажмите что бы оставить комментарий

Ответить

Ваш адрес email не будет опубликован.

Лучшие сервисы стриминга музыки в 2019 году

Сервисы

Телевидение Wink Ростелеком: Samsung LG, Sony, Phillips, Android TV

Ростелеком

Ноутбуки Asus не видят жесткий диск. Автоматический вход в BIOS при старте

Гаджеты

LG WEB OS: приложения, обновления, настройка, проблемы со звуком

Гаджеты

Advertisement Яндекс.Метрика

Digital2.ru - Тренды, Профессии IT, WEB- разработка, Вакансии, Автоматизация, Цифровая экономика
Свободное копирование и распространение материалов с сайта Digital2.ru
разрешено только с указанием активной ссылки на Digital2 как на источник.
Copyright 2018 - 2020 © All rights reserved

OPGIO.COM

Connect