Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Пожалуйста помогите с парсингом
 
 автор: FDmitry   (30.06.2015 в 07:19)   письмо автору
 
 

Суть проблемы такая, был сайт РеалМетео, парсили с него данные. Добрый человек с данного форума помог. Теперь же сайт они обновили и данные не парсятся. Помогите исправить. Заранее благодарю....



<?php

$page 
iconv("utf-8","windows-1251",file_get_contents("http://realmeteo.ru/ekaterinburg/1/current"));

preg_match_all("#<td class=\"meteodata\">(.+?)</td>#",$page,$arr);
$temperature preg_replace("#.$#","",preg_replace("#(.)#","$1 ",preg_replace("#\..*#","",preg_replace("#<span>.+?</span>#","",$arr[1][0])))); //температура
$humidity preg_replace("#.$#","",preg_replace("#(.)#","$1 ",preg_replace("#\..*#","",preg_replace("#<span>.+?</span>#","",$arr[1][2]))."%")); //влажность
$pressure preg_replace("#.$#","",preg_replace("#(.)#","$1 ",preg_replace("#\..*#","",preg_replace("#<span>.+?</span>#","",$arr[1][1]))));  //давление

  Ответить  
 
 автор: Igorek   (30.06.2015 в 12:34)   письмо автору
 
   для: FDmitry   (30.06.2015 в 07:19)
 

<?php

$json 
json_decode(file_get_contents('http://realmeteo.ru/.forecast/USSS/forecast.json'), true);
echo 
'Температура: ' $json['current']['temperature'] . PHP_EOL;
echo 
'Влажность: ' $json['current']['humidity'] . PHP_EOL;
echo 
'Давление: ' $json['current']['pressure'] . PHP_EOL;

  Ответить  
 
 автор: FDmitry   (30.06.2015 в 13:21)   письмо автору
 
   для: Igorek   (30.06.2015 в 12:34)
 

Спасибо! Огроменное ВАМ! Я что то не ожидал, что вы как то по другому сделаете, думал те стоки исправите. Позвольте, я до конца расскажу задачу. Надо полученные данные записать в txt файл. Вот что сейчас получилось с вашим кодом.


<?php 

$json 
json_decode(file_get_contents('http://realmeteo.ru/.forecast/USSS/forecast.json'), true); 
echo 
'Температура: ' $json['current']['temperature'] . PHP_EOL
echo 
'Влажность: ' $json['current']['humidity'] . PHP_EOL
echo 
'Давление: ' $json['current']['pressure'] . PHP_EOL


$f fopen("./file.txt""w");
fwrite($f"\xEF\xBB\xBF"3); //пишем в начало файла 3 байта (utf-8)
$str iconv("windows-1251","utf-8","         ".$temperature."         ".$humidity."       ".$pressure);
fputs($f$str); //дальше собственно записываем данные в файл
fclose($f);


?>



Внутри файла должно получиться (Обратите внимание, что внизу в примере пробелы указал знаком "_" они присутствуют в экспорте это не ошибка, так и надо, чтоб выгружалось)
_________+_2_9_________4_5_%_______7_2_8

  Ответить  
 
 автор: FDmitry   (30.06.2015 в 14:09)   письмо автору
 
   для: FDmitry   (30.06.2015 в 13:21)
 

Еще, додумался я вот до кого ))))


<?php 

$json 
json_decode(file_get_contents('http://realmeteo.ru/.forecast/USSS/forecast.json'), true);
$temperature $json['current']['temperature'];
$humidity $json['current']['humidity']; 
$pressure $json['current']['pressure']; 


$f fopen("./file.txt""w");
fwrite($f"\xEF\xBB\xBF"3); //пишем в начало файла 3 байта (utf-8)
$str iconv("windows-1251","utf-8","         ".$temperature."         ".$humidity." %       ".$pressure);
fputs($f$str); //дальше собственно записываем данные в файл
fclose($f);


?>


Получается вот так и нет пробелов между символами..((((
_________30_________55_%_______756

Надо чтоб вот так было
_________+_2_9_________4_5_%_______7_2_8

  Ответить  
 
 автор: Igorek   (30.06.2015 в 14:34)   письмо автору
 
   для: FDmitry   (30.06.2015 в 14:09)
 

странный конечно формат, ежели не секрет - для чего это надобно?

<?php
$json 
json_decode(file_get_contents('http://realmeteo.ru/.forecast/USSS/forecast.json'), true);
$temperature sprintf("%+d"$json['current']['temperature']);
$temperature implode(' 'str_split($temperature));
$humidity implode(' 'str_split($json['current']['humidity']));
$pressure implode(' 'str_split($json['current']['pressure']));

$f fopen("./file.txt""w");
fwrite($f"\xEF\xBB\xBF"3);
fwrite($f"         " $temperature "         " $humidity " %       " $pressure);
fclose($f);

  Ответить  
 
 автор: FDmitry   (30.06.2015 в 14:46)   письмо автору
 
   для: Igorek   (30.06.2015 в 14:34)
 

Как я могу от вас скрывать))) Вы мне очень помогли. Да собственно это и не секрет. Программа для вывода данных на табло. Кривая программа термо)))

  Ответить  
 
 автор: FDmitry   (05.11.2015 в 07:48)   письмо автору
 
   для: FDmitry   (30.06.2015 в 14:46)
 

Здравствуйте! Люди добрые помогите. И личное обращение к Igorek Вы уже мне как то помогали, могу я вас просить помочь мне еще раз.

Суть проблемы вот какая, я пользуюсь парсингом с 2 источников.
Есть вот такой код, он работает, точнее раньше работал, но они там что то изменили, и появилась проблема, когда температуры перешли в минусовые значения он стал выводить вместо знака "-", слово "minus", моя программа это не понимает и выводит значение как плюсовое.

Вот пример, как выходит в текстовом файле (примере пробелы указал знаком "_")
_________& m i n u s ; 1_________8 8 % _______7 2 3

А надо
_________- 1_________1 0 0 %_______7 5 2

<?php
$page 
file_get_contents("http://www.gismeteo.ru/city/weekly/11325/");

preg_match_all("#m_temp c'>(.+?)<#",$page,$arr);
$temperature $arr[1][0]; //температура
$temperature preg_replace("#.$#","",preg_replace("#(.)#","$1 ",$temperature));


preg_match_all("#wicon hum.+?>(.+?)<#",$page,$arr);
$humidity $arr[1][0]."%"//влажность
$humidity preg_replace("#.$#","",preg_replace("#(.)#","$1 ",$humidity));


preg_match_all("#m_press torr'>(.+?)<#",$page,$arr);
$pressure $arr[1][0]; //давление
$pressure preg_replace("#.$#","",preg_replace("#(.)#","$1 ",$pressure));


$f fopen("/meteo.txt""w");
fwrite($f"\xEF\xBB\xBF"3); //пишем в начало файла 3 байта (utf-8)
$str iconv("windows-1251","utf-8","         ".$temperature."         ".$humidity."       ".$pressure);
fputs($f$str); //дальше собственно записываем данные в файл
fclose($f);
?>

  Ответить  
 
 автор: Trianon   (05.11.2015 в 11:38)   письмо автору
 
   для: FDmitry   (05.11.2015 в 07:48)
 

так и поменяйте & m i n u s ; на -
либо до либо после разбора
и всех делов

  Ответить  
 
 автор: FDmitry   (05.11.2015 в 11:42)   письмо автору
 
   для: Trianon   (05.11.2015 в 11:38)
 

Вот вы даете, я то до этого не догадался, а потом сидеть и каждые полчаса менять что ли? ))))
Или я не понял, что вы имели ввиду, можете помочь исправленим в коде?

  Ответить  
 
 автор: Deed   (05.11.2015 в 14:00)   письмо автору
 
   для: FDmitry   (05.11.2015 в 11:42)
 

http://php.net/manual/ru/function.html-entity-decode.php

  Ответить  
 
 автор: Trianon   (05.11.2015 в 15:41)   письмо автору
 
   для: FDmitry   (05.11.2015 в 11:42)
 

зачем что-то менять каждые полчаса?
нет. Исправлением в коде не могу.
Потому что тогда вы точно не поймете, а оно мне надо?

  Ответить  
 
 автор: FDmitry   (05.11.2015 в 17:45)   письмо автору
 
   для: Trianon   (05.11.2015 в 15:41)
 

Данные необходимо выводить на табло.
Я особо то и не хочу понимать, мне надо выполнить задачу. Я думаю, что найдется добрый человек, который поможет. Вы видимо не из их числа.

  Ответить  
 
 автор: Trianon   (05.11.2015 в 20:17)   письмо автору
 
   для: FDmitry   (05.11.2015 в 17:45)
 

Допускаю, что строку
$temperature = $arr[1][0]; //температура 

придется скорректировать до
$temperature = str_replace('&minus;', '-', $arr[1][0]); //температура 


Каждые полчаса ничего менять не нужно.


PS.Я действительно не из их числа.

  Ответить  
 
 автор: FDmitry   (05.11.2015 в 21:07)   письмо автору
 
   для: Trianon   (05.11.2015 в 20:17)
 

Вы все верно допускаете! Все получилось. Я ВАС БЛАГОДАРЮ!
Можно еще вопрос, когда будет плюсовое значение, я так полагаю замены на "-" не будет, он просто пропустит это условие.

  Ответить  
 
 автор: Trianon   (05.11.2015 в 21:41)   письмо автору
 
   для: FDmitry   (05.11.2015 в 21:07)
 

можете добавить аналогичную конструкцию и для &plus;
но насколько я могу себе представить, пока что у вас этой проблемы нету..
и да, весь остальной текст функция замены оставляет как есть, даже если искомого не находит.

  Ответить  
 
 автор: FDmitry   (18.09.2016 в 20:14)   письмо автору
 
   для: FDmitry   (05.11.2015 в 07:48)
 

Здравствуйте Уважаемые спецы! Я уже к вам обращался и вы мне помогли. Очень благодарен вам за это.
Хочу обратиться к вам в очередной раз. Возникла у меня проблема. Неделю назад перестал парсить с сайта. Скорее всего на сайте что то поменялось. Помогите пожалуйста!

Высылаю готовый код который работал

<?php
$page 
file_get_contents("http://www.gismeteo.ru/city/weekly/11325/");

preg_match_all("#m_temp c'>(.+?)<#",$page,$arr);
//$temperature = $arr[1][0]; //температура
$temperature str_replace('&minus;''-'$arr[1][0]); //температура
$temperature preg_replace("#.$#","",preg_replace("#(.)#","$1 ",$temperature));


preg_match_all("#wicon hum.+?>(.+?)<#",$page,$arr);
$humidity $arr[1][0]."%"//влажность
$humidity preg_replace("#.$#","",preg_replace("#(.)#","$1 ",$humidity));


preg_match_all("#m_press torr'>(.+?)<#",$page,$arr);
$pressure $arr[1][0]; //давление
$pressure preg_replace("#.$#","",preg_replace("#(.)#","$1 ",$pressure));


$f fopen("/meteo/meteosensor.txt""w");
fwrite($f"\xEF\xBB\xBF"3); //пишем в начало файла 3 байта (utf-8)
$str iconv("windows-1251","utf-8","         ".$temperature."         ".$humidity."       ".$pressure);
fputs($f$str); //дальше собственно записываем данные в файл
fclose($f);
?>

  Ответить  
 
 автор: prodigy   (07.10.2016 в 16:35)   письмо автору
 
   для: FDmitry   (18.09.2016 в 20:14)
 

У меня выдало:
         + 6         7 2 %       7 4 5

  Ответить  
 
 автор: FDmitry   (12.10.2016 в 13:02)   письмо автору
 
   для: prodigy   (07.10.2016 в 16:35)
 

Да, вы правы! Проверил, все нормально стало!

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования