Revert "get favicon from icon atom feeds & search for icons not only in html head (closes #457)"

This reverts commit 882311d9ad.
This commit is contained in:
Andrew Dolgov 2012-05-17 22:58:08 +04:00
parent eb38af4ee4
commit 1bd11fdf95
2 changed files with 55 additions and 72 deletions

View File

@ -332,9 +332,9 @@
* @access public * @access public
* @return mixed The favicon URL, or false if none was found. * @return mixed The favicon URL, or false if none was found.
*/ */
function get_favicon_urls($url) { function get_favicon_url($url) {
$favicons = array(); $favicon_url = false;
if ($html = @fetch_file_contents($url)) { if ($html = @fetch_file_contents($url)) {
@ -350,27 +350,34 @@
break; break;
} }
# Limiting the search to head will not find when in body $entries = $xpath->query('/html/head/link[@rel="shortcut icon" or @rel="icon"]');
$entries = $xpath->query('//link[@rel="shortcut icon" or @rel="icon"]');
if (count($entries) > 0) { if (count($entries) > 0) {
foreach ($entries as $entry) { foreach ($entries as $entry) {
array_push($favicons, rewrite_relative_url($url, $entry->getAttribute("href"))); $favicon_url = rewrite_relative_url($url, $entry->getAttribute("href"));
break;
} }
} }
} }
array_push($favicons, rewrite_relative_url($url, "/favicon.ico")); if (!$favicon_url)
$favicon_url = rewrite_relative_url($url, "/favicon.ico");
return $favicons; return $favicon_url;
} // function get_favicon_urls } // function get_favicon_url
function validate_favicon($url, $feed) { function check_feed_favicon($site_url, $feed, $link) {
# print "FAVICON [$site_url]: $favicon_url\n";
$icon_file = ICONS_DIR . "/$feed.ico";
if (!file_exists($icon_file)) {
$favicon_url = get_favicon_url($site_url);
if ($favicon_url) {
// Limiting to "image" type misses those served with text/plain // Limiting to "image" type misses those served with text/plain
$contents = fetch_file_contents($url); // , "image"); $contents = fetch_file_contents($favicon_url); // , "image");
if (!$contents)
return false;
if ($contents) {
// Crude image type matching. // Crude image type matching.
// Patterns gleaned from the file(1) source code. // Patterns gleaned from the file(1) source code.
if (preg_match('/^\x00\x00\x01\x00/', $contents)) { if (preg_match('/^\x00\x00\x01\x00/', $contents)) {
@ -391,37 +398,20 @@
} }
else { else {
//error_log("check_feed_favicon: favicon_url=$favicon_url isa UNKNOWN type"); //error_log("check_feed_favicon: favicon_url=$favicon_url isa UNKNOWN type");
return false; $contents = "";
}
} }
$icon_file = ICONS_DIR . "/$feed.ico"; if ($contents) {
$fp = @fopen($icon_file, "w"); $fp = @fopen($icon_file, "w");
if ($fp) { if ($fp) {
fwrite($fp, $contents); fwrite($fp, $contents);
fclose($fp); fclose($fp);
chmod($icon_file, 0644); chmod($icon_file, 0644);
} }
return true;
} }
function check_feed_favicon($site_url, $feed, $link, $atom_icon) {
# print "FAVICON [$site_url]: $favicon_url\n";
if(!empty($atom_icon) && validate_favicon($atom_icon, $feed))
return;
$favicon_urls = array($atom_icon);
$favicon_urls = array_unique(array_merge($favicon_urls, get_favicon_urls($site_url)));
for ($i = 1; $i < count($favicon_urls); $i++) {
if (validate_favicon($favicon_urls[$i], $feed))
return;
} }
$favicon_urls = array_unique(array_merge($favicon_urls, get_favicon_urls(rewrite_relative_url($link, "/"))));
for (; $i < count($favicon_urls); $i++) {
if (validate_favicon($favicon_urls[$i], $feed))
return;
} }
} }

View File

@ -441,14 +441,7 @@
_debug("update_rss_feed: checking favicon..."); _debug("update_rss_feed: checking favicon...");
} }
if (!file_exists(ICONS_DIR . "/$feed.ico")) { check_feed_favicon($site_url, $feed, $link);
if ($use_simplepie) {
$atom_icon = $rss->get_favicon();
} else {
$atom_icon = $rss->channel["icon"];
}
check_feed_favicon($site_url, $feed, $link, $atom_icon);
}
if (!$registered_title || $registered_title == "[Unknown]") { if (!$registered_title || $registered_title == "[Unknown]") {