Наконец, все готово. Запустим программу на ESP32, и в окне Serial monitor мы можем увидеть количество друзей у заданного нами пользователя.
Может возникнуть вопрос, как вывести не только число пользователей, но и более личные данные, например число входящих сообщений. Увы, такие запросы требуют аутентификации (логина) по имени и паролю, и так просто, одним запросом их не сделать. Желающие могут изучить документацию к API самостоятельно на сайте https://vk.com/dev/manuals.
Самостоятельная работа: вывести число друзей на OLED-экран. Дополнительно можно добавить звуковой сигнал, который будет срабатывать, когда число друзей увеличивается.
3.7 Выводим число подписчиков, просмотров и лайков в Youtube
У популярных ведущих youtube-каналов иногда можно увидеть на столе устройство, показывающее число подписчиков канала. Сделаем такое же, с платой ESP32 это не сложно. Те, кто читал предыдущую главу, уже примерно представляют что нужно делать. Действительно, принцип точно такой же. Приступим.
Шаг-1. Узнаем идентификатор канала.
Сначала нужно узнать идентификатор канала. Это самое простое, кликаем на любой популярный канал в youtube и смотрим на адресную строку в браузере.
Идентификатор UCzz4CoEgSgWNs9ZAvRMhW2A в заголовке - это и есть идентификатор канала, запомним его.
Шаг-2. Находим API для получения информации
Функцию для получения информации о канале можно найти на странице для разработчиков https://developers.google.com/youtube/v3/docs/channels/list (да, там все на английском, английский - это язык современной науки и технологии, и его надо знать). Там же есть примеры использования.
Нужный нам запрос имеет следующий вид:
https://www.googleapis.com/youtube/v3/channels?id=ID&part=statistics&key=KEY
Как получить ID канала, мы уже знаем. С ключом чуть сложнее. Ключ для доступа к API бесплатный, получить его можно на странице https://console.developers.google.com в разделе “учетные данные”. Сам ключ - это обычная текстовая строка, которая выглядит примерно так: AIzaSyC26UJw-ubU6N6ukrbZ_C_nBaxxxxxxxxx.
Инструкция по получению ключа также есть на странице подсказки google.
Go to the API Console.
From the projects list, select a project or create a new one.
If the APIs & services page isn't already open, open the left side menu and select APIs & services.
On the left, choose Credentials.
Click Create credentials and then select API key.
Я специально оставлю ее как есть без перевода, чтобы еще раз подчеркнуть важность знания английского в современной разработке. URL целиком выглядит так:
https://www.googleapis.com/youtube/v3/channels?id=UCzz4CoEgSgWNs9ZAvRMhW2A&part=statistics&key=AIzaSyC26UJw-ubU6N6ukrbZ_C_nBaxxxxxxxxx
Здесь UCzz4CoEgSgWNs9ZAvRMhW2A - это идентификатор канала, а AIzaSyC26UJw-ubU6N6ukrbZ_C_nBaxxxxxxxxx - это ключ доступа. Мы можем вставить эту строку в браузер, и получить информацию о канале.
Как можно видеть, нужные нам данные хранятся в разделе items/statistics. Запомним это, когда будем делать обработку json.
Шаг-3. Чтение данных
Здесь мы повторяем фактически то же, что мы делали для чтения с сайта “ВКонтакте”.
Код для запроса к сайту:
const char *url = "https://www.googleapis.com/youtube/v3/channels?id=UCzz4CoEgSgWNs9ZAvRMhW2A&part=statistics&key=XXXXX";
HTTPClient http;
http.begin(url);
int httpCode = http.GET();
if (httpCode > 0) {
Serial.print("httpCode: "); Serial.println(httpCode);
String json = http.getString();
} else {
Serial.println("HTTP request error");
Serial.println(httpCode);
}
Кстати, коды ошибок сервера - очень важны для анализа, если что-то не так. Например, код 404 говорит о том, что страница не найдена, 403 - “доступ запрещен” и пр. Полный список можно почитать в Википедии.
Шаг-4. Обработка Json
Еще раз внимательно посмотрим на json, который мы получили:
{
"kind": "youtube#channelListResponse",
"items": [
{
"kind": "youtube#channel",
"statistics": {
"viewCount": "30177125",
"commentCount": "313",
"subscriberCount": "251966",
"videoCount": "301"
}
}
]
}
Как можно видеть, items - это массив элементов, т.к. он содержит скобки []. Внутри есть объект statistics, а внутри него нужное нам поле subscriberCount.
Код чтения Json будет выглядеть вот так:
DynamicJsonBuffer jsonBuffer(16*1024);
JsonObject& parsed = jsonBuffer.parseObject(json);
if (parsed.success()) {
JsonArray& items = parsed["items"];
if (items.size()> 0) {
JsonObject& statistics = items[0]["statistics"];
long subscriberCount = statistics["subscriberCount"];
Serial.print("Number of subscribers: ");
Serial.println(subscriberCount);
}
} else {
Serial.println("Json parsing error");