должен быть доступен для записи файл yaca.cash.
Запуск из командной строки -
php yaca.php _http://yaca.yandex.ru/path_to_yours_dir/
Кто шарит - помогите, не могу с ним ладу дать, толи я что не так делаю, то ли код кривоват.
yaca.php:
- Код: Выделить всё
<?php
require_once('yacalib.php');
//---------------------------------------------------------
// очищаем кэш
h = fopen('yaca.cash','w');
fwrite(h, '');
fclose(h);
cash = glob('output/'.'*.txt');
foreach (cash as f)
{
unlink(f);
}
if (!isset(argv[1]))
{
die ("YACA parser.n Uses: n php yaca.php http://yaca.yandex.ru/yca/cat/Computers/Internet/Web_Development/");
}
url = argv[1];
echo "stage 1 n";
d = parse(url);
while (url=find_next_page(url))
{
echo "stage 2 n";
d = parse(url);
}
echo "stage 3 n";
get_sites('yaca.cash');
echo "stage 4 n";
get_mails();
?>
yaca.lib :
- Код: Выделить всё
<?php
// ---------------------------------------------------------------------
// Функции для работы с яндекс каталогом
// (c) _www.jp-net.ru, pi11 icq 1447500
//
// требования: должен быть создан и доступен для записи каталог output
// должен быть доступен для записи файл yaca.cash
// ---------------------------------------------------------------------
function parse(url) // вытаскивает все ссылки на сайты со страницы каталога
{
echo '.';
urls = array(0=>0);
i=0;
// cat = file_get_contents(url);
if (!(cat = file_get_contents(url))) {sleep (15); cat = file_get_contents(url);}
str = explode ("n", cat);
h = fopen('yaca.cash', 'a');
foreach (str as s)
{
if (strpos(s, '<span style="color: rgb(0, 102, 0);">')===false){}
else
{
i++;
end = strpos(s, '</span>');
fwrite(h, 'http://'.substr(s, 37, end - 37).'/'."n");
//array_push(urls, 'http://'.substr(s, 37, end - 37).'/');
//echo 'http://'.substr(s, 37, end - 37).'/';
//echo url."n";
}
}
fclose(h);
return urls;
}
//-------------------------------------------------------------
function find_next_page(url) // возвращает ссылку на след. страницу каталога.
{
r='';
if (!(cat = file_get_contents(url))) {sleep (15); cat = file_get_contents(url);}
str = explode ("n", cat);
foreach (str as s)
{
if (strpos(s, '<span>→</span>')===false){}
else
{
end = strpos(s, '">');
start = strpos(s, 'href="');
next_url = substr(s, start+6, end-start-6);
r = next_url;
}
}
if (strpos(r, 'yaca')===false){r=false;}
sleep(6);
echo '@';
return r;
}
// ------------------------------------------------------------
function get_sites(fsites)
{
set_time_limit(0);
d = file_get_contents(fsites);
d = explode("n", d);
i=0;
foreach (d as site)
{
i++;
s = file_get_contents(site);
h =fopen('output/'. i.".txt", 'w');
content = file_get_contents(site);
fwrite (h, site."nnn".content);
fclose(h);
}
}
// ------------------------------------------------------------
function get_mails()
{
d = glob('output/'.'*.txt');
h = fopen('mails.txt','w');
foreach (d as f)
{
find = false;
text = strtolower(file_get_contents(f));
p = strpos(text, 'mailto:');
if (p === false)
{
// echo f;
} else
{
p2 = strpos(text,'.ru', p);
//echo p2."-".p."n";
mail = substr(text, p+7, p2-p+3-7 );
if (strlen(mail)<100)
{
sss = explode("n",text);
fwrite(h, sss[0]."n");
fwrite(h, mail."nn");
find = true;
}
}
if (!find)
{
sss = explode("n",text);
fwrite(h, 'NOT FOUND E-mails: '.sss[0]."n");
}
}
fclose(h);
d = glob('output/'.'*.txt');
foreach (d as f)
{
text = strtolower(file_get_contents(f));
p = strpos(text, 'mailto:');
if (p === false)
{
// echo f;
} else
{
p2 = strpos(text,'.ru', p);
//echo p2."-".p."n";
mail = substr(text, p+7, p2-p+3-7 );
if ((strlen(mail)<110) && (strlen(mail)>3))
{
sss = explode("n",text);
echo sss[0]."n";
echo mail."nn";
}
}
}
}
?>