losungepaper/http_grab.ino

83 lines
3.4 KiB
C++
Executable File

#include <HTTPClient.h>
String textBeginString = "@";
String textEndString = "@";
String lehrTextBeginString = "@@";
String sourceBeginString = "@";
String sourceEndString = "@";
String url = "https://www.losungen.de/fileadmin/media-losungen/kalender/kalender_daten.php";
String getHTML(String url, String post_params) {
String result = "";
if(WiFi.status() == WL_CONNECTED) {
HTTPClient http;
http.begin(url); // initialize the http instance
http.addHeader("Content-Type", "application/x-www-form-urlencoded"); // add the header; needed for the POST request
Serial.printf("[HTTP] POST %s | DATA: %s\n", url.c_str(), post_params.c_str());
int httpCode = http.POST(post_params); // get the page; httpCode will be negative on error
if(httpCode > 0) {
// HTTP header has been send and Server response header has been handled
Serial.printf("[HTTP] POST %d: %s\n", httpCode, url.c_str());
// file found at server
if(httpCode == HTTP_CODE_OK) {
result = http.getString();
}
} else {
Serial.printf("[HTTP] POST: %s\n", http.errorToString(httpCode).c_str());
}
http.end();
}
return result;
}
String getHTML() { // gets the date and year from time.h library
struct tm timeinfo;
char dayInMonth[3];
char month[3];
char year[5];
if(!getLocalTime(&timeinfo)){
Serial.println("Failed to obtain time");
return "";
}
strftime(dayInMonth,3, "%d", &timeinfo);
sprintf(month,"%d",timeinfo.tm_mon); // the month number has to be in range 0-11!
strftime(year,5, "%Y", &timeinfo);
String post_params = "jahr=" + String(year) + "&monat=" + String(month) + "&tag=" + String(dayInMonth); // create post parameters of the form "jahr=2023&monat=2&tag=2"
return getHTML(url, post_params);
}
String getLosungFromHTML(String html) {
int losungBeginIndex = html.indexOf(textBeginString)+textBeginString.length();
int losungEndIndex = html.indexOf(textEndString,losungBeginIndex);
return html.substring(losungBeginIndex, losungEndIndex);
}
String getLosungSourceFromHTML(String html) { // get the source of losung in given html
String losung = getLosungFromHTML(html);
int losungIndex = html.indexOf(losung);
int losungSourceBeginIndex = html.indexOf(sourceBeginString, losungIndex)+sourceBeginString.length();
int losungSourceEndIndex = html.indexOf(sourceEndString, losungIndex+losung.length()+sourceBeginString.length());
return html.substring(losungSourceBeginIndex, losungSourceEndIndex);
}
String getLehrtextFromHTML(String html) {
int lehrtextBeginIndex = html.indexOf(lehrTextBeginString)+lehrTextBeginString.length();
int lehrtextEndIndex = html.indexOf(textEndString, lehrtextBeginIndex); // calculating is needed for better performance and to get the next index, not the current/previous
return html.substring(lehrtextBeginIndex, lehrtextEndIndex);
}
String getLehrtextSourceFromHTML(String html) { // get the source of losung in given html
String lehrtext = getLehrtextFromHTML(html);
int lehrtextIndex = html.indexOf(lehrtext);
int lehrtextSourceBeginIndex = html.indexOf(sourceBeginString, lehrtextIndex)+sourceBeginString.length();
int lehrtextSourceEndIndex = html.indexOf(sourceEndString, lehrtextSourceBeginIndex); // calculating is needed for better performance and to get the next index, not the current/previous
return html.substring(lehrtextSourceBeginIndex, lehrtextSourceEndIndex);
}