[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: PHP поиск в текстовом файле
Shuher
Доброго времени суток. необходимо вытащить контент с одного сайта и вставить в другой. немного погуглив, я сумел скопировать страницу в текстовый документ. теперь необходимо из текстового документа вытянуть текст, заключенный, между определенными тегами. в частности между <div class="content"> и </div>(между ними тоже есть теги форматирования, в частности <br /> и желательно их сохранить). далее этот текст нужно вставить в другой файл(неважно какой). ну это уже для меня не сложно, хотя я только-только начинаю учить php.



Спустя 1 час, 9 минут, 43 секунды (27.04.2012 - 12:04) johniek_comp написал(а):
SampleHTMLDom в помощь, делается в 2 строчки

Спустя 2 минуты, 16 секунд (27.04.2012 - 12:07) Игорь_Vasinsky написал(а):
file_put_contents()

Спустя 20 часов, 11 минут, 41 секунда (28.04.2012 - 08:18) Guest написал(а):
Цитата
SampleHTMLDom в помощь, делается в 2 строчки


да, описание почитал, достаточно интересная штука) но вот код кое-как написал, а он, естественно, не работает...

<?php

include('simple_html_dom.php');
$articles = array();
getArticles('http://nya.sh/');

function getArticles($page) {
global $articles;
$html = new simple_html_dom();
$html->load_file($page);
}

$items = $html->find('div[class=content]');
foreach($items as $names)
{
$articles[] = array($post->children(0)->plaintext);
}

foreach($articles as $item) {
echo "<div class='item'>";
echo $item[0];
echo "</div>";
}

?>

пишет мол "Fatal error: Call to a member function find() on a non-object in X:\denwer\www\denwer\new\index1.php on line 15"

Спустя 27 минут, 22 секунды (28.04.2012 - 08:46) Dagot написал(а):
почитая про парсинг и библеотеку curl

Спустя 9 минут, 5 секунд (28.04.2012 - 08:55) Guest написал(а):
да, спасибо :) уже разобрался. вчера видимо весь мозг убил новой информацией. сегодня сел, погуглил и все получилось. действительно всего пара строчек кода :)
<?
include_once("simple_html_dom.php");

$temp = file_get_html("http://nya.sh/");
$text = $temp -> find('div[class=content]');
foreach($text as $tmp) print($tmp->outertext);

?>

можт кому пригодится :)

Спустя 1 минута, 41 секунда (28.04.2012 - 08:56) Dagot написал(а):
часто такое бывает)

достаточно выспаться и на следующий день быстро решаешь задачу....

Спустя 5 часов, 19 минут, 53 секунды (28.04.2012 - 14:16) Guest написал(а):
так, код потихоньку продвигается. но снова есть затруднение
<?
include_once("simple_html_dom.php");

$temp = file_get_html("http://nya.sh/");
$text = $temp -> find('div[class=content]');
echo $text[0] //просто посмотерть что за цитату берем
?>

<?

$chrs_cnt = strlen($text[0]);
if ($chrs_cnt<500) //если цитата длинная, то ничего не делаем
{
$f_o_w = fopen("citati.txt", "w");
fwrite($f_o_w, $text[0]); //записываем первую цитату с сайта
fclose($f_o_w); //закрываем файл

$f_o_r = fopen("citati.txt", "r");
$buffer_new = fread($f_o_r, filesize("citati.txt")); //записываем в переменную содержимое
fclose($f_o_r); //закрываем файл

$f_o_r1 = fopen("citati_final.txt", "r+");
$buffer_old = fgets($f_o_r1 ,1); //записываем в переменную содержимое первой строки
fclose($f_o_r1);
strcmp($buffer_new, $buffer_old); //сравниваем строчки из двух файлов

if (strcmp!==0) //если строки не совпадают
{
$f_o_w1 = fopen("citati_final.txt", "w"); //открываем файл для записи
fwrite($f_o_w1, $buffer_new); //записываем в файл с цитатами в контент, цитату с сайта
fclose($f_o_w1); //закрываем файл
}
}


$f_o_a = fopen("citati_final.txt", "a");
fwrite($f_o_a, "\n"); //вставляем переход на новую строку вконце
fclose($f_o_a);

?>


проблема в том, что в файл записывается толкьо одна строка. даже если меняю номер цитаты. т е в массиве $text[0] меняю 0 на 1, хотя поидеи
$f_o_w1 = fopen("citati_final.txt", "w");

с параметром "w", каретка должна стоять в начале файла. и следовательно должна добавиться новая строка. т е после изменения массива с 0 на 1 в сохраненном файле должно быть 2 цитаты.

Спустя 12 минут, 39 секунд (28.04.2012 - 14:29) Guest написал(а):
БЛИН! надо курить мануалы....
Цитата
r – открытие файла только для чтения.
r+ - открытие файла одновременно на чтение и запись.
w – создание нового пустого файла. Если на момент вызова уже существует такой файл, то он уничтожается.
w+ - аналогичен r+, только если на момент вызова фай такой существует, его содержимое удаляется.
a – открывает существующий файл в  режиме записи, при этом указатель сдвигается на  последний байт файла (на конец файла).
a+ - открывает файл в режиме чтения и записи при этом указатель сдвигается на последний байт файла (на конец файла). Содержимое файла не удаляется.

Спустя 18 часов, 32 минуты, 48 секунд (29.04.2012 - 09:02) Guest написал(а):
и снова здравствуйте)
<?
include_once("simple_html_dom.php");

$temp = file_get_html("http://nya.sh/");
$text = $temp -> find('div[class=content]');
?>

<?

$chrs_cnt = strlen($text[2]);
if ($chrs_cnt<500) //если цитата длинная, то ничего не делаем
{
$f_o_w = fopen("citati.txt", "w");
fwrite($f_o_w, $text[2]); //записываем первую цитату с сайта
fclose($f_o_w); //закрываем файл

$arr_cit = file("citati.txt");
$buffer_new = $arr_cit[0]; //первая строка из файла в массив

$arr_cit_fin = file("citati_final.txt");
$buffer_old = $arr_cit_fin[0]; //первая строка из файла в массив

$srvn = strcmp($buffer_new, $buffer_old); //сравниваем строчки из двух файлов

echo $buffer_new;
echo $srvn;
echo $buffer_old;

if ($srvn != 0) //если строки не совпадают
{
$rn = "\r\n";
$f_o_w1 = fopen("citati_final.txt", "w+"); //открываем файл для записи
fwrite($f_o_w1, $buffer_new.$rn.$buffer_old); //записываем в файл с цитатами в контент, цитату с сайта
fclose($f_o_w1); //закрываем файл
}
}


?>

при сравнении строк, показывает что они не равны... понятно, что после превого прохода это так, но после второго, цитаты одинаковые. вот что выводится после второго прохода
Цитата
Epileptik aka Fis: Санкарея винрарна.
Epileptik aka Fis: Cдох кот?!
Epileptik aka Fis: Cвари зелье, сделай из него зомби!
Epileptik aka Fis: УДИВИ БЛИЗКИХ
-2
Epileptik aka Fis: Санкарея винрарна.
Epileptik aka Fis: Cдох кот?!
Epileptik aka Fis: Cвари зелье, сделай из него зомби!
Epileptik aka Fis: УДИВИ БЛИЗКИХ

Спустя 12 минут, 6 секунд (29.04.2012 - 09:14) Guest написал(а):
и снова всем спасибо)))
виноваты \r\n они и добавляли это несоответствие. тупо прибавил к переменной $srvn +2 и все норм считает)) работает и ладно. но все же интересно как это решается по рпавильному smile.gif

Спустя 12 часов, 23 минуты, 59 секунд (29.04.2012 - 21:38) walerus написал(а):
Цитата
$srvn = strcmp($buffer_new, $buffer_old);    	//сравниваем строчки ( ИХ ДЛИНУ!!! )из двух файлов


Я бы это
if ($srvn != 0) //если строки не совпадают
Заменил на это
if ( trim( $buffer_new ) != trim( $buffer_old ) )
и все, trim (обрежет все \r\n\t )...

P.S. Как по мне, так я хранил бы все цитаты в сериализированном массиве и проще, и понятнее, и удобнее работать с массивом.

Спустя 2 дня, 10 часов, 39 минут, 25 секунд (2.05.2012 - 08:17) Guest написал(а):
спасибо smile.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.