[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Парсинг bash.org с помощью cron на фтп.
j1gs4w88
Приветствую всех читающих! Возникла проблемка. Хочу забабахать парсер цитатника bash.org.ru используя cron. Должна создаваться папка на фтп, а в нее парситься файлы. В данный момент скрипт не работает. Вот код скрипта
<?php

set_time_limit('0');

$open = ftp_connect("host", 21, 0);
ftp_set_option ($open, FTP_TIMEOUT_SEC, 0);
if (!ftp_login($open, "login", "password")) exit("Не могу соединиться");

$folder = 'quotes';
$dir = ftp_mkdir($open, $folder);



for ($i = 1; $i <= 406632; $i++)
{
$b = file_get_contents('http://bash.org.ru/quote/'.$i);
if (preg_match('|<div>(.*?)</div>|is', $b, $quote))
{
$fp1 = fopen ('q'.$i.'.html' , "w+" );
$remote_file = $dir.'/q'.$i.'.html';
fputs ( $fp1 , " <p>$quote[1]</p>" );
ftp_fput ($open, $remote_file, $fp1, FTP_BINARY);
fclose($fp1);
}


}


ftp_close($open);

mail("mail@mail.ru", "Парсинг башорга", "Парсинг башорга завершен!");

?>


Cron'ом пользоваться чуть-чуть умею, а конкретно запустил скрипт вечного онлайна вконтакте, который прекрасно работает. Вот команда запуска cron
/usr/bin/lynx -source http://site.ru/bashf.php , точно также запускал онлайнер вконтакте.

Где я допустил ошибки?

Надеюсь на помощь на форуме, где меня еще ни разу не послали даже с глупыми вопросами)



Спустя 2 дня, 2 часа, 2 минуты, 9 секунд (13.05.2010 - 14:37) j1gs4w88 написал(а):
Предыдущий код без крона не запускался, там была масса ошибок с моей стороны. Новый код запускается без крона, НО... Создает файлы на локалхосте, к фтп подключается, там создает нужную папку, а в нее сохраняет пустые файлы. В чем может быть проблема?
<?php

set_time_limit('0');

$open = ftp_connect("host", 21, 864000);
ftp_set_option ($open, FTP_TIMEOUT_SEC, 864000);
ftp_login($open, "login", "password");

$folder = 'quotes';

if (ftp_mkdir($open, $folder))
{
echo "Папка $folder успешно создана\n";
}
else
{
echo "Не возможно создать папку $folder\n";
}



for ($i = 1; $i <= 406632; $i++)
{
$b = file_get_contents('http://bash.org.ru/quote/'.$i);
if (preg_match('|<div>(.*?)</div>|is', $b, $quote))
{
$fp1 = fopen ('q'.$i.'.html' , "w+" );
$remote_file = $folder.'/q'.$i.'.html';
fputs ( $fp1 , " <p>$quote[1]</p>" );
ftp_fput ($open, $remote_file, $fp1, FTP_BINARY);
fclose($fp1);

}


}


ftp_close($open);

mail("mail@mail.ru", "Парсинг башорга", "Парсинг башорга завершен!");

?>


Спустя 4 минуты, 1 секунда (13.05.2010 - 14:41) jetistyum написал(а):
дебажь.. посмотри что возвращается в file_get_contents ... если приходит, то на каком этапе теряется..

Спустя 3 минуты, 43 секунды (13.05.2010 - 14:45) j1gs4w88 написал(а):
В file_get_contents приходит то, что нужно ибо на локалхосте создаются нужные файлы и они заполнены нужным контентом, а вот на фтп создаются пустые файлы.

Спустя 3 минуты, 16 секунд (13.05.2010 - 14:48) Kuzya написал(а):
Эм..а RSS не проще использовать? huh.gif Подгрузил через SimpleXML и работай. Так у тебя всегда будет везде гарантированно правильный контент.
Касательно FTP можно попробовать сохранять сначала file_put_contents`ом информацию в файл, потом создавать указатель через fopen, но с ключём r, и уже ничего не делая с указателем передавать его в ftp_puts

Спустя 1 минута, 38 секунд (13.05.2010 - 14:50) j1gs4w88 написал(а):
Я на php прогаю не долго и не понимаю о чем идет речь))) Как именно RSS использовать?

Спустя 51 секунда (13.05.2010 - 14:51) jetistyum написал(а):
попробуй создать удаленно на FTP просто тестовый файл с контентом. запусти скрипт через браузер включи отображение всех ошибок... сам подумай..

Спустя 2 минуты, 49 секунд (13.05.2010 - 14:54) jetistyum написал(а):
RSS тут может и правильнее, но через него не высосешь старые записи это раз и если не работает скрипт парсинга, то нужно чинить скрипит парсинга, а забивать и делать другое - не по программерски как-то smile.gif

Спустя 19 секунд (13.05.2010 - 14:54) Kuzya написал(а):
Только подредактировал своё сообщение, как уже тут написали целых 2. Прочитай его ещё раз, я там на счёт FTP добавил.
Про RSS в википедии прочитай. Грубо говоря в RSS содержимое сайта выводится в виде XML-файла, который можно легко обработать с помощью библиотеки SimpleXML
Да, если речь идёт о старых записях то тут ничего не поделать.

Спустя 1 день, 8 часов, 29 минут, 13 секунд (14.05.2010 - 23:23) j1gs4w88 написал(а):
Цитата (Kuzya @ 13.05.2010 - 11:48)
Касательно FTP можно попробовать сохранять сначала file_put_contents`ом информацию в файл, потом создавать указатель через fopen, но с ключём r, и уже ничего не делая с указателем передавать его в ftp_puts

<?php

set_time_limit('0');

$open = ftp_connect("host ", 21, 864000);
ftp_set_option ($open, FTP_TIMEOUT_SEC, 864000);
ftp_login($open, "login", "pw");

$folder = 'quotes';

if (ftp_mkdir($open, $folder))
{
echo "Папка $folder успешно создана\n";
}
else
{
echo "Не возможно создать папку $folder\n";
}



for ($i = 1; $i <= 406632; $i++)
{
$b = file_get_contents('http://bash.org.ru/quote/'.$i);
if (preg_match('|<div>(.*?)</div>|is', $b, $quote))
{

$c = '<p>'.$quote[1].'</p>';
$b = file_put_contents('q'.$i.'.html', $c);
$fp = fopen ('q'.$i.'.html' , "r" );
$remote_file = $folder.'/q'.$i.'.html';

ftp_put ($open, $remote_file, $fp, FTP_BINARY);


}


}


ftp_close($open);

mail("mail@mail.ru", "Парсинг башорга", "Парсинг башорга завершен! ");

?>
Верно ли я понял ваши рекомендации?
Как вообще реализовать парсер сходу на фтп, чтобы на локалхосте файлы не создавались? Парсер планирую запустить с крона, если быть точным, то кучу таких парсеров разных сайтов)))

Спустя 13 часов, 52 минуты, 47 секунд (15.05.2010 - 13:16) j1gs4w88 написал(а):
<?php

set_time_limit('0');

$open = ftp_connect("host", 21, 864000);
ftp_set_option ($open, FTP_TIMEOUT_SEC, 864000);
ftp_login($open, "login", "password");

$folder = 'quotes';

if (ftp_mkdir($open, $folder))
{
echo "Папка $folder успешно создана\n";
}
else
{
echo "Не возможно создать папку $folder\n";
}



for ($i = 1; $i <= 406632; $i++)
{
$b = file_get_contents('http://bash.org.ru/quote/'.$i);
if (preg_match('|<div>(.*?)</div>|is', $b, $quote))
{

$c = '<p>'.$quote[1].'</p>';
$f = '/q'.$i.'.html';
file_put_contents($f, $c);
$remote_file ='/'. $folder.'/q'.$i.'.html';
$fp = fopen ('/q'.$i.'.html' , "r+" );
ftp_fput ($open, $remote_file, $fp, FTP_BINARY);
unlink($f);
}


}


ftp_close($open);

mail("mail@mail.ru", "Парсинг башорга", "Парсинг башорга завершен!");

?>
Вот такой код отлично работает с локалхоста и заливает как нужно на фтп, но..... С крона он не работает((( А еще не работает unlink.

Спустя 2 дня, 17 часов, 36 минут, 13 секунд (18.05.2010 - 06:52) Kuzya написал(а):
С крона он не работает

Это как? Может просто команда в кроне не так прописана? Ошибки какие-нибудь вылазеют?
А еще не работает unlink. 

Опять же, ошибки какие? Кажется мне что проблема из-за слэша в начале имени файла. Зачем он там?

Спустя 2 часа, 8 минут, 9 секунд (18.05.2010 - 09:00) j1gs4w88 написал(а):
На одном форуме мне посоветовали поставить абсолютные пути к файлам. В данный момент скрипт выглядит вот так:
<?php

set_time_limit('0');

$open = ftp_connect("host", 21, 864000);
ftp_set_option ($open, FTP_TIMEOUT_SEC, 864000);
ftp_login($open, "login", "pw");

$folder = 'quotes';

if (ftp_mkdir($open, $folder))
{
echo "Папка $folder успешно создана\n";
}
else
{
echo "Не возможно создать папку $folder\n";
}



for ($i = 1; $i <= 406632; $i++)
{
$b = file_get_contents('http://bash.org.ru/quote/'.$i);
if (preg_match('|<div>(.*?)</div>|is', $b, $quote))
{

$c = '<p>'.$quote[1].'</p>';
$f = '/home/nick/data/q'.$i.'.html';
file_put_contents($f, $c);
$remote_file = '/'.$folder.'/q'.$i.'.html';
$fp = fopen ('/home/nick/data/q'.$i.'.html' , "r+" );
ftp_fput ($open, $remote_file, $fp, FTP_BINARY);
unlink($f);
}


}


ftp_close($open);

mail("mail@mail.ru", "Парсинг башорга", "Парсинг башорга завершен!");

?>
Cron запускается командой /usr/local/bin/php /home/nick/data/bashf.php

Спустя 1 час, 52 минуты, 10 секунд (18.05.2010 - 10:52) Kuzya написал(а):
Без лога ошибок трудно сказать где что и почему не работает. Включи error_log в php.ini, пусть ошибки пишуться в отдельный файл. После очередного cron`ового запуска сможешь почитать что случилось. Ну и сюда сообщить заодно smile.gif
P.S. Про слэш я имел в виду вот что из прошлого сообщения:
$f = '/q'.$i.'.html';
file_put_contents($f, $c);

В последнем сообщении увидел что всё с путями нормально
Быстрый ответ:

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