Читать «Цифровая электроника для начинающих» онлайн - страница 54

Дмитрий Витальевич Елисеев

"id": "UCzz4CoEgSgWNs9ZAvRMhW2A",

"statistics": {

"viewCount": "30872448",

"commentCount": "313",

"subscriberCount": "258797",

"hiddenSubscriberCount": false,

"videoCount": "303"

}

}

]

}

Фигурными скобками обозначается элемент dictionary, доступ к элементам которого осуществляется через квадратные скобки - data["items"] вернет раздел items. Дальше смотрим на сам items: квадратные скобки в json обозначают массив, таким образом "items": [{... }] это массив из одного элемента типа dictionary, обратиться к нему можно как data["items"][0]. Дальше все аналогично, внутри есть еще один вложенный dictionary statistics, внутри него есть поле subscriberCount. Кстати, что такое dictionary, хорошо видно по полю statistics. Это так называемый “словарь” из парных элементов вида “имя”-”значение”, например { "viewCount": "30872448", "commentCount": "313", "subscriberCount": "258797" }.

Формат json сейчас является де-факто стандартом в web, за счет возможности описывать сложные иерархические структуры данных. Примеры разных файлов json желающие могут посмотреть на http://json.org/example.html. Поэтому при желании получать данные с различных веб-сервисов, нужно будет понимать как этот формат устроен.

Кстати, для отладки удобно выводить json прямо из Python, для этого достаточно стандартной функции print:

data = json.load(urllib2.urlopen(url))

print data["items"]

print data["items"][0]

print data["items"]["statistics"]

Так легко видеть, не ошиблись ли мы где-нибудь с полями данных.

4.9. Выходим в Web: запускаем свой сервер

Теперь рассмотрим обратную задачу - запустим свой сервер, который пользователь сможет открыть в браузере. Разумеется, Raspberry Pi имеет полноценную ОС Linux, и здесь можно запустить хоть Apache, хоть FTP. Но это не так интересно - мы запустим собственный сервер, который напишем на языке Python.

Для начала - самое простое, чего в 95% случаев будет вполне достаточно. Если мы хотим просто дать пользователю доступ к текущей папке, то в консоли достаточно ввести команду:

python -m SimpleHTTPServer 8000

Пользователь сможет зайти из браузера и увидеть (и скачать) любой файл:

Если нужно что-то посложнее, например управлять каким-либо устройством, придется написать свой код.

Рассмотрим минимальный пример работающего web-сервера на Python. Для примера, будем управлять светодиодом, как и в случае c ESP32. Но в отличие от ESP32, Raspberry Pi полноценно может работать с файлами, так что хранить HTML прямо в коде не требуется, просто сохраним файл как index.html.

<html>

<head><title>Raspberry Pi server</title></head>

<body>

Turn <a href="/H">LED ON</a><br>

Turn <a href="/L">LED OFF</a><br>

</body>

</html>

Сам код сервера будет весьма прост. Естественно, это минимальный пример, реальный веб-сервер может поддерживать практически все современные технологии - POST и GET-запросы, Javascript и пр. Полет фантазии тут неограничен. Нам же будет достаточно следующего кода:

from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer