Ничего не найдено :(
    В гостях у Самоделкина! » Темы » Советы » Парсер данных из интернета на Arduino

    Парсер данных из интернета на Arduino



    Всем привет, в данной самоделки я покажу как можно сделать дешевый, простой, но в то же время эффективный парсер данных из интернета на базе платформы Arduino с Wifi модулем. С помощью нее, легко можно узнать практически любую информацию из сети за считанные секунды. Это может быть кол-во подписчиков на youtube, кол-во входящих сообщений Вконтакте, опубликовали ли самоделку и т.д.

    Вот простая схема, которую необходимо собрать.



    Перед началом чтения статьи, я бы рекомендовал посмотреть видео, где показываются возможности самоделки и ее практическое применение.



    Нам потребуется:
    -Платформа на базе семейства ESP, в моем случаи и это WeMos D1 R2

    -LCD дисплей для вывода информации, у меня популярный LCD 1602 с модулем I2C
    -провода и кнопка (хотя она возможно вам и не понадобится)
    А так же
    -USB кабель (для загрузки прошивки)
    -WiFI точка доступа
    -- Необязательное
    — собственный сайт и домен (для обработки сложных запросов популярных сайтов)

    Перед тем, как приступить к следующим этапам, убедитесь что среда, через которую вы будете загружать скетч поддерживается семейство микроконтроллеров ESP. Для настройки Arduino IDE, перейдите на habr и следуйте инструкциям по установке. Ссылка:
    https://habr.com/ru/post/371853/


    Подробное описание изготовления:
    Условно этапы можно разделить на 2 части.
    1 Сборка "железной" части
    2 Загрузка программы и ее настройка

    Сборка первого этапа заканчивается очень быстро. Собираем ее по изображению выше и все.
    Модуль дисплея
    VCC - 5V
    GND - GND
    SCL - D15
    SDA - D14

    Buttun - GND to D7

    Все эти настройки можно изменить и в самом скетче, если у вас другая платформа или версия микроконтроллера.

    Второй этап немного сложней, открываем Arduino IDE, выбираем соответствующую плату и указываем порт на котором она находится. В моем случаи плата: WeMos D1 R1 И порт 3
    Парсер данных из интернета на Arduino

    Все остальные настройки можно оставить по умолчанию.
    Сам скетч:

    Обратите внимание что у вас должна быть еще дополнительно установлены 2 библиотеки.Это ArduinoJson.h и LiquidCrystal_I2C.h !

    Затем изменяем в настройках скетча важные переменные, это SSID (имя Wifi точки) и password (пароль Wifi точки)

    После чего, можно загружать прошивку.
    Если дисплей был подключен верно, то на нем будет выводится следующая информация.

    Если этого не происходит, проверьте следующую настройку.

    Укажите правильный I2C адресc. В любом случаи, лучше первый раз после загрузки скетча открыть Serial порт, и убедится что соединение было успешно установлено.

    Если этого не происходит, перепроверьте данные Wifi точки.

    Если все успешно загрузилось и подключилось, то на дисплеи вы должны увидеть следующее:

    Можете так же нажать на кнопку, и проверить обновляются ли данные (если вы ее подключили).
    Все, на этом этапе 95% работы выполнено, осталось только указать в настройка данные, которые необходимо парсить. Все они находятся в константе "A"
    const String A = "http://jsonplaceholder.typicode.com/users/1,name,User 1:;http://jsonplaceholder.typicode.com/users/2,name,User 2:;";

    Итак, синтаксис записи прост. Все источники разделены между собой на группы, отделяющиеся точка с запятой (;).
    Каждая группа состоит из 3 главных параметров, это
    - URL, на который будет идти запрос
    - Значение, которое нужно извлечь.
    - Дополнительный текст, выводимый на дисплей.
    Таким образом
    http://jsonplaceholder.typicode.com/users/1,name,User 1:
    ==
    URL = http://jsonplaceholder.typicode.com/users/1
    KEY = name
    text = "User 1:"

    Если сейчас перейти по ссылке
    http://jsonplaceholder.typicode.com/users/1
    То можно увидеть следующую информацию

    Где собственно и видно откуда взялось значение "name".

    Таким образом, можно уже извлекать информацию с простеньких сайтов. Но этот метод не годится для работы с "серьезными" сайтами, которые работаю с SSL сертификатами, которые проверяют запросы и выводят всякую капчу если им что-то не нравится, да и к тому же вывод данных слишком сложен, что бы обработать их "силами ардуино". Как я не пробовал "обходить" все это, но есть вещи которые или работают очень не стабильно или вовсе не работают. Постоянные обновления сертификатов не сильно то помогают. Поэтому как я считаю, наиболее разумным решением будет создание собственного сайта, "внутри" которого все эти запросы будут выполниться, обрабатываться и выводится самой ардуино в "упрощенном" виде. Как создать сайта есть множество статей/видео/форумов и т.д, в нынешнее время это не проблема. Предположим у Вас он есть, тогда загрузите на него следующий файл. Назовите его как вам удобно, ну скажем "pars.php".

    
    <?php
    /*
    
    Код для парсинга информации с сайтов, и дальнейшеий вывод на дисплей
    
    Код написан каналом MEGAVOLT https://www.youtube.com/MEGAVOLT
    
    Версия v0.1, если будут какие либо ошибки просьба написать комментарий под видео
    
    
    */
    header('Content-Type:text/plain;charset=utf-8');
    function C($url){
     return json_decode(file_get_contents($url));	
    }
    
    if (isset($_GET['type'])){
    	switch($_GET['type']){
    		
    		case "test":
    		echo json_encode(array("test" => "Good"));
    		break;
    		
    		case "yt1":
    		$key_youtube = ""; // в гугле пишем "как получить ключ api youtube"
    		$a = C("https://www.googleapis.com/youtube/v3/channels?part=statistics&id=UC-lHJZR3Gqxm24_Vd_AJ5Yw&key=" . $key_youtube);
    		echo json_encode(array("count_sub" => $a->items[0]->statistics->subscriberCount));
    		break;
    		
    		case "vk":
    		$key_vk = ""; // в гугле пишем "как получить ключ api vk"
    		$a = C("https://api.vk.com/method/groups.getMembers?group_id=155504801&sort=id_asc&access_token=" . $key_vk  . "&v=5.102");
    		echo json_encode(array("count_sub" => $a->response->count));
    		break;
    		
    		case "surs":
    		$a = C("https://www.cbr-xml-daily.ru/daily_json.js");
    		echo json_encode(array("curs" => $a->Valute->USD->Value));
    		break;
    	}
    }
    
    
    
    ?>
    
    


    В данный момент реализовано 3 позиции:
    Парсинг подписчиков на youtube
    Парсинг подписчиков в группе vk.com
    Парсинг курса USD

    Обратите внимание что там необходимо иметь собственные API ключи доступа, получить их так же не проблема.

    Запрос выполняется следующим образом.
    http://mysite.ru/pars.php?type=surs
    тогда в скетче переменная A будет иметь следующий вид
    const String A = "http://mysite.ru/pars.php?type=сurs,curs,USD: ;";

    Таким методом можно парсить сложные сайты, и выдавать только ту информацию, которая нужна. Еще одним плюсом такого подхода заключается то, что можно заранее в настройках скетча вписать сайты, а для изменения информации вывода использовать изменение на серверной стороне. Таким образом платформа будет являться только "связующим" звеном между Вашим сайтом.

    Спасибо за внимание! Удачи в начинаниях.

    Пакет вместо фум-ленты

    Наше вам с хвостиком (с кисточкой) или история одного термометра

    Добавить комментарий

    Привет, Гость!


    Зарегистрируйтесь

    Или войдите на сайт, если уже зарегистрированы...

    Войти

    Добавьте самоделку

    Добавьте тему

    Онлайн чат

    Последние комментарии

    Все комментарии