Отново preg_match_all проблем

Acho

Registered
HTML:
<li class="source-youtube 
external 
 externalvideo">
                                
    <a href="/music/Pretty+Ricky/+videos/+1-fgT1Qt6NBa8">        <span class="videoStill videoStillMedium videoStillYouTube videoStillYouTubeMedium">
    <span class="still">
        <img alt="" src="http://img.youtube.com/vi/fgT1Qt6NBa8/3.jpg" />
    </span>
    <span class="play">Play</span>
</span>                 <strong class="title">Slideshow</strong>
            </a>    
    
            </li><li class="source-youtube 
external 
 externalvideo">
                                
    <a href="/music/Pretty+Ricky/+videos/+1-SuKNJ1WTaWs">        <span class="videoStill videoStillMedium videoStillYouTube videoStillYouTubeMedium">
    <span class="still">
        <img alt="" src="http://img.youtube.com/vi/SuKNJ1WTaWs/1.jpg" />
    </span>
    <span class="play">Play</span>
</span>                 <strong class="title">lalala</strong>
            </a>    
    
            </li>

Има x на брой <li>-та в един списък.

За всяко едно <li> трябва да взема следната информация:
- информацията в тага <strong class="title">
- http://img.youtube.com/vi/SuKNJ1WTaWs/1.jpg от този URL адрес трябва да взема SuKNJ1WTaWs

+1 за който ми помогне. Ще съм много благодарен.
 
Предварително да кажа, че решението не е перфектно!

Копирах си HTML кода в един файл и го чета от там, при теб вероятно е различно. За да вземеш двата вида резултата едновременно, трябва да имаш две отделни групи шаблони по които търсиш. Групите се заграждат в кръгли скоби и се обединяват чрез |

На края на шаблона, има три модификатора - msi

m - multiline - указваш, че текста (може) да е на много редове, така че да не търси само на един ред

s - отново е свързано с новите редове и укзава на . да търси и в новите редове, т.е. да не спира като мине на нов ред

i - да не прави разлика между главни и малки букви

PHP:
<?php
preg_match_all(
	'/'.
	'(<strong class="title">(\w+)<\/strong>)'.
	'|'.
	'(http:\/\/img\.youtube\.com\/vi\/(.*?)\/(\d+)\.jpg)'.
	'/msi', 
	file_get_contents("source.html"), 
	$results);


foreach($results[2] as $key=>$title){

	if(!empty($title)){
		echo "Title: ".$title."<br />";
		echo "Code: ".$results[4][$key-1]."<br />";
		echo "<hr />";
	}
}
 
Благодаря за отговора.

Тествах, попромених това онова, но се получава се някакво разминаване в заглавията + че не се селектират всички възможни клипове.

Оттук се взима съдържанието:
http://www.last.fm/music/Bob+Marley/+videos

А ето го и кода ми:

PHP:
<?php


$izpulnitel2 = "Bob+Marley";
while($i != 6):

	//start - get page information
	$url = 'http://www.last.fm/music/'.$izpulnitel2.'/+videos?page='.$i.'';
	$lastfm = file_get_contents($url);
	//end - get page information
	$word = preg_match_all(
        '/'.
		'(http:\/\/img\.youtube\.com\/vi\/(.*?)\/(\d+)\.jpg)'.
        '|'.
        '(<strong class="title">(.*?)<\/strong>)'.        
        '/msi', 
        $lastfm, 
        $results);


foreach($results[2] as $key=>$code){

        if(!empty($code)){
                echo "Title: ".$results[5][$key-1]."<br />";
                echo "Code: ".$code."<br />";
                echo "Page: $i<hr />";
        }
}

	$i++;
endwhile;
?>
 
Оказа се, че картинките се взимат от два различни сървъра (домейна), а в първоначалния ти код бяха само от img.youtube.com, а за някой от картинките се изполва i.ytimg.com

Заради добавените нови шаблони, резултатите малко се променят, вече взимаме кода от седмия елемент (индекс 6) на масива с резултатите.

PHP:
<?php
preg_match_all(
	'/'.
	'(<strong class="title">(.*?)<\/strong>)'.
	'|'.
	'(http:\/\/(i|img)\.(youtube|ytimg)\.com\/vi\/(.*?)\/(\d+)\.jpg)'.
	'/msi', 
	file_get_contents('http://www.last.fm/music/Bob+Marley/+videos?page=2'), 
	$results);

foreach($results[2] as $key=>$title){
	if(!empty($title)){
		echo "Title: ".$title."<br />";
		echo "Code: ".$results[6][$key-1]."<br />";
		echo "<hr />";
	}
}
 
не мога да разбера за какво ти е това, сайта си има толкова подробно api http://www.last.fm/api
 
Абе приятел, като има API, що трябваше да парсваме тоя HTML? Много по-лесно и удобно щеше да е с XML-а от апито. Ама и аз не гледам какво има по тия сайтове.

PHP:
<?php

$xml = simplexml_load_file('http://ws.audioscrobbler.com/2.0/?method=artist.gettopalbums&artist=Bob+Marley&api_key=b25b959554ed76058ac220b7b2e0a026');

echo "\n<ul>";

foreach($xml->topalbums->album as $album){
	echo "\n\t<li><img src=\"".$album->image[1]."\" />".$album->name."</li>";
}

echo "\n</ul>\n";
 

Back
Горе