Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Pobieranie opisów z filmweb
Forum PHP.pl > Forum > Przedszkole
kuba_pilach
Witam, znalazłem skrypt pobierania opisów z filmweb na:
http://forum.webhelp.pl/php-i-bazy-danych/...em-t224420.html

I jest to następujący kod:
  1. <?php
  2. $url = 'http://www.filmweb.pl/film/Punki+z+Salt+Lake+City-1998-39126';
  3. $useragent = 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:0.9.3) Gecko/20010801 ';
  4. $ch = curl_init($url); // zaladuje sie reklama i utworzy ciastko ze juz wysiwietlil tobie reklame
  5. curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
  6. curl_setopt($ch, CURLOPT_COOKIEFILE, dirname(__FILE__) . '/cookies.txt');
  7. curl_setopt($ch, CURLOPT_COOKIEJAR, dirname(__FILE__) . '/cookies.txt');
  8. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  9. $wynik = curl_exec($ch);
  10. curl_close($ch);
  11. // tutaj sie zaladuje poprawna strona
  12. $ch = curl_init($url);
  13. curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
  14. curl_setopt($ch, CURLOPT_COOKIEFILE, dirname(__FILE__) . '/cookies.txt');
  15. curl_setopt($ch, CURLOPT_COOKIEJAR, dirname(__FILE__) . '/cookies.txt');
  16. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  17. $wynik = curl_exec($ch);
  18. curl_close($ch);
  19.  
  20. preg_match( '#<span class="filmDescrBg">(.*?)</span>#', $wynik,$opis );
  21. echo $opis[0];
  22. ?>


I wyświetla następujący błąd:
Kod
Fatal error: Call to undefined function curl_init() in C:\serwer\apache\htdocs\filmy.php on line 5


Wiecie o co może chodzić?
Magic WWW
Biblioteka cURL nie jest zainstalowana na twoim serwerze wink.gif

Edit: jeśli korzystasz z XAMPP polecam małą lekturę:

http://www.tildemark.com/programming/php/e...windows-xp.html
kuba_pilach
A więc usunąłem ";" przed danym extension w php.ini i zrestartowałem apacha...
A więc problem w tym, że teraz nic nie pokazuje... Wie ktoś w czym problem?
Podam jeszcze raz kod:
  1. <?php
  2. $url = 'http://www.filmweb.pl/film/Punki+z+Salt+Lake+City-1998-39126';
  3. $useragent = 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:0.9.3) Gecko/20010801 ';
  4. $ch = curl_init($url); // zaladuje sie reklama i utworzy ciastko ze juz wysiwietlil tobie reklame
  5. curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
  6. curl_setopt($ch, CURLOPT_COOKIEFILE, dirname(__FILE__) . '/cookies.txt');
  7. curl_setopt($ch, CURLOPT_COOKIEJAR, dirname(__FILE__) . '/cookies.txt');
  8. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  9. $wynik = curl_exec($ch);
  10. curl_close($ch);
  11. // tutaj sie zaladuje poprawna strona
  12. $ch = curl_init($url);
  13. curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
  14. curl_setopt($ch, CURLOPT_COOKIEFILE, dirname(__FILE__) . '/cookies.txt');
  15. curl_setopt($ch, CURLOPT_COOKIEJAR, dirname(__FILE__) . '/cookies.txt');
  16. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  17. $wynik = curl_exec($ch);
  18. curl_close($ch);
  19.  
  20. preg_match( '#<span class="filmDescrBg">(.*?)</span>#', $wynik,$opis );
  21. echo $opis[0];
  22. ?>
Magic WWW
Pobieranie wyniku w pierwszym połączeniu jest bez sensu. Spróbuj podejrzeć przed preg_match jaki jest wynik. Jeśli jest w porządku to zrób coś takiego:
  1. echo '<pre>';
  2. var_dump($opis);
  3. echo '</pre>';
kuba_pilach
Gdy zrobiłem:
  1. echo $wynik;


To wyświetliło mi całą stronę... Więc na końcu pliku przed znacznikiem ?>
Dałem to co napisałeś i wyświetliło:
Kod
array(0) {
}

Więc co gra?
Magic WWW
Czyli problem tkwi w funkcji preg_match, spróbuj zrobić to przez takie wyrażenie:
Kod
preg_match(#<span class="filmDescrBg"(.*?)>(.*?)</span>#si', $wynik, $opis);

kuba_pilach
Już mi działa... Tako wygląda teraz mój plik:
  1. <?php
  2. ?>
  3. <html>
  4. <head>
  5. <meta http-equiv=content-language content=pl>
  6. <meta http-equiv=content-type content="text/html; charset=utf-8">
  7. </head>
  8. <body>
  9. <?php
  10.  
  11. //$url = 'http://www.filmweb.pl/film/Punki+z+Salt+Lake+City-1998-39126';
  12. $url = 'http://www.filmweb.pl/Shrek';
  13. $useragent = 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:0.9.3) Gecko/20010801 ';
  14. $ch = curl_init($url); // zaladuje sie reklama i utworzy ciastko ze juz wysiwietlil tobie reklame
  15. curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
  16. curl_setopt($ch, CURLOPT_COOKIEFILE, dirname(__FILE__) . '/cookies.txt');
  17. curl_setopt($ch, CURLOPT_COOKIEJAR, dirname(__FILE__) . '/cookies.txt');
  18. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  19. $wynik = curl_exec($ch);
  20. curl_close($ch);
  21. // tutaj sie zaladuje poprawna strona
  22. $ch = curl_init($url);
  23. curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
  24. curl_setopt($ch, CURLOPT_COOKIEFILE, dirname(__FILE__) . '/cookies.txt');
  25. curl_setopt($ch, CURLOPT_COOKIEJAR, dirname(__FILE__) . '/cookies.txt');
  26. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  27. $wynik = curl_exec($ch);
  28. curl_close($ch);
  29. preg_match( '#<span class=filmDescrBg property=(.*?)>(.*?)</span>#',$wynik,$opis);
  30. preg_match('#<th>scenariusz:</th><(.*?)>(.*?)</(.*?)>#',$wynik,$scenariusz);
  31. preg_match('#<div class=basic-info-wrapper><table><tr><th>reżyseria:</th><td><a href=(.*?) title=(.*?) rel=(.*?)>(.*?)</a></td></tr><tr><th>scenariusz:</th><td><a href=(.*?) title=(.*?)>(.*?)</a></td></tr>#',$wynik,$info);
  32. preg_match('#<tr><th>premiera:</th><td><span>(.*?)</span>(.*?)<span id=filmPremiereWorld style=(.*?)>(.*?)</span></td></tr><tr><th>produkcja:</th><td><a href=(.*?)>(.*?)</a></td></tr><tr><th>gatunek:</th><td><a href=(.*?)>(.*?)</a>, <a href=(.*?)>(.*?)</a></td></tr></table>#',$wynik,$infodwa);
  33. preg_match('#<div class=posterLightbox><a rel=(.*?) href=(.*?) class=film_mini><img src=(.*?) alt=(.*?) title=(.*?)>#',$wynik,$obrazek);
  34. $info = str_replace("href", "", $info[0]);
  35. $infodwa = str_replace("href", "", $infodwa[0]);
  36. $obrazek = str_replace("href", "", $obrazek[0]);
  37. ?>
  38. <center>
  39. <?php
  40. echo $obrazek;
  41. ?>
  42. </div>
  43. <?php
  44. echo $info;
  45. ?>
  46. <table>
  47. <?php
  48. echo $infodwa;
  49. ?>
  50. </table>
  51. <table>
  52. <tr>
  53. <td width="400">
  54. <?php
  55. echo $opis[0];
  56. ?>
  57. </td>
  58. </tr>
  59. </table>
  60. </center>
  61. </body>
  62. </head>


I działa, pobiera dla danego linku info... Teraz mam do was prośbę i pytanie w jednym...
Chciałbym zrobić domową bazę filmową tzn. będzie się dodawało filmy, które mamy i skrypt ma pobierać dane z filmwebu i je wpisać do bazy...
Ale linki różnie wyglądają, naprzykład:
http://www.filmweb.pl/Shrek

Lecz są i takie:
http://www.filmweb.pl/2.Shrek

A więc moje pytanie: macie jakieś pomysły, by jakoś to ogarnąć?
Dzięki z góry

Odświeżam... Wie ktoś jak rozwiązać ten problem?
potreb
Kiedyś robiłem sobie skrypt do katalogowanie filmów. W załączeniu do ściągnięcia: http://www.sendspace.pl/file/03f4e0924fde811ba87ce0f
wNogachSpisz
Zamiast CURL użyj PEAR:HTTP_Request
Zamiast preg_match() użyj PHP:DOM
kuba_pilach
A powiesz, gdzie i jak się tego używa?
A i nie które adresy wyglądają tak:
www.filmweb.pl/Shrek.Trzeci

I to właśnie mnie wkurza. Że nie potrafię zrobić tak, by za każdym razem pobierał dobre dane z filmwebu...
Czekam na odpowiedź i dzięki z góry

Próbuję, ale nadal nic :/
Pomocy!!! Dajcie mi jakiś przykład korzystania z tych sposobów
soska66
Moze czegos nie wiem albo nigdy nie mialem przyjemnosci spotkac sie z rozwiazaniem takiego problemu, ale wg mnie bezposrednio i automatycznie sie tego zrobic nie da. Musialbys podawac jako parametr do twojego kodu dokladne ID filmu, czyli w przypadku tych odnosnikow 2.Shrek albo Shrek.Trzeci.

No bo jak inaczej? Wywolywac wyszukiwanie i parsowac pierwszy wynik? (zakladajac, ze pierwszy wynik to wlasnie ten wlasciwy - malo to filmow o tych samym tytulach)
kuba_pilach
Odświeżam staaaary temat... Wie ktoś może, jak to zrobić?
Również dobrze mógłbym sprawdzać czy dana nazwa jest true itd...
Ale chyba to nie wyjdzie...
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.