Dzisiaj zajmiemy się dość prostym i szybkim sposobem wyciągania danych z stron internetowych. Każdy programista trafi w jakimś momencie na taką chwilę kiedy będzie chciał pobrać jakieś konkretne dane przy pomocy połączenia CURL i wyrażeń regularnych. Przykładowa aplikacja będzie pobierać 30 Utworów Muzycznych z Poplisty Radia RMFFM nie będzie zawierać funkcji i klas.
CURL wykorzystywany jest często w dedykowanych aplikacjach internetowych do wykonywania jakiś konkretnych czynności w momencie kiedy nie mamy dostępu do API.
Wyrażenia regularne pomogą nam w przechwyceniu odpowiednich danych, które znajdują się w kodzie strony. Nie są proste do opanowania i są dość problematyczne jednak warto je umieć wykorzystać w praktyce.
Na samym początku musimy zerknąć do kodu RMF’u i znaleźć wyrażenie, którego szukamy. Interesuje nas Tytuł Utworu. Kod Strony jest dość prosty w zrozumieniu. Dodatkowo pewną wskazówką jest gdy po najechaniu na obrazek wyświetlają nam się nasze pożądane informacje. Możemy wywnioskować, że gdzieś w kodzie musi to być „zapisane”. Znajdując ten fragment i go pobierając mamy w pełni wykonane zadanie.
<div class="poplista-title">Wake Me Up</div>
I już wiemy co będziemy pobierać.
Pobieranie wyrażenia regularnego uzyskujemy dzięki wykorzystaniu funkcji preg_match_all i ciągu (.*?) . Warto tutaj pamiętać o rozróżnianiu znaków specjalnych takich jak , . = / itd. Każdy taki znak musi być poprzedzony \ ponieważ w końcu nie wiedzielibyśmy czy to jest jakaś regułka czy po prostu musi zostać. Takie zastosowanie pozwala funkcji rozróżnić tekst specjalny od nie specjalnego.
\<div class\=\"poplista\-title\"\>(.*?)\<\/div\>
Bardzo proste prawda? Dużo się nie napracowaliśmy, a wyrażenie jest już gotowe.
Przechodzimy do połączenia CURL
$data = '[URL='http://www.rmf.fm/au/?a=poplista'']http://www.rmf.fm/au/?a=poplista'[/URL];;
$ch = curl_init($data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$Strona = curl_exec($ch);
curl_close($ch);
Funkcje wykorzystane są bardzo proste do pojęcia nie wykorzystujemy tutaj żadnych nowych technologi wartych głębszego opisywania. Wynik całego połączenia mamy w zmiennej $Strona na nie właśnie będziemy pracować.
/mi na końcu oznacza, że m = napis będzie interpretowany linijka po linijce i = wielkość liter niema znaczenia
$data = '[URL='http://www.rmf.fm/au/?a=poplista'']http://www.rmf.fm/au/?a=poplista'[/URL];;
$ch = curl_init($data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$Strona = curl_exec($ch);
curl_close($ch);
preg_match_all("/\<div class\=\"poplista\-title\"\>(.*?)\<\/div\>/mi", $Strona, $Wynik);
Teraz czas na wyświetlenie wyników
$data = '[URL='http://www.rmf.fm/au/?a=poplista'']http://www.rmf.fm/au/?a=poplista'[/URL];;
$ch = curl_init($data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$Strona = curl_exec($ch);
curl_close($ch);
preg_match_all("/\<div class\=\"poplista\-title\"\>(.*?)\<\/div\>/mi", $Strona, $Wynik);
for($i=0;$i<count($Wynik[1]);$i++)
{
echo $Wynik[1][$i];
}
Wszystkie wyniki wyświetlane są w drugim elemencie tablicy. Jednak jeśli chcemy np. pobrać kilka elementów to będą wyświetlane w kolejnych elementach tablicy czyli $Wynik[2] .. $Wynik[3] itd. .
Na początku warto robić proste testy w pobieraniu różnych danych przechodząc z kolejnego projektu do kolejnego zwiększając poziom.
[CENTER][URL='http://www.youtube.com/watch?v=GmAdT37obpk']http://www.youtube.com/watch?v=GmAdT37obpk[/URL][/CENTER]