воскресенье, 22 марта 2020 г.

Парсинг данных в таблицу MySQL

Есть такой сервис, который показывает в онлайн режиме показания с датчиков загрязненности воздуха. Проблема в том, что видя показания в текущий момент невозможно понять увеличились ли они за последнее время или уменьшились, меняются ли они вообще, как зависят о направления и скорости ветра и многое другое. Чтобы понимать все это - было бы очень удобно смотреть за изменениями показаний, а для этого нужно периодически сохранять их. Для этого очень хорошо подходит таблица MySQL. Брать данные я буду с сайта https://airkaz.org/temirtau.php. 

Переходим на сайт и смотрим исходный код страницы, там видно что все данные по датчикам находятся внутри тегов <script> и эти данные очень сильно напоминают JSON формат. Чтобы получить все эти данные сначала получаем страницу целиком (file_get_contents) а потом через регулярное выражение находим только то что внутри квадратных и фигурных скобок. По запросу regexp online можно протестировать регулярное выражение
$doc = file_get_contents("https://airkaz.org/temirtau.php");// получаем всю страницу 
$regexp = "/\[{.+}\]/i";// ищем все что внутри скобок [{}] 
preg_match_all($regexp, $doc ,$matches); //теперь все что внутри скобок находится в matches[0][0]
Теперь данные JSON можно отправить в массив sensors из которого по номеру элемента можно очень легко получить нужные данные: 
$sensors=json_decode($matches[0][0], TRUE);
Кстати проще всего разобраться в структуре массива, если в онлайне сделать разбор JSON
Теперь чтобы получить данные 45 элемента массива pm10, нужно просто сделать так:
$s45pm10 = $sensors[45][pm10];
Аналогично получаем остальные данные.
Получив необходимые данные, мы отправляем их в таблицу MySQL
Для этого сначала устанавливаем связь с базой данных
$link = mysqli_connect('localhost', 'user', 'password','database');
if($link === false){
    die("ERROR: Could not connect. " . mysqli_connect_error());
}
 А потом выполняем запрос чтобы вставить полученные значения датчиков в таблицу. Соответственно такая таблица уже должна быть уже создана заранее с нужными столбцами
$sql = "INSERT INTO airkaz (s45pm10, s45pm25) VALUES ($s45pm10, $s45pm25)";
if(mysqli_query($link, $sql)){
    echo "Records added successfully.";
} else{
    echo "ERROR: Could not able to execute $sql. " . mysqli_error($link);
}
 Закрываем соединение:
// Close connection
mysqli_close($link);
Вот и все.Все это сохраняется в php файл на сервере, и если открыть его в браузере, то должна добавиться новая запись в таблицу. Запись будет добавляться при каждом открытии файла, поэтому на хостинге настраиваем планировщик заданий, который будет с заданной периодичностью открывать эту страницу.

Комментариев нет:

Отправить комментарий