Хочу для нескольких своих сайтов сделать страничку с текущим положением в рейтинге, например, webomer. Для того, чтобы в будущем писать, скажем, историю изменения позиции в рейтинге по дням/месяцам. (и чтобы все это отображалось у меня на страничке!)
Текущая задача написать код, который бы искал в коде html-странички позицию в рейтинге и записывал его в файл (или базу mysql).
Страничка, например, вот такая
строка, в которой содержится искомые данные
put_one_site_stat('1262128','krasnoyarsk-fire.ru','','87358','87 358','0.00252','','','81','19','3','24');
87358 - искомые данные (причем учтите, что это число постоянно меняется, количество знаков может тоже измениться, так что видимо мы ищем все, что начинается с некоторой позиции после .ru (пропуская ','',') и до следующего '
В php новичок, хотя потихоньку разбираюсь. Вариантов того, как сделать, видел много, в том числе и на этом форуме, но что-то все не складывается в цельную картину для моего конкретного случая.
Будьте добры, подскажите направление движения (только не к выходу! B) )
Я напишу код и выложу.
Спустя 1 день, 8 часов, 11 минут, 39 секунд (24.08.2011 - 13:55) tolkodelo написал(а):
Что-то тишина... Ужель никто не поможет?

Спустя 1 час, 7 минут, 23 секунды (24.08.2011 - 15:02) inpost написал(а):
tolkodelo
Через file_get_contents() можно получить содержание необходимой тебе страницы. Если нужно авторизироваться, то curl(!).
Далее регуляркой вытащить данные. Сначала попробуй простую строку вытянуть, потом сложнее, и так далее.
preg_match - поиск по регулярке.
Изучить регулярку можно тут: http://irbis-team.com/15/20
Через file_get_contents() можно получить содержание необходимой тебе страницы. Если нужно авторизироваться, то curl(!).
Далее регуляркой вытащить данные. Сначала попробуй простую строку вытянуть, потом сложнее, и так далее.
preg_match - поиск по регулярке.
Изучить регулярку можно тут: http://irbis-team.com/15/20
Спустя 1 минута, 42 секунды (24.08.2011 - 15:04) neadekvat написал(а):
Цитата (inpost @ 24.08.2011 - 16:02) |
Через file_get_contents() можно получить содержание необходимой тебе страницы. Если нужно авторизироваться, то curl(!). |
К слову, у file_get_contents() тоже есть такая вомзожность (третий параметр - context). Но удобнее все это делать через curl, конечно же.
Спустя 56 минут, 8 секунд (24.08.2011 - 16:00) tolkodelo написал(а):
Благодарю за уделенное внимание!
Спасибо, neadekvat; спасибо,inpost!
Сейчас попробую ваши советы, что получится выложу.
С curl работал, правда сохранял страницу в файл.
Респект и поклон
Спасибо, neadekvat; спасибо,inpost!
Сейчас попробую ваши советы, что получится выложу.
С curl работал, правда сохранял страницу в файл.
Респект и поклон

Спустя 3 дня, 3 часа, 17 минут, 43 секунды (27.08.2011 - 19:18) tolkodelo написал(а):
Вот интересно.
Разбираюсь с preg_match. Пробую для начала найти что-нибудь в файле
Такой код:
если пишу
$lookup=preg_match("#.+#i", $string); пишет text foud
А пишу
$lookup=preg_match("#.+#i", $source) пишет "text not found"
Ошибка в ДНК?
Разбираюсь с preg_match. Пробую для начала найти что-нибудь в файле
Такой код:
$file="http://www.___________/text.txt";
$source=fopen($file, "r");
$string='abcdef';
$lookup=preg_match("#.+#i", $string);
if ($lookup==1) {echo 'text found';} else {echo 'text NOT found';};
fclose($source)
если пишу
$lookup=preg_match("#.+#i", $string); пишет text foud
А пишу
$lookup=preg_match("#.+#i", $source) пишет "text not found"
Ошибка в ДНК?
Спустя 43 секунды (27.08.2011 - 19:18) tolkodelo написал(а):
да, в текстовом файле содержится текст "sed"
Спустя 2 минуты, 16 секунд (27.08.2011 - 19:21) inpost написал(а):
tolkodelo
Проверку лучше так делать:
Проверку лучше так делать:
if(preg_match("#.+#i",$string))
echo 'true';
else
echo 'false';
Спустя 18 минут, 3 секунды (27.08.2011 - 19:39) neadekvat написал(а):
А чем вам strlen не нравится?
Зачем модификатор i?
Зачем модификатор i?
Спустя 5 часов, 12 минут, 26 секунд (28.08.2011 - 00:51) walerus написал(а):
Я либо по ночи начинаю подтупливать, НО, смотрю его код/пример:
Разбираем построчно.
1) указали где находится файл для обработки.
2) открываем файл, вот тут я начал уже "загонять", зачем открывать файл, если по коду он дальше не используется ?? (Переменная $source встретилась только 2ва раза, а не три, куда делся fwrite(); ?)
3) Присваиваем переменной $string - текст " abcdef ", тут все понятно, будем искать этот текст в файле.
4) Пытаемся найти любой символ/ы в строке!!!, а не в файле как хотелось.
5) Теперь проверяем что вернул preg_match - true или false, в зависимости от результата - выводим мессадж.
6) Закрыли файл. Опять же, так и не понял к чему он был открыт, если нигде не участвовал...
По моему, должно быть как то так:
$file="http://www.___________/text.txt";
$source=fopen($file, "r");
$string='abcdef';
$lookup=preg_match("#.+#i", $string);
if ($lookup==1) {echo 'text found';} else {echo 'text NOT found';};
fclose($source)
Разбираем построчно.
1) указали где находится файл для обработки.
2) открываем файл, вот тут я начал уже "загонять", зачем открывать файл, если по коду он дальше не используется ?? (Переменная $source встретилась только 2ва раза, а не три, куда делся fwrite(); ?)
3) Присваиваем переменной $string - текст " abcdef ", тут все понятно, будем искать этот текст в файле.
4) Пытаемся найти любой символ/ы в строке!!!, а не в файле как хотелось.
5) Теперь проверяем что вернул preg_match - true или false, в зависимости от результата - выводим мессадж.
6) Закрыли файл. Опять же, так и не понял к чему он был открыт, если нигде не участвовал...
По моему, должно быть как то так:
$file = "http://www.___________/text.txt"; // Адрес где хранится файл
$file_data = file_get_contents( $file ); // Получили данные ИЗ файла
$string = 'abcdef'; // Искомый текст или текст который будем искать, кому как удобнее
if ( preg_match( "#.*" .$string. ".*#i", $file_data ) )
echo 'text found';
else
echo 'text NOT found';
Спустя 5 минут, 3 секунды (28.08.2011 - 00:56) walerus написал(а):
Цитата (neadekvat @ 27.08.2011 - 16:39) |
А чем вам strlen не нравится? Зачем модификатор i? |
strlen - помому немного не в тему, он же не ищет ничего, а определяет длину строки.
Модификатор " i " - Включение режима case-insensitive. ( Большие маленькие буквы - все одно )
Спустя 2 часа, 17 минут, 20 секунд (28.08.2011 - 03:13) tolkodelo написал(а):
Цитата (walerus @ 27.08.2011 - 21:51) |
Опять же, так и не понял к чему он был открыт, если нигде не участвовал... |
Я ниже в том же сообщении написал, что ставлю либо $source, либо $string. Т.к. при указании
$lookup=preg_match("#.+#i", $source)
выводилось мое сообщение, что текст не найден.
Так, смотрю ваши замечания дальше...
Спустя 26 минут, 37 секунд (28.08.2011 - 03:40) neadekvat написал(а):
Цитата (walerus @ 28.08.2011 - 01:56) |
strlen - помому немного не в тему, он же не ищет ничего, а определяет длину строки. |
Так а зачем нам что-то искать? Мы проверяем, есть ли какой-то текст в файле. Если длина текста будет равна нулю, значит, текста нет.
Цитата (walerus @ 28.08.2011 - 01:56) |
Модификатор " i " - Включение режима case-insensitive. ( Большие маленькие буквы - все одно ) |
Гм. Ты серьезно решил, что я спрашиваю назначение модификатора? Я спрашиваю, зачем он здесь, в этой регулярке? Что изменится, если его убрать?
Спустя 6 часов, 56 минут, 53 секунды (28.08.2011 - 10:37) walerus написал(а):
tolkodelo - в твоем $source и не будет ничего находиться, потому что это "поток" открытого файла, а не его содержание, для получения содержания как писал выше inpost, нужно использовать file_get_contents( $file );
neadekvat
neadekvat
Цитата |
Гм. Ты серьезно решил, что я спрашиваю назначение модификатора? Я спрашиваю, зачем он здесь, в этой регулярке? Что изменится, если его убрать? |
Ну точно ночь сказалась, я вообще по другому понял задание которое ТС хотел показать в примере, я так понял он $string искал в $source, а он вообще просто что либо искал... Тогда согласен! с тобой, модификатор не нужен, и strlen тоже подходит, так тогда можно и trim( $file ) сделать )), и проверить на пустоту.
Как то странно, по первому посту, вообще проблем нету.
1) получить строку...
put_one_site_stat('1262128','krasnoyarsk-fire.ru','','87358','87 358','0.00252','','','81','19','3','24');, получили
2) Разбить ее по запятой... $tmp_array = explode( ',', $string );
[0] = put_one_site_stat('1262128'
[1] ='krasnoyarsk-fire.ru'
[2] = ''
[3] = '87358'
[4] = '87 358'
[5] = '0.00252'
[6] = ''
[7] = ''
[8] = '81'
[9] = '19'
[10] = '3'
[11] = '24');
и взять то что нужно.
3) $result = trim( str_replace("'", '', $tmp_array[3] ) );
.
.
.
4) Проверить есть ли данные и занести в файл(базу)...
Спустя 1 час, 31 минута, 51 секунда (28.08.2011 - 12:09) tolkodelo написал(а):
walerus, да, правда, я уже допетрил про fopen 
Ух ты! Попробую сейчас на практике сделать.
а модификатор я ставил в процессе изучения
просто убрать забыл перед тем, как выкладывать код.

Ух ты! Попробую сейчас на практике сделать.
а модификатор я ставил в процессе изучения

Цитата |
Как то странно, по первому посту, вообще проблем нету. |
Ну ведь невежливо просить сделать твою работу за тебя, правильно? Тем более, что это азы.
Сейчас попробую написать код и разобраться, как работает.
Спустя 4 часа, 13 минут, 49 секунд (28.08.2011 - 16:23) tolkodelo написал(а):
Вот что у меня получилось с помощью вашей и Google:
скрипт берет значения и пишет в html-страничку . А мне выдает страничку-отчет.
Посмотрите, нет ли сильно корявых решений? :) сомневаюсь насчет flock, но это просто мой скртиппт с fopen не работал, я взял из одного файла рабочий скрипт.
Для некоторых доменов почему-то не вывелась статистика (смотрите результат тут)
И кстати: можно ли сделать, чтобы данный скрипт запускался, скажем, раз в сутки без моего участия ?
Спасибо!
скрипт берет значения и пишет в html-страничку . А мне выдает страничку-отчет.
<?php
echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="ru-RU"><head><title>Статистика сайтов</title><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /></head><body>';
// СОЗДАЕМ НОВЫЙ ПУСТОЙ ФАЙЛ И ДЕЛАЕМ ЗАГОТОВКУ ДЛЯ ВЕБ-СТРАНИЦЫ
$file=fopen("index.html","a+");
if ($file!=false) {echo "Файл открыт успешно";} else {echo "Файл не открыт"; die ();};
flock($file,LOCK_EX);
ftruncate($file, 0);
$info='<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="ru-RU"><head><title>Статистика сайтов</title><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /></head><body><table border="2px" cellpadding="2px" frame="border">';
fwrite($file,$info);
if (fwrite($file,$info)) {echo "<br />Файл изменен успешно";} else {echo "<br />Файл не открыт"; die ();};
flock($file,LOCK_UN);
fclose($file);
//БЕРЕМ СПИСОК ФАЙЛОВ И ПИШЕМ В МАССИВ
$spisokurl="http://trynyty.ru/besplatnoe-prodvizhenie/";
$spisok_data = file_get_contents( $spisokurl );
$beginning0 = strripos($spisok_data, 'slide_toggle_content" style="display: none;');
$end0 = strripos($spisok_data, '<div class="widget widget_latest_posts">');
$length0 = $end0-$beginning0;
$spisok=substr($spisok_data, $beginning0, $length0);
preg_match_all("/http\:\/\/{1,200}?([^\/]+)/", $spisok, $urls);
$spisok_array=$urls[1];
//СОЗДАЕМ ТАБЛИЦУ ПРОВЕРОК
echo '<br /><p>Ведем запись в файл новых значений</p><br /><table border="2px" cellpadding="2px" frame="border">';
foreach ($spisok_array as $i) {
//получили исходный код страницы для элемента i
$url="http://webomer.ru/cgi-bin/wr.fcgi?action=stat&period=month&sitet=all&cou ntry=2®ion=&category=&key={$i}";
$page_data = file_get_contents( $url );
//получили из кода строку
$beginning=strripos($page_data, "put_one_site_stat");
$end=strripos($page_data, "');")+3;
$length=$end-$beginning;
$string=substr($page_data, $beginning, $length);
//получили из строки данные
$tmp_array = explode( ',', $string );
$result = trim( str_replace("'", '', $tmp_array[3] ) );
//ПИШЕМ ДАННЫЕ НА СТРАНИЦУ
$file1 = fopen("index.html","a+");
flock($file1,LOCK_EX);
$info1="<tr><td>$i</td><td>$result</td></tr>";
echo "<tr><td>" . $i . "</td>";
$write=fwrite($file1, $info1);
if ($write) {echo "<td>OK</td>";} else {echo "<td>-Запись значения НЕ произведена</td>";};
echo "</tr>";
flock($file1,LOCK_UN);
fclose($file1);
}; // конец цикла foreach
unset($i);
echo "</table>";
$file2 = fopen("index.html","a+");
flock($file2, LOCK_EX);
$info2='</table></body>';
fwrite($file2, $info2);
flock($file2, LOCK_UN);
fclose($file2);
echo '<br /> Конец программы!';
?>
Посмотрите, нет ли сильно корявых решений? :) сомневаюсь насчет flock, но это просто мой скртиппт с fopen не работал, я взял из одного файла рабочий скрипт.
Для некоторых доменов почему-то не вывелась статистика (смотрите результат тут)
И кстати: можно ли сделать, чтобы данный скрипт запускался, скажем, раз в сутки без моего участия ?
Спасибо!
Спустя 14 часов, 11 минут, 34 секунды (29.08.2011 - 06:34) tolkodelo написал(а):
Понял, почему не вывелась статистика:
поиск проходит следующим образом
Ищет sait.su в строке ....http://www.sait.ru/ <br />.....
Но иногда строка выглядит так: ....http://www.sait.ru<br />.....
Ну и соответственно результат поиска выглядит не как sait.ru а как sait.ru<br дальше не забирается статистика.
Как бы это побороть?
поиск проходит следующим образом
preg_match_all("/http\:\/\/{1,200}?([^\/]+)/", $spisok, $urls);
Ищет sait.su в строке ....http://www.sait.ru/ <br />.....
Но иногда строка выглядит так: ....http://www.sait.ru<br />.....
Ну и соответственно результат поиска выглядит не как sait.ru а как sait.ru<br дальше не забирается статистика.
Как бы это побороть?
Спустя 4 дня, 3 часа, 38 минут, 19 секунд (3.09.2011 - 10:12) tolkodelo написал(а):
Хорошо, с этим я разобрался, с вашей помощью, и даже могу показать результат.
Теперь вопрос, который, я думаю, для настоящих профессионалов.
Есть сервис, осуществляющий поиск по базе законодательства. Не знаю, как он делает сам поиск и генерирует файл, только управление осуществляется у него как в приложениях windows - кнопками.
Когда нажимаешь кнопку "сохранить на компьютере", появляется запрос на скачивание файла. Смотрел ссылку на скачивание в лисе - ведет в папку cache на том сайте, плюс через некоторое время перестает действовать (кэш ведь).
Можно ли сделать так, чтобы скрипт "заходил" на страницу, "нажимал" там на кнопку и записывал ко мне скомпилированный файл? В каком направлении надо действовать?
Если хотите, дам адрес сайта и доп информацию.
Спасибо!
Теперь вопрос, который, я думаю, для настоящих профессионалов.
Есть сервис, осуществляющий поиск по базе законодательства. Не знаю, как он делает сам поиск и генерирует файл, только управление осуществляется у него как в приложениях windows - кнопками.
Когда нажимаешь кнопку "сохранить на компьютере", появляется запрос на скачивание файла. Смотрел ссылку на скачивание в лисе - ведет в папку cache на том сайте, плюс через некоторое время перестает действовать (кэш ведь).
Можно ли сделать так, чтобы скрипт "заходил" на страницу, "нажимал" там на кнопку и записывал ко мне скомпилированный файл? В каком направлении надо действовать?
Если хотите, дам адрес сайта и доп информацию.
Спасибо!
Спустя 2 дня, 6 часов, 29 минут, 31 секунда (5.09.2011 - 16:42) tolkodelo написал(а):
Никого нету....
(с) Маша и медведь
(с) Маша и медведь
Спустя 6 минут, 35 секунд (5.09.2011 - 16:49) inpost написал(а):
tolkodelo
Надо пробовать, может быть даже curl поможет. То есть ходишь по сайту, парсишь ссылки, в итоге находишь ссылку на файл и его подгружаешь.
Надо пробовать, может быть даже curl поможет. То есть ходишь по сайту, парсишь ссылки, в итоге находишь ссылку на файл и его подгружаешь.
Спустя 10 минут, 38 секунд (5.09.2011 - 16:59) tolkodelo написал(а):