Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: wyciaganie pewnych danych z strony filmweb.pl
Forum PHP.pl > Forum > Przedszkole
alpin
witam, pewien skrpyt ulatwil by mi znaczaco zycie ale moja wiedza jest zbyt skromna by go napisac sad.gif
chodzi mi o to zeby ze strony http://www.filmweb.pl/ wyciagnac pare danych ... na forum znalazlem skrypt ktory pobiera opis do filmu przy wejsciowych danych: nazwa filmu, rok produkcji, oto on:
  1. <?php
  2. /**
  3. * Argumenty:
  4. * string $parTitle - tytuł filmu,
  5. * int $year - rok produkcji,
  6. * string $cache - opcjonalny plik cache (na opisy wcześniej szukanych filmów)
  7. * Zwraca:
  8. * array $plots
  9. **/
  10. function getPlots( $parTitle, $year, $cache = false )
  11. {
  12.  $plots = array();
  13.  
  14.  if( $cache != false )
  15.  {
  16. if( $data = @file_get_contents( $cache ) )
  17. {
  18.  $data = unserialize( $data );
  19.  
  20.  if( array_key_exists( $parTitle, $data ) )
  21.  {
  22. return $data[ $parTitle ];
  23.  }
  24.  else
  25.  {
  26. foreach( $data as $name => $save )
  27. {
  28.  if( strcasecmp( $name, $parTitle ) == 0 )
  29.  {
  30. return $save;
  31.  }
  32. }
  33.  }
  34. }
  35.  }
  36.  
  37.  $title = preg_replace( '/^(the|el|le|a) (.+)/i', '\\2, \\1', $parTitle );
  38.  
  39.  $url1 = 'http://www.filmweb.pl/Find?query=' . urlencode( $title ) . '&category=1&submit=szukaj';
  40.  
  41.  $data = file( $url1 );
  42.  
  43.  if( count( $data ) > 0 )
  44.  {
  45. foreach( $data as $n => $line )
  46. {
  47.  if( ( stripos( $line, $title ) !== false ) and ( strpos( $line, (string)$year ) !== false ) )
  48.  {
  49. if( preg_match( '/href="([^"]+)"/', $line, $out ) )
  50. {
  51.  $url2 = $out[ 1 ];
  52.  break;
  53. }
  54.  }
  55.  if( strpos( $line, 'opisy' ) !== false )
  56.  {
  57. if( preg_match( '/href="([^"]+)"/', $line, $out ) )
  58. {
  59.  $url3 = $out[ 1 ];
  60.  break;
  61. }
  62.  }
  63. }
  64.  
  65. if( isset( $url2 ) )
  66. {
  67.  $data = file( $url2 );
  68.  
  69.  foreach( $data as $n => $line )
  70.  {
  71. if( strpos( $line, 'opisy' ) !== false )
  72. {
  73.  if( preg_match( '/href="([^"]+)"/', $line, $out ) )
  74.  {
  75. $url3 = $out[ 1 ];
  76. break;
  77.  }
  78. }
  79.  }
  80. }
  81.  
  82. if( isset( $url3 ) )
  83. {
  84.  $data = implode( '', file( $url3 ) );
  85.  
  86.  if( preg_match_all( '/<li><div align="justify">(.+)<\/div><\/li>/', $data, $out ) )
  87.  {
  88. $plots = $out[ 1 ];
  89.  }
  90. }
  91. }
  92.  
  93.  if( count( $plots ) > 0 )
  94.  {
  95. foreach( $plots as $n => $plot )
  96. {
  97.  $plots[ $n ] = trim( preg_replace( '/\[.+\]/', '', str_replace( array( "\r", "\n", '<br/>' ), '', $plot, $ch ) ) );
  98. }
  99. if( $cache != false )
  100. {
  101.  if( $data = @file_get_contents( $cache ) )
  102.  {
  103. $data = unserialize( $data );
  104.  
  105. if( !array_key_exists( $title, $data ) )
  106. {
  107.  $data[ $parTitle ] = $plots;
  108. }
  109.  }
  110.  else
  111.  {
  112. $data = array();
  113. $data[ $parTitle ] = $plots;
  114.  }
  115.  file_put_contents( $cache, serialize( $data ) );
  116. }
  117.  }
  118.  return $plots;
  119. }
  120.  
  121.  
  122. print_r( getPlots( 'pasja', 2004) );
  123. ?>


posluze sie na przykladzie co chcem osiagnac, np http://czlowiek.pies.filmweb.pl/

i chcialbym wyciagnac po kolei:

  1. <?php
  2.  
  3. $polski_tytul="Człowiek pies";
  4. $oryginalny_tytul="Danny the Dog";
  5. $produkcja="Francja,Hongkong,USA,Wielka Brytania";
  6. $gatunek="Sensacyjny,Thriller";
  7. $data_premiery_polska="2005-07-15";
  8. $data_premiery_swiat="2005-02-02";
  9. $reżyseria="Louis Leterrier";
  10. $scenariusz="Robert Mark Kamen,Luc Besson";
  11. $zdjęcia="Pierre Morel (I)"; 
  12. $muzyka="Massive Attack";
  13. $czas_trwania="103";
  14.  
  15. ?>


Napewno jest troche tego pisania ale moze ktos chcialby sprobowac to napisac ...
W kazdym razie za kazda podpowiedz, za kazdy kawalek kodu bede wdzieczny ..
dtb
http://www.php.net/manual/pl/ref.pcre.php

~EDIT: A moze by tak paserem XML? - sposób wg. mnie prostrzy niż regEx'em. Polecam SimpleXML
mike
~dtb ile razy mamy Ci powtarzać: Nie nabijaj postów.

Masz problemy ze wzrokiem? Chyba tak lub po prostu nie czytasz tego co powyżej!
Przecież ~alpin juz korzysta z wyrażeń regularnych. Więc po kiego wała podajesz linka. Opanuj się człowieku, nie każdy musi mieć ilość postów w tysiącach liczoną.

Normalnie dajemy ostrzeżenie po kilku zwróconych uwagach.
Ale dla Ciebie właśnie ustanawiam wyjątek: Za każdego następnego nabitego posta dostaniesz ostrzeżenie. Co Ty na to? (pytanie retoryczne)

(wszelkie komentarze na PW, wracamy do tematu)
crash
Powyższą funkcję napisałem tylko do pobierania opisów filmów (resztę danych mam już w bazie więc nie było potrzeby pobieranie też tego). Żeby funkcja ta pobierała te dane które chcesz trzebaby ją w sumie całą przerobić, jak będę miał chwilkę czasu może coś napiszę...

-- edit:
http://forum.php.pl/index.php?showtopic=41...=0&#entry227832
Na większość filmów działa poprawnie...
alpin
Naprawde Wielkie dzieki Crash, o to mi chodzilo, bardzo mi sie podoba, wisze Ci duże piwko .. winksmiley.jpg

P.S. Probowalem przerobic ta funkcje do pobierania opisow na curla ale nie wyszlo mi, niestety ... Bylbym wdzieczny zebys jeszcze ta funkcje dopisal w curlu, z gory dziekuje.

Mam tylko jeszcze jedno pytanie ... a mozliwe jest jeszcze od strony technicznej zeby skrypt zapisywal jeszcz obrazek? (w tym przypadku chodzi mi o okladke) a jeżeli tak, to w jaki sposob mozna to zrobic ?
b4x
a np ; dałoby rade przerobic to na inne potrzeby ? smile.gif

Np wyciaganie linków + opisów z jportala :]
crash
Cytat(alpin @ 2006-02-01 00:27:32)
Naprawde Wielkie dzieki Crash, o to mi chodzilo, bardzo mi sie podoba, wisze Ci duże piwko .. winksmiley.jpg

Gdybym od każdego kto obiecuje mi piwko dostawał je to znowu wróciłbym do alkoholizmu :roll2:

Cytat(alpin @ 2006-02-01 00:27:32)
P.S. Probowalem przerobic ta funkcje do pobierania opisow na curla ale nie wyszlo mi, niestety ... Bylbym wdzieczny zebys jeszcze ta funkcje dopisal w curlu, z gory dziekuje.

Tutaj umieściłem funkcję getData() zamień funkcję file() na właśnie tą w funkcji getPlots() (bo getMovieInfo() już jej używa) i będzie wszystko ładnie śmigać z CURL'em.

Cytat(alpin @ 2006-02-01 00:27:32)
Mam tylko jeszcze jedno pytanie ... a mozliwe jest jeszcze od strony technicznej zeby skrypt zapisywal jeszcz obrazek? (w tym przypadku chodzi mi o okladke) a jeżeli tak, to w jaki sposob mozna to zrobic ?

Zrobię małą aktualizację jak będę mieć chwilkę czasu...

Edit: Zrobione. Tutaj możesz sobie pobrać rozbudowaną wersję...
alpin
Juz wczesniej zamienialem ta funkcje getData na file i cos nie dokonca dziala poprawnie, przynajmniej u mnie, dlatego poprosilem Ciebie o przerobienie. Kod przerobilem tak:
  1. <?php
  2. /**
  3. * Argumenty:
  4. * string $parTitle - tytuł filmu,
  5. * int $year - rok produkcji,
  6. * string $cache - opcjonalny plik cache (na opisy wcześniej szukanych filmów)
  7. * Zwraca:
  8. * array $plots
  9. **/
  10. function getData( $url, $type = 'array' )
  11. {
  12.  $data = '';
  13.  
  14.  if( !extension_loaded( 'curl' ) )
  15.  {
  16. @dl( 'curl' );
  17.  }
  18.  
  19.  if( extension_loaded( 'curl' ) )
  20.  {
  21. $curl = curl_init();
  22.  
  23. curl_setopt( $curl, CURLOPT_URL, $url );
  24. curl_setopt( $curl, CURLOPT_HEADER, false );
  25. curl_setopt( $curl, CURLOPT_FOLLOWLOCATION, true );
  26. curl_setopt( $curl, CURLOPT_FORBID_REUSE, true );
  27. curl_setopt( $curl, CURLOPT_FRESH_CONNECT, true );
  28. curl_setopt( $curl, CURLOPT_RETURNTRANSFER, true );
  29. curl_setopt( $curl, CURLOPT_TIMEOUT, 25 );
  30.  
  31. $data = curl_exec( $curl );
  32.  
  33. curl_close( $curl );
  34.  }
  35.  else
  36.  {
  37. $data = file( $url );
  38.  }
  39.  
  40.  if( ( $type == 'array' ) and !is_array( $data ) )
  41.  {
  42. $data = explode( "\n", $data );
  43.  }
  44.  
  45.  return $data;
  46. }
  47.  
  48.  
  49. function getPlots( $parTitle, $year, $cache = false )
  50. {
  51.  $plots = array();
  52.  
  53.  if( $cache != false )
  54.  {
  55. if( $data = @file_get_contents( $cache ) )
  56. {
  57.  $data = unserialize( $data );
  58.  
  59.  if( array_key_exists( $parTitle, $data ) )
  60.  {
  61. return $data[ $parTitle ];
  62.  }
  63.  else
  64.  {
  65. foreach( $data as $name => $save )
  66. {
  67.  if( strcasecmp( $name, $parTitle ) == 0 )
  68.  {
  69. return $save;
  70.  }
  71. }
  72.  }
  73. }
  74.  }
  75.  
  76.  $title = preg_replace( '/^(the|el|le|a) (.+)/i', '\\2, \\1', $parTitle );
  77.  
  78.  $url1 = 'http://www.filmweb.pl/Find?query=' . urlencode( $title ) . '&category=1&submit=szukaj';
  79.  
  80.  $data = getData( $url1 );
  81.  
  82.  if( count( $data ) > 0 )
  83.  {
  84. foreach( $data as $n => $line )
  85. {
  86.  if( ( stripos( $line, $title ) !== false ) and ( strpos( $line, (string)$year ) !== false ) )
  87.  {
  88. if( preg_match( '/href="([^"]+)"/', $line, $out ) )
  89. {
  90.  $url2 = $out[ 1 ];
  91.  break;
  92. }
  93.  }
  94.  if( strpos( $line, 'opisy' ) !== false )
  95.  {
  96. if( preg_match( '/href="([^"]+)"/', $line, $out ) )
  97. {
  98.  $url3 = $out[ 1 ];
  99.  break;
  100. }
  101.  }
  102. }
  103.  
  104. if( isset( $url2 ) )
  105. {
  106.  $data = getData( $url2 );
  107.  
  108.  foreach( $data as $n => $line )
  109.  {
  110. if( strpos( $line, 'opisy' ) !== false )
  111. {
  112.  if( preg_match( '/href="([^"]+)"/', $line, $out ) )
  113.  {
  114. $url3 = $out[ 1 ];
  115. break;
  116.  }
  117. }
  118.  }
  119. }
  120.  
  121. if( isset( $url3 ) )
  122. {
  123.  $data = implode( '', getData( $url3 ) );
  124.  
  125.  if( preg_match_all( '/<li><div align="justify">(.+)<\/div><\/li>/', $data, $out ) )
  126.  {
  127. $plots = $out[ 1 ];
  128.  }
  129. }
  130. }
  131.  
  132.  if( count( $plots ) > 0 )
  133.  {
  134. foreach( $plots as $n => $plot )
  135. {
  136.  $plots[ $n ] = trim( preg_replace( '/\[.+\]/', '', str_replace( array( "\r", "\n", '<br/>' ), '', $plot, $ch ) ) );
  137. }
  138. if( $cache != false )
  139. {
  140.  if( $data = @file_get_contents( $cache ) )
  141.  {
  142. $data = unserialize( $data );
  143.  
  144. if( !array_key_exists( $title, $data ) )
  145. {
  146.  $data[ $parTitle ] = $plots;
  147. }
  148.  }
  149.  else
  150.  {
  151. $data = array();
  152. $data[ $parTitle ] = $plots;
  153.  }
  154.  file_put_contents( $cache, serialize( $data ) );
  155. }
  156.  }
  157.  return $plots;
  158. }
  159.  
  160. print_r( getPlots( 'Poranek kojota', 2005) );
  161.  
  162. ?>

i zwraca opisy tylko ze wszystkie opisy sa jako jeden element tablicy ...

A pobieranie adresu obrazke czemus mi niestety nie dziala ;( probowalem na paru filmach
crash
Zmień (tutaj linia 126):
  1. <?php
  2. if( preg_match_all( '/<li><div align="justify">(.+)<\/div><\/li>/', $data, $out ) )
  3. ?>

Na:
  1. <?php
  2. if( preg_match_all( '/<li><div align="justify">(.+?)<\/div><\/li>/', $data, $out ) )
  3. ?>
alpin
Ok, dziala winksmiley.jpg A u Ciebie wyswietla adres obrazka ?
crash
Sprawdziłem na kilkudziesięciu tytułów i działa dobrze. Problem tkwi w pliku cache. Usuń go...
alpin
Wszystko juz dziala, wielkie dzieki za wszystko, pozdrawiam
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.