Salut voila je bosse actuellement sur un site permettant de referencer les flux rss et xml et j aurait besoin d un peut aide
En gros le code ci dessous permet de recuperer des urls , le probleme c’est qu’il y a une option en bas du code qui permet de bloquer les fichiers a pas indexer .
$banned_ext = array
(
“.xml”,
“.rss”
);
Moi de voudrais faire l’inverse , a la place de bloquer les extensions je voudrais que le code recherche justement ces extensions et seulement ces extensions , pouvez vous m’aider ?
<?
set_time_limit( 0 );
ini_set("memory_limit", 128 );
//strip HTML and Javascript
function html2txt($document){
$search = array('@<script[^>]*?>.*?</script>@si', // Strip out javascript
'@<style[^>]*?>.*?</style>@siU', // Strip style tags properly
'@<[\/\!]*?[^<>]*?>@si', // Strip out HTML tags
'@<![\s\S]*?--[ \t\n\r]*>@' // Strip multi-line comments including CDATA
);
$text = preg_replace($search, '', $document);
return $text;
}
//garble the data that we get from the website.
class spider_man
{
var $limit;
var $cache;
var $crawled;
var $banned_ext;
function spider_man( $url, $banned_ext, $limit )
{
$this->start = $url ;
$this->banned_ext = $banned_ext ;
$this->limit = $limit ;
if( !fopen( $url, "r") ) return false;
else $this->_spider( $url );
}
function _spider( $url )
{
$this->cache = @file_get_contents( urldecode( $url ) );
if( !$this->cache ) return false;
$this->crawled[] = urldecode( $url ) ;
preg_match_all( "#href=\"(https?://[&=a-zA-Z0-9-_./]+)\"#si", $this->cache, $links );
if ( $links ) :
foreach ( $links[1] as $hyperlink )
{
$this->limit--;
if( ! $this->limit ) return;
if( $this->is_valid_ext( trim( $hyperlink ) ) and !$this->is_crawled( $hyperlink ) ) :
$this->crawled[] = $hyperlink;
echo "Crawling $hyperlink<br />\n";
unset( $this->cache );
$this->_spider( $hyperlink );
endif;
}
endif;
}
function is_valid_ext( $url )
{
foreach( $this->banned_ext as $ext )
{
if( $ext == substr( $url, strlen($url) - strlen( $ext ) ) ) return false;
}
return true;
}
function is_crawled( $url )
{
return in_array( $url, $this->crawled );
}
}
$banned_ext = array
(
".xml",
".rss"
);
$spider = new spider_man( 'http://www.google.com', $banned_ext, 10000 );
print_r( $spider->crawled );
?>
Edité le 23/03/2010 à 05:56