Парсер WEB страниц на ESP32

Загрузка из интернета различной информации с помощью микроконтроллера ESP32 + Arduino IDE. Можно подгружать курсы валют, погоду и любую другую полезную информацию.

#include <WiFi.h> /// - Обязательно для подключения WiFI
#include <HTTPClient.h> /// - Обязательно для отправки HTTP-запросов
 
/// Настройка подключения к сети WiFi begin
const char* ssid = "MikroTik-83BBBA";  // Введите название сети WiFi
const char* password = "88888888";  // Введите пароль к сети Wifi
/// Настройка подключения к сети WiFi end;
 
HTTPClient http1;
String RequestURL ="";
String ResponseData = "";
int httpCode = 0;
 
void setup() {
  Serial.begin(115200);
 
  Serial.println("Connecting to ");
  Serial.print(ssid);
  Serial.print(" ");
 
  WiFi.begin(ssid, password);
 
  //check wi-fi is connected to wi-fi network
  while (WiFi.status() != WL_CONNECTED) {
  delay(1000);
  Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected =)");
  Serial.print("Got IP: ");
  ///Serial.println(WiFi.localIP());
  ///LocalIP = WiFi.localIP().toString();
}
 
void loop() {
  /// Записываем в переменную адрес HTTP запроса
  RequestURL = "https://www.sberometer.ru/";
  ///Serial.println(RequestURL);
  http1.begin(RequestURL); // Устанавливаем URL для запроса в объект HTTP
  httpCode = http1.GET(); // Отправляем GET-запрос
 
  if (httpCode == 200)
  {
    Serial.println("Request: Success");
  }
 
    /// Далее разбираем ответ сервера
    if (httpCode > 0)
    {
        Serial.println(httpCode);
 
        ResponseData = http1.getString();
 
        ResponseData = ParseString(ResponseData,",\"USD\":","}");
 
        ResponseData = RemoveHTMLTags(ResponseData);
 
        Serial.println(ResponseData);
    }
    else
    {
      Serial.println("Error on HTTP request");
    }
 
  http1.end(); //Освобождаем объект HTTP запросов
 
  delay(15000); /// Пауза между запросами. Не ставьте слишком маленькую, так как можно получить бан от сайта за частые запросы
}
 
String ParseString(String DataString, String StartMask, String EndMask)
{
  int i = 0;
  int j = 0;
  int SL = DataString.length();
  uint8_t founded = 0;
  int StartPos = -1;
  String ParseResult = "";
 
  if ( (DataString == "") || (StartMask == "") || (EndMask == ""))
  {
    return("");
  }
 
  while (i<SL)
  {
    if (DataString.charAt(i) == StartMask.charAt(0))
    {
 
      j = 1;
      StartPos = i;
 
      while (j<StartMask.length())
      {
        if (DataString.charAt(i+j) != StartMask.charAt(j))
        {
          j = StartMask.length();
        }
        j++;
      }
 
      if (j == StartMask.length())
      {
        founded = 1;
        i = SL;
      }
 
    }
    i++;
  }
 
  if (founded == 1)
  {
    i = StartPos + StartMask.length();
    while (i<SL)
    {
      if (DataString.charAt(i) == EndMask.charAt(0))
      {
 
        int j = 1;
 
        while (j<EndMask.length())
        {
          if (DataString.charAt(i+j) != EndMask.charAt(j))
          {
            j = EndMask.length();
          }
          j++;
        }
 
        if (j == EndMask.length())
        {
          ParseResult = DataString.substring(StartPos+StartMask.length(),i+j-EndMask.length());
          i = SL;
        }
 
      }
      i++;
    }
  }  
 
  return(ParseResult);
}
 
String RemoveHTMLTags(String DataString)
{
  int i = 0;
  uint8_t HTMLTagIsOpen = 0;
  uint8_t CanSUM = 1;
  String CuredString = "";
 
  while (i < DataString.length())
  {
    if (DataString.charAt(i) == '<')
    {
      HTMLTagIsOpen = 1;
    }
    if ((HTMLTagIsOpen == 1) && (DataString.charAt(i) == '>'))
    {
      HTMLTagIsOpen = 0;
      CanSUM = 0;
    } else
    {
      CanSUM = 1;
    }
    if ((HTMLTagIsOpen == 0) && (CanSUM == 1))
    {
      CuredString += DataString.charAt(i);
    }
    i++;
  }
 
  return(CuredString);
}



1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)

Загрузка...

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Optionally add an image (JPEG only)