Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия |
products:laboratory_iot:exp69 [2020/06/15 16:08] – [Программный код эксперимента] labuser29 | products:laboratory_iot:exp69 [2024/12/16 15:23] (текущий) – labuser30 |
---|
===== Эксперимент 69. Получение данных с интернет- сервиса ===== | ===== Эксперимент 69. Получение данных с интернет-сервиса ===== |
| |
Устройства интернета- вещей не только отправляют данные в интернет, но и получают их оттуда. В интернете есть ресурсы, предназначенные для получения информации человеком- обычныйе сайты. Но кроме того, есть интернет- ресурсы для получения данных другими программами — веб-сервисы. Их главное отличие от обычного сайта в том, что они предоставляют данные в удобном для программ виде, без излишеств. Без визуального оформления, только чистые данные в определенном формате. Форматы предоставления данных могут быть разными. | Устройства интернета-вещей не только отправляют данные в интернет, но и получают их оттуда. В интернете есть ресурсы, предназначенные для получения информации человеком — обычные сайты. Но кроме того, есть интернет-ресурсы для получения данных другими программами — веб-сервисы. Их главное отличие от обычного сайта в том, что они предоставляют данные в удобном для программ виде, без излишеств. Без визуального оформления, только чистые данные в определенном формате. Форматы предоставления данных могут быть разными. |
| |
Попробуем поработать с веб- сервисом. Для получения погодных данных хорошо подходит веб- сервис weatherbit.io. Основные данные о погоде данный сервис предоставляет бесплатно до 500 запросов в сутки, но необходимо пройти простую процедуру регистрации. | Попробуем поработать с веб-сервисом. Для получения погодных данных хорошо подходит веб-сервис weatherbit.io. Основные данные о погоде данный сервис предоставляет бесплатно до 500 запросов в сутки, но необходимо пройти простую процедуру регистрации. |
| |
Регистрация происходит на странице [[https://www.weatherbit.io/account/create]] | Регистрация происходит на странице [[https://www.weatherbit.io/account/create]] |
| |
Ставим галочку **Я не робот** и нажимаем на кнопку **Submit**. | Ставим галочку **Я не робот** и нажимаем на кнопку **Submit**. |
| |
| Если выводится сообщение **Signup blocked due to suspected spam. If you are a human, please use another VPN / IP address.** нужно попробовать включить VPN. |
| |
Если форма заполнена правильно, то увидим сообщение **Thank you for registering! You may now login to your account, and access your API Key!**, которое сообщает нам, что регистрация пройдена. На этой странице вводим логин и пароль чтобы авторизоваться в сервисе. | Если форма заполнена правильно, то увидим сообщение **Thank you for registering! You may now login to your account, and access your API Key!**, которое сообщает нам, что регистрация пройдена. На этой странице вводим логин и пароль чтобы авторизоваться в сервисе. |
</code> | </code> |
| |
Функция http_get предназначена для формирования запроса к веб- серверу. В качестве параметров она принимает адрес веб страницы (url) и порт (по умолчанию 80, стандартный для веб- страниц). | Функция http_get предназначена для формирования запроса к веб-серверу. В качестве параметров она принимает адрес веб страницы (url) и порт (по умолчанию 80, стандартный для веб-страниц). Функция возвращает данные, полученные от веб сервиса. |
| |
Здесь необходимо ввести свой ключ доступа к сервису weatherbit.io, который был получен после регистрации. Moscow,RU - это название города, по которому мы хотим получить погодные данные. В нашем случае это Москва. Названия для других городов можно получить на сайте сервиса [[https://www.weatherbit.io/api]] | Здесь необходимо ввести свой ключ доступа к сервису weatherbit.io, который был получен после регистрации. Moscow,RU - это название города, по которому мы хотим получить погодные данные. В нашем случае это Москва. Названия для других городов можно получить на сайте сервиса [[https://www.weatherbit.io/api]] |
cityName = 'Moscow,RU' | cityName = 'Moscow,RU' |
</code> | </code> |
| |
| Отправляем запрос сервису на предоставления данный о текущей погоде |
| <code python[enable_line_numbers="2", start_line_numbers_at="53"]> |
| json_data = http_get('http://api.weatherbit.io/v2.0/current?city=' + cityName + '&key=' + apiKey) |
| </code> |
| |
| Запрос отправляется на сервер сервиса, и он высылает ответ, который мы получаем в переменной ''json_data''. Ответ от этого сервиса приходит в формате JSON. |
| |
| <WRAP center round info 60%> |
| [[https://ru.wikipedia.org/wiki/JSON|Подробнее о JSON]] |
| </WRAP> |
| |
| В переменной ''json_data'' мы получили просто текстовую строку в формате JSON в которой находится информация. Чтобы мы могли работать с ней как с данными нам необходимо преобразовать ее в структуру данных Python. |
| <code python[enable_line_numbers="2", start_line_numbers_at="54"]> |
| data = json.loads(json_data) |
| </code> |
| |
| Теперь в переменной ''data'' находится структура данных к которой мы можем обращаться. Выведем ее в терминал, чтобы посмотреть что в ней находится |
| <code python[enable_line_numbers="2", start_line_numbers_at="55"]> |
| print(data) |
| </code> |
| |
| В нашем случае выводится строка (в вашем случае данные будут другими так как запрос будет сделан в другое время и будет другая погода) |
| <code> |
| {'count': 1, 'data': [{'wind_cdir_full': 'south', 'weather': {'code': '804', 'icon': 'c04d', 'description': 'Overcast clouds'}, 'datetime': '2020-06-15:13', 'temp': 23.9, 'station': 'E8051', 'elev_angle': 39.93, 'app_temp': 23.4, 'state_code': '48', 'wind_dir': 183, 'last_ob_time': '2020-06-15T12:46:00', 'solar_rad': 125, 'sunrise': '00:43', 'slp': 1006.8, 'pod': 'd', 'vis': 5, 'pres': 992.6, 'wind_cdir': 'S', 'wind_spd': 1.34, 'ghi': 625.24, 'ts': 1592225160, 'snow': 0, 'uv': 6.73402, 'clouds': 100, 'city_name': 'Moscow', 'precip': 0, 'timezone': 'Europe/Moscow', 'country_code': 'RU', 'dni': 824.53, 'dhi': 102.47, 'sunset': '18:15', 'ob_time': '2020-06-15 12:46', 'h_angle': 40, 'dewpt': 8.7, 'aqi': 42, 'lat': 55.7522, 'rh': 38, 'lon': 37.6156}]} |
| </code> |
| |
| Это и есть данные, полученные от сервиса. В них много различных параметров, даже больше, чем нам будет нужно. Попробуем выбрать из них температуру и вывести ее в терминал |
| <code python[enable_line_numbers="2", start_line_numbers_at="56"]> |
| print(data['data'][0]['temp']) |
| </code> |
| |
| В нашем случае выводится 23.9 |
| |
| Таким образом мы только что запросили данные о текущей погоде в городе Москва у интернет-сервиса weatherbit.io |
| |
| <WRAP center round info 60%> |
| Подробное описание данных, которые возвращает сервис можно почитать на [[https://www.weatherbit.io/api/weather-current|странице документации]] |
| </WRAP> |
| |