Получение данных с сайта
- Войдите на сайт для отправки комментариев
Ср, 10/01/2018 - 02:42
Доброго дня, делаю сейча на NodeMCU мини проектик, задача, подключаемся к wifi затем стучимся на сайт по урлу и спрашиваем сколько пользователей зарегистрировано на сайте, получаем ответ распаршиваем нужную цифру и выводим на дисплей 1602.
Вопрос вот в чем, к сети подключили по урлу стукнулись и получили информацию с сайта, только получили мы ее с мусором, т.е. помимо цифры нужно получаем еще ответ сервера и прочий мусор, как распарсить и вытащить именно цифру?
Вот на данный момент исходник рабочий, просьба на грязь в скрипте не смотреть я его сейчас перековыриваю, главное получить рабочий вариант и разобраться, потом код причешем.
Вопрос вот в чем, к сети подключили по урлу стукнулись и получили информацию с сайта, только получили мы ее с мусором, т.е. помимо цифры нужно получаем еще ответ сервера и прочий мусор, как распарсить и вытащить именно цифру?
Называть служебные заголовки HTTP мусором - это надо сильно умудриться.
Ну, Вы же сами написали что делать:
1. подключаемся к wifi
2. затем стучимся на сайт по урлу
3. и спрашиваем сколько пользователей зарегистрировано на сайте,
4. получаем ответ
5. распаршиваем нужную цифру
6. и выводим на дисплей 1602.
А на деле п. 5 пропустили. Сделайте его и всё будет окей.
Ну, Вы же сами написали что делать:
1. подключаемся к wifi
2. затем стучимся на сайт по урлу
3. и спрашиваем сколько пользователей зарегистрировано на сайте,
4. получаем ответ
5. распаршиваем нужную цифру
6. и выводим на дисплей 1602.
А на деле п. 5 пропустили. Сделайте его и всё будет окей.
Это понятно я для того и написал сюда, может кто сбросит пример распарсинга страницы и отлавливания нужной информации из нее, вчера на ночь глядя ничего дельного не нагуглил, как правило люди наоборот Ардуина передает данные, а мне просто забрать число, я думал уже в XML завернуть и его парсить если будет быстрее, но что-то тоже дельного не нагуглил )
Если для своего сайта делаете, то проще скриптик php оформить который будет возвращать только нужное число без всяких там обрамлений.
Если для своего сайта делаете, то проще скриптик php оформить который будет возвращать только нужное число без всяких там обрамлений.
Это служебные заголовки, они по любому будут, так браузер общается с сервером, сейчас там отдается одна голая цифра, вот ее и хотелось бы спарсить, в планах получать 3 параметра (Всего пользователей, за день, за час) и бипер прикрутить на регистрацию пользователя, это проект для стартапа, что бы мотивировать команду, когда кто-то регистрируется на сайте мы получаем бип и статистику на экране в любое время суток по росту аудитории.
Огласите весь список пожалуйста ©, из чего нужно вылавливать цифру, дабы узреть точку опоры. Ибо если нету точки опоры надо её создать, в виде уникального кода, перед требуемой вам цифрой.
У nodeMCU памяти до дури, вроде? Тогда самое дешевое решение, на мой взгляд: http://blog.benoitblanchon.fr/arduino-json-v4-0/
Короче, ребята: мы просто хотим погуглить готовое решение, как обычно :) Мы не хотим просто взять, и прочитать самые основы протокола HTTP, чтобы понять, что данные собственно ответа начинаются с двойного перевода строки. Реалии двадцать первого века - вся надежда, что кто-то уже сделал за нас :)
Ну так человек сразу написал, что ему попроще надо. Попроще - это ловить тело страницы и кидать его в JSON parser.
Если хотите, то можете в тысячный раз объяснять как парсить строку крафтовыми саброутинами, любовно изготовленными на кристально честном Си, но, думаю, в данном случае это не имеет ни малейшего смысла.
Ну так человек сразу написал, что ему попроще надо. Попроще - это ловить тело страницы и кидать его в JSON parser.
Садман, ну зачем здесь JSON. Раз страница принадлежит автору, самое простое решение - вставить в ответ сервера уникальные строки. Типа "Number of registered users = " .
И тогда все просто как дважды-два:
- читаем строку из ответа
- если строка начинается с "Number of registered users = " - извлекаем число после знака равенства
- если строка другая - отбрасываем
Весь код наверняка в десять строк уложится без всякого JSON
Тяжелые готовые парсеры нужны, когда разбираешь ответ чужого сервера, где нет заранее установленных уникальных маркеров. да еще и формат может в любой день неожиданно изменится.
Потому что на бэкенде с JSON как-то постандартней. Есть стандартные средства генерации, есть валидаторы, перспектива расширения. В конце-концов там может быть и стандартное API, в котором уже всё есть и отдающее JSON-ом, как нынче модно.
На стороне нодемцу - это копипаст в код с изменением JSON-ключей. И потом какие угодно поля там бери, складывай, перемножай. С обычной 328-й еще бы стоило писать деревянный, нерасширябельный код. А тут, когда памяти много - не вижу никакого смысла. Разве что в качестве тренировки.
Впрочем, я же не заставляю его брать именно этот вариант.
Потому что на бэкенде с JSON как-то постандартней. Есть стандартные средства генерации, есть валидаторы, перспектива расширения. В конце-концов там может быть и стандартное API, в котором уже всё есть и отдающее JSON-ом, как нынче модно.
ну кому что, как говорится... Я на ПК парсеры сам пишу, "на честном перле". Годами устойчиво работают на чужих сайтах. Вот, к примеру, 2 года собирал статистику о билетах в испанские музеи из скрытых полей сайта Ticketmaster.es
В перловых JSON парсерах XS обставляет PP ;) Конечно это не так заметно на малых деревьях и нечастых вызовах, да и вообще есть множество влияющих факторов. Впрочем, это уже вопросы для другого форума.
В перловых JSON парсерах XS обставляет PP ;) Конечно это не так заметно на малых деревьях и нечастых вызовах, да и вообще есть множество влияющих факторов. Впрочем, это уже вопросы для другого форума.
вы не поняли, я парсю сайты голым перлом, через регеспы, без JSON-a :)
или я не понял. что вы имели в виду?
или я не понял. что вы имели в виду?
Может и не поняли - откуда ж мне знать...
Я к тому, что если на бэкеде есть стандартное генерирующее решение, а на клиенте - стандартная парсилка, ресурсов достаточно и не жалко, а задача одноразовая - то почему бы всем этим не воспользоваться?
Вот стандартный пример ESP8266 Arduino IDE
Если запросить какой-нибудь my.php вида
то в payload вы получите 100 без всякого мусора.
Ну а если вы хотите парсить громоздкие страницы то советов вам уже понадавали.
<?php
2
echo
"100"
3
?>
К сожалению это не поможет, все равно есть заголовки, но вот идея про два перевода строки мне понравилась, сейчас попробую отследить.
Идея про два перевода строки - это не идея, это стандарт протокола HTTP :)
что там отслеживать, идут заголовки далее они отделяются \r\n\r\n и сама страница и дальше рабираете данные.
Идея про два перевода строки - это не идея, это стандарт протокола HTTP :)
я просто об этом даже не подумал что-то только не думал, хотел считать символы, хотел распаршивать, хотел переносы считать, а до самого очевидного не додумался )
Да кстати, вот так выглядит получаемая информация со страницы даже при пустом файле с цифрой, даже при echo 100 и т.д.
я же рукожоп начинающий, я только начинаю ковырять ардуинку, до этого если писал что-то на си и подобных то в универе, а сейчас после работы вечерами ковыряю разные игрушки с китая для общего развития, я больше по вебу, для него собственно и делается задумка для отслеживания конверсии объявлений и мотивации команды )
Да, Клапа это может одной силой мысли, он такой :)
Немного костыльно но получилось, обрезал readStringUntil('\r\n\r\n'); и дополнил исходник большим количеством данных и сейчас выводится все гут, единсвтенное во время обновления информации с сайта пробегает лишняя информация на дисплее но на 1 секунду, а потом выводятся нужные цифры.
Спасибо за помощь, пойду читать как распаршивать данные т.е. как вообще вырезать все лишнее, оставив только нужные цифры.
funkyby, вот здесь почитайте. Масса полезного.
funkyby, вот здесь почитайте. Масса полезного.
ага спасибо, там пост не совсем про то, но в комментах много дельного.
А ардуина-то зачем? Почему обычный компьютер не может это отслеживать?
А ардуина-то зачем? Почему обычный компьютер не может это отслеживать?
Может, но отдельное устройство во первых интереснее сделать чем скрипт сбора информации, во вторых всю стату можно видеть не включая компьютер или телефон, просто сразу. В третьих скрипт подробной аналитики удет в вебе, а тут только вывод ключевых параметров развиитя проекта для мотивации. Можно конечно заморочиться, взять комп, купить телик на стену, купить chromecast и транслировать на телик ключевые показатели чреез приложение, но это уже уровень покруче, для проектов с хорошими деньгами, да и есть уже готовые решения, а хотелось бы самому поковыряться.