|
|
|
| Добрый день! Прошу помощи у спецов, у меня такая задача. Надо из любого сайта прогноз погоду вытащить 3 значения: температура (знак+цифра), влажность (цифра+%) и давление (цифра), формат примерно такой
"----+5--65%-720" (вместо "-" пробелы, хотя можно и их)
далее все это сохранить в файл UniCode .тхт
Буду очень благодарен за помощь!
Для обработки можно вот эти значения брать
http://pogodnik.com/xml/informer/ru/vertical/01/zs3PyMk%3D | |
|
|
|
|
|
|
|
для: FDmitry
(13.08.2014 в 07:01)
| | Нужно описывать все возможные написания исходного текста, а также выходного формата. Например, +5, это скорее температура в градусах, но тогда что минусовой температуры быть не может, и не может быть более 9 градусов? И как должна выглядеть каждая запись выходного файла?
<?
$txt = "----+5--65%-720
fhgjfkd dhfjskd 35
12 --14 62% 680
dhfjsdkfdshf fskdfls";
//получить массив строк содержащих требуемое, с учетом - или + и десятков градусов
preg_match_all('/([\+|\-]{1}\d{1}).+(\d{2}%).+(\d{3})/', $txt, $m);
//забираем массивы результатов
$m = array_slice($m, 1);
//группируем из них массив данных - каждый элемент: температура, влажность, давление
$m = array_map(null, $m[0], $m[1], $m[2]);
//формируем текст для записи - каждое значение будет сохранено через запятую
$txt = implode("\r\n", array_map(function($v) {
return implode(', ', $v);
}, $m));
//запись в файл
file_put_contents('UniCode .txt', $txt);
//вот только не понятно при чем тут UniCode, ибо хранимые данные вполне вмещаются в ASCII
//да и храня под именами с начертаниями в верхнем и нижнем регистрах на Unix,
//учитывайте это и unicode файлы разные, стоит ли так делать?
//расширения .тхт быть не может
//результат:
?>
+5, 65%, 720
-14, 62%, 680
|
| |
|
|
|
|
|
|
|
для: confirm
(13.08.2014 в 09:07)
| | Спасибо за быстрый ответ! Я немного еще более подробно вам расскажу
Вот ссылка на банер погоды http://pogodnik.com/xml/informer/ru/vertical/01/zs3PyMk%3D
Это конечно не понаце, как говорится, можно из любого другого источника получать данные, главное чтоб они были онлайн, из всех данных нам интересны 3 значения: температура (знак+цифра), влажность (цифра+%) и давление (цифра), формат на выходе в кодировке UniCode (программа специализированная только такую понимает без кривизны), а файл надо чтоб получился .txt
Внутри него данные должны быть записаны в виде ----+5--65%-720 (вместо "-" надо пробелы, чтоб красиво все на свои места встало) | |
|
|
|
|
|
|
|
для: FDmitry
(13.08.2014 в 09:25)
| | Прочитайте о кодировках,и запомните, что строка
в unicode будет выглядеть так:
1 + - % \u0442\u0435\u043a\u0441\u0442
|
Теперь понятно, что глупо именно в unicod хранить ваш текст? Поэтому не порите чепухи, в какой бы кодировке вы не работали, ваши данные будут сохранены как один байт на каждый символ, без всякой конвертации в unocode, даже если вы это сделаете.
Что касается пробелов - я о чем писал? Сохраняйте как надо, место где нужно заменить на пробел ведь тоже описано:
<?
//заменить строку
return implode(', ', $v);
//на
return implode(' ', $v);
//и будут сохраняться через пробелы, каждые три значения, с новой строки
|
PS. Если речь идет о каком-то баннере, значит ваш исходный тест, это всего одна строка которую надо извлечь? А если так, то код нужен иной и проще. | |
|
|
|
|
|
|
|
для: confirm
(13.08.2014 в 09:49)
| | Спорить про кодировку не буду, возможно ваша правда.
Но опять возвращаясь к коду, я не увидел, где он получает данные из интернет, я же написал, что необходимо получать данные со стороннего сайта, и не вижу где он сохраняет уже обработанные данные в файл. | |
|
|
|
|
|
|
|
для: FDmitry
(13.08.2014 в 10:01)
| | Зрасьте, приехали. Сначала вы показываете пример записи, которую надо парсить, потом не довольны тем, что ничего не получается откуда-то.
Ваша ссылка, это html-код, а не ---+5 ... Вопрос нужно описывать подробно и четко, а то не понять что к чему.
По ссылке, сперва температура, а потом давление, а не влажность, поэтому:
<?
$txt = str_replace("\r\n", '', strip_tags(file_get_contents('http://pogodnik.com/xml/informer/ru/vertical/01/zs3PyMk%3D')));
preg_match('/([\+|\-]{1}\d{1,2}).+(\d{3}).+(\d{2}%)/', $txt, $m);
file_put_contents('file_name.txt', implode(' ', array_slice($m, 1)));
|
PS. Кстати, я не синоптик, поэтому не знаю может ли быть влажность 5 или 100? Если да, то шаблон должен быть таким:
'/([\+|\-]{1}\d{1,2}).+(\d{3}).+(\d{1,3}%)/'
|
| |
|
|
|
|