[БЕЗ_ЗВУКА]
[БЕЗ_ЗВУКА] Всем привет.
В этом видео мы освоим практику работы с Web API, посмотрим API различных сайтов,
о которых мы говорили раньше, посмотрим документацию на это API, сравним
разные форматы ответов API и обсудим, можно ли получать данные еще проще.
В предыдущих видео мы получали курс евро с сайта Центробанка,
просто парся его главную страницу.
На самом деле, у Центробанка есть API и у него есть документация.
Напрмер, есть скрипт для получения курсов за определенный день,
куда можно передать какой-то день и получить курсы за него.
Можно не указывать никакой день, и тогда мы получим курсы на текущую дату.
Также есть URL для получения справочника всех валют, курс которых можно посмотреть.
Это нам тоже пригодится в практическом задании по работе с Web API.
[БЕЗ_ЗВУКА] Давайте попробуем получить данные.
Смотрите, мы берем вот этот URL скрипта из документации
по API без указания даты и используем его для запроса.
Тут я уже набрал текст программы.
Вот этот URL.
Именно его мы используем.
Передаем в BeautifulSoup и посмотрим, что мы получаем.
Получаем, собственно говоря, xml тот же самый, который мы видели на странице.
Дальше мы можем, если мы посмотрим на этот xml,
мы можем увидеть какая него структура.
Есть блоки валюта, вот они, для каждой волюты.
А внутри него есть тег CharCode, который содержит название валюты,
и чуть ниже него, то есть это его сиблинг, тег валюта, которая содержит value,
которая содержит курс этой валюты.
Таким образом, мы можем что сделать?
Мы можем найти блок CharCode с текстом eur для
евро и найти ближайший его сиблинг,
сиблинг value, и взять его значение строковое.
Таким образом мы получим курс.
Попробуем.
Вот мы получили курс.
Также если мы знаем, у каждой валюты есть ID.
Вот он.
Если мы знаем айдишник, то мы можем сразу найти этот
ID и внутри него найти value и получить курс.
Это будет еще даже проще.
Вот смотрите.
Мы ищем ID евро.
Ну я просто посмотрел его заранее.
Находим внутри тега валюты тег value и получаем его string.
Результат будет, очевидно, такой же.
Дальше давайте познакомимся с API для получения погоды.
Есть сайт OpenWeatherMap.
Для того, чтобы работать с его API, вот есть документация по API.
У него различные методы,
которые позволяют получить текущую погоду, предсказание на несколько дней.
Ну вот, допустим, есть подробное описание, как получить погоду в каком-то городе.
Есть определенный url, в который надо передать имя города
или имя города плюс имя страны, потому что города,
некоторые города имеют одинаковое название, а находятся в разных странах.
И в качестве ответа мы получаем некоторые данные по погоде,
по времени восхода солнца и так далее.
Чтобы работать с API, нужно иметь ключ,
для этого нужно зарегистрироваться на сайте.
Правда, сайт не проверяет никак e-mail, который вы введете,
поэтому зарегистрироваться достаточно просто.
И зарегистрировавшись, перейти в секцию API keys и получить тот самый ключ,
который мы будем использовать для работы с сайтом.
Давайте попробуем.
Из документации мы узнаём url,
на которой нам надо обращаться для получения данных по городу,
и также какие параметры ему надо передать.
Вот мы берем этот url, добавляем его в requests.get,
также передаем параметры — город Москва.
Передаем вот этот самый наш APPID, который мы получаем API key внутри секции members.
И передаем некоторые режимы, они тоже указаны в документации,
хотим получить ответ в exml, указываем mode exml, это написано документации.
И единицы измерения — метрические,
потому что по умолчанию оно возвращает в имперских.
Передаем exml в BeautifulSoup.
И можем сначала вывести, какой xml мы получаем.
Вот мы получаем через API xml с данными по Москве.
Соответственно, если мы посмотрим внимательно эту xml, мы можем заметить,
что там есть тэг температуры, который указывает температуру.
И внутри у него есть атрибут value,
который позволяет получить конкретные значения температуры.
Если мы выведем его, то мы получим, что текущая температура 3,74 градуса.
Также используя это API, мы можем получить данные не в xml, а в json.
Для этого мы оставляем всё как и прежде, только меняем режим с xml на json.
Это нам позволяет не использовать BeautifulSoup,
а прямо сразу использовать json, что проще.
Давайте точно так же выведем json, который мы получаем.
Вот мы получили те же самые данные с того же сайта, но уже в формате json.
И мы можем точно так же получить… Кстати, интересно — в xml параметры называются
по одному, а в json он передает немножко другие названия полей,
другие названия параметров.
И получить данные из json вот мы можем найти секцию main,
внутри нее есть секция temp, и там то же самое значение.
И соответственно мы обращаемся к словарю,
который получается из json, и получаем ту же самую температуру.
Вот так мы можем работать с API OpenWeatherMap.
А мы можем обращаться к API «ВКонтакте».
У «ВКонтакте» огромное API, отличная документация,
есть какое-то колоссальное количество методов этих API.
Некоторые требует авторизацию, некоторые не требуют.
Можно делать абсолютно всё.
И вот давайте мы посмотрим метод users.get.
Он не требует авторизации на самом деле и позволяет получить данные какого-то
пользователя по его какому-то идентификатору, по айдишнику пользователя.
Кстати, мы знаем, что айдишник номер один у Дурова,
и можно получить там его имя, фамилию и прочие данные профиля открытого.
Давайте посмотрим, что у нас по этому поводу говорит API.
В описании указано, что достаточно обратиться
на URL API vk.com/method и указать метод,
который вот описан как раз в API.
В данном случае мы смотрим метод users.get.
Любой метод можно также приписать в конце урла
API vk.com/method и выполнить этот тот самый метод.
Передаем айдишник пользователя и смотрим, ответ получаем в json,
что тоже очень удобно, здесь авторизация не требуется для этого метода.
Мы берем пользователя с каким-то айдишником.
Это Линдси Стирлинг.
Мы также можем указывать дополнительные параметры,
по умолчанию он передает только имя или фамилию.
Но если мы укажем дополнительные поля,
то мы можем получить гораздо больше информации — ссылки на ее фотографии,
списки там каких-то любимых фильмов, музыки и так далее.
Ну, то есть всю информацию открытого профиля.
Вот так.
Если мы, допустим, передадим в этот метод ID пользователя 1, мы получим,
как я говорил, информацию о Павле Дурове.
Некоторые методы требуют авторизации,
тогда все становится несколько сложнее.
Но есть способы, упрощающие работу с API в «ВКонтакте».
Вообще для любого крупного сайта на самом деле деле не обязательно напрямую работать
с его API через request.
Как правило, есть уже готовая библиотека,
которая внутри себя работает с его API через request, получает данные.
Но оборачивает это в более удобные для нас API.
Так, для «ВКонтакте» есть Python модуль VK.
Его достаточно поставить pip install vk,
и мы можем использовать его для работы с «ВКонтакте».
У меня он уже установлен, смотрите, я импортируют VK, запускаю сессию.
Это есть всё в документации к этому модулю.
И точно так же API users.get получаю users ID 1.
Это будет та же самая информация о Павле Дурове.
Но вот есть другие методы, которые уже требует авторизации,
и с помощью этого модуля сделать их проще.
Мы запускаем сессию, передаем идентификационные данные.
Правда, для того чтобы работать с этим, нам уже надо зарегистрировать
приложение «ВКонтакте», но это всё написано в документации по «ВКонтакте».
Передать логин и пароль и получить авторизованную сессию.
С помощью авторизованной сессии мы, например,
можем получить все группы пользователя.
Вот, я авторизуюсь под собой и хочу получить все свои группы.
С помощью модуля VK это сделать очень легко.
Нам не приходится работать с API напрямую, достаточно использовать этот метод.
Вот я получаю список своих групп.
Достаточно просто.
Итоги занятия.
Мы попробовали на практике различные API, убедились,
что это в принципе достаточно просто.
Они возвращают в xml или в json.
Некоторые API ничего не требуют для работы с собой, как API Центробанка.
Некоторые, как OpenWeatherMap, требуют какого-то ключа,
приложения, которое можно получить, зарегистрировавшись на нем.
А часть API «ВКонтакте» может использоваться тоже очень просто без
авторизации, часть API требует авторизации.
И для всех крупных каких-то API распространенных уже, конечно же,
есть готовые модули, которые с ними работают.
И вы можете на работать с API напрямую, а работать с этими модулями.
Они скрывают от вас всю техническую составляющую, и по сути вы используете
как любой другой модуль Python, всё становится достаточно просто.
Таким образом, мы научились извлекать данные различными способами,
и в дальнейшем у нас будет практика по получению и хранению этих данных.
[ЗВУК] [БЕЗ_ЗВУКА]