Skip to content
Snippets Groups Projects
Commit 520a6560 authored by Julian Maurice's avatar Julian Maurice
Browse files

hl #18130 Fix LastFm webscrapping code

Use Zend_Dom_Query
parent 1b102161
Branches
Tags
4 merge requests!715Master,!651Master,!647Stable,!646Hotline 6.60
......@@ -219,43 +219,46 @@ class Class_WebService_Lastfm extends Class_WebService_Abstract {
$url=str_replace(" ","+",$url);
$data = self::getHttpClient()->open_url($url);
// Bloc des albums
$pos=strPos($data,'<ul class="albums',0);
if(!$pos) return false;
$posfin=strPos($data,'</ul>"',$pos);
$data=substr($data,$pos,($posfin-$pos));
while(true)
{
$pos=strPos($data,'<div class="resContainer">');
if(!$pos) break;
$index=count($albums);
// Vignette
$pos=strPos($data,'src=',$pos)+5;
$posfin=strPos($data,'"',$pos);
$albums[$index]["vignette"]=substr($data,$pos,($posfin-$pos));
// Titre
$posfin=strPos($data,'</a>',$posfin);
for($pos=$posfin; $data[$pos] != ">"; $pos--);
$pos=$pos+1;
$albums[$index]["titre"]=trim(substr($data, $pos,($posfin-$pos)));
// date et nbre de pistes
$pos=strpos($data,'<p class="label">',$posfin);
if($pos)
{
$posfin=strpos($data,'</p>',$pos);
$bloc=substr($data,$pos,($posfin-$pos));
$bloc=str_replace("Released","Sortie le",$bloc);
$bloc=str_replace("track","titre",$bloc);
$elem=explode('<br />',$bloc);
for($i=0; $i < count($elem); $i++) $elem[$i]=trim(strip_tags($elem[$i]));
$albums[$index]["infos"]=$elem;
$dom = new Zend_Dom_Query($data);
$elements = $dom->queryXpath('//ul[contains(@class,"albums")]/li');
$albums = [];
foreach ($elements as $element) {
$album = [];
$dom = $dom->setDocumentHtml($element->ownerDocument->saveHtml($element));
$titles = $dom->query('.album-item-details a.link-reference h3');
foreach ($titles as $title) {
if (isset($title)) {
$album['titre'] = $title->textContent;
}
}
// Eliminer le bloc
$data = substr($data,$posfin);
$covers = $dom->query('a.album-item-cover img');
foreach ($covers as $cover) {
if (isset($cover) && isset($cover->attributes)) {
$album['vignette'] = $cover->attributes->getNamedItem('src')->value;
}
}
$release_dates = $dom->query('.album-item-details time');
foreach ($release_dates as $release_date) {
if (isset($release_date) && isset($release_date->attributes)) {
$date = $release_date->attributes->getNamedItem('datetime')->value;
$date = strftime('%d/%m/%Y', strtotime($date));
$album['infos'][] = "Sortie le $date";
}
}
$tracks_counts = $dom->query('.album-item-details span[itemprop="numTracks"]');
foreach ($tracks_counts as $tracks_count) {
if (isset($tracks_count)) {
$album['infos'][] = $tracks_count->textContent . " titres";
}
}
$albums[] = $album;
}
//tracedebug($albums,true);
return $albums;
}
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment