aqula

Рейтинг
12
Регистрация
03.04.2011
Должность
www.aqula.ru
Интересы
www.aqula.ru
psishock:
ну как вариант:
но для определения какой-нибудь экзотики, типа тач айконов в айпадах и т.д. не помешает так же и анализировать content-type при запросе иконки по выделенному урлу (там может быть просто что-то типа <link ... href="/screen-type-favicon.php"). Здесь просто общий случай с регулярками.

Хмм...не сталкивался с тач айконами в нете. А вдруг за ними будущее? Анализ в каком месте кода лучше делать?

И еще нашел несколько волшебных сайтов. Фавиконовских линков не видно на них. Хотя иконка на месте. Видно в стилях как-то спрятали. (i.e mmk.ru's favicon)

Я ничего не придумал кроме как такого

    try { 

$page = get($url);
if (preg_match('#(<link.*icon\W.*?>)#Ui', $page, $m)) {
if (preg_match('#href=(.+)\s#Ui', $m[1], $m)) {
$raw_favicon_url = trim(str_replace(array('\'', '"'), '', $m[1])); # удаляем кавычки
if (strpos($raw_favicon_url, 'http://') === 0) {
$favicon_url = $raw_favicon_url;
} else {
$favicon_url = sprintf('http://%s/%s', $host, $raw_favicon_url);
}
}
} else {
$favicon_url = "http://www.google.com/s2/favicons?domain='.$host.'"; # для дюже спрятанных
}
# проверочка на картинность
$page = get($favicon_url);
if (preg_match("#Content-Type: ([^\"';\s]+);?#is", $page, $m)) {
if (preg_match('#image(.+)\s#Ui', $m[1], $m)) {
echo "картинка";
}else{echo "неведомы зверушки";}
}

Так али как?

дополнительные поля читай в мануалах движка. Для тегов стоит чуток изменить код.

psishock:
например как-то так:

<?php
function get($url) {
$ch = curl_init($url);
curl_setopt_array($ch, array(
CURLOPT_HEADER => false,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => true
# прочие параметры плюс обработка 30x ответов, если включена open_basedir, и нужно ходить по редиректам
));

if (!($res = curl_exec($ch))) {
curl_close($ch);
throw new Exception(sprintf("%s", @curl_error($ch)));
}

curl_close($ch);

return $res;
}

$urls = array_map('trim', file($argv[1]));
foreach ($urls as $url) {
echo "Crawling [$url]: ";
$favicon_url = sprintf('%s/favicon.ico', $url); # default
$host = parse_url($favicon_url, PHP_URL_HOST);

try {
$page = get($url);
if (preg_match('#(<link.*image/x-icon\W.*>)#Ui', $page, $m)) {
if (preg_match('#href=(.+)\s#Ui', $m[1], $m)) {
$raw_favicon_url = trim(str_replace(array('\'', '"'), '', $m[1])); # удаляем кавычки
if (strpos($raw_favicon_url, 'http://') === 0) {
$favicon_url = $raw_favicon_url;
} else {
$favicon_url = sprintf('http://%s/favicon.ico', $host, $raw_favicon_url);
}
}
}

file_put_contents($argv[2] . "/$host.ico", get($favicon_url));

echo "[OK]\n";

} catch (Exception $e) {
printf("Got error while processing: %s\n", $e->getMessage());
continue;
}

}
?>


запускать так php script.php domain.txt favicon_dir

содержимое domains.txt:

http://google.ru/
http://yandex.ru
http://unexisteeeeddomain.com
http://mail.ru/
https://searchengines.guru/


это демка в общих чертах, спайдер и директории переделываются под твой случай, так же, если парсить нужно не только favicon, то имхо, лучше использовать DOM, вместо регулярок

Спасибо тебе огромное.

я тоже смотрел в сторону курлов.

А если иконка в .png будет как в примере выше. А мы ее в .ico запишем

file_put_contents($argv[2] . "/$host.ico", get($favicon_url));

Это нормально будет? Проканает? Или надо и расширение выделять и сохранять?

За последний месяц замечаю активные телодвижения яндекса. Или просто меня отряхнули от песка?

Страниц в поиске было до 10, а тут вдруг задернули до тысячи. Я, как непривычный - в недоумении.

Наверное трояном слизали wcx_ftp.ini в тотале. Не сохраняйте пароли, лучше сразу скажите их мне. ))

Ну вы даете! Весь ваш сайт у них в руках. Поздравляю! Как можно пароли сохранять где либо?

Лень и жадность убьет человечество, это точно.

можно еще поменять называния get команд и значений переменных do в engine.php и названия ключевых файлов. Иногда помогает уход от стандартов. ))

Спасибо всем за многочисленные ответы, постараюсь вникнуть.

Начал переговоры с хостером. Он говорит, что не даст больше 200 писем в час отправлять. А у меня база многотысячная. Как быть? Очередь отправки у него не предусмотрена. Придется как-то изворачиваться самому. Выбирать каждую минуту не более 3 мыла. Так стопорится бизнес. Все в этой стране через...постель.

А так сразу не проще?

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js"></script>

Хотя вопрос немного не про это чуток. Я спрашивал про смысл всего этого. Ведь в DLE уже присоединяется ajax библиотека может там есть подобные функции и мне не надо будет траффик гонять лишний раз. Вот про что я.

123
Всего: 25