Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> wyciaganie pewnych danych z strony filmweb.pl
alpin
post
Post #1





Grupa: Zarejestrowani
Postów: 79
Pomógł: 1
Dołączył: 15.03.2004

Ostrzeżenie: (10%)
X----


witam, pewien skrpyt ulatwil by mi znaczaco zycie ale moja wiedza jest zbyt skromna by go napisac (IMG:http://forum.php.pl/style_emoticons/default/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 ..
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 11)
dtb
post
Post #2





Grupa: Zarejestrowani
Postów: 476
Pomógł: 1
Dołączył: 5.11.2005
Skąd: Bieruń city

Ostrzeżenie: (0%)
-----


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

Ten post edytował dtb 28.01.2006, 11:43:07
Go to the top of the page
+Quote Post
mike
post
Post #3





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


~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)
Go to the top of the page
+Quote Post
crash
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 2 196
Pomógł: 2
Dołączył: 17.01.2004
Skąd: Sosnowiec

Ostrzeżenie: (0%)
-----


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...
Go to the top of the page
+Quote Post
alpin
post
Post #5





Grupa: Zarejestrowani
Postów: 79
Pomógł: 1
Dołączył: 15.03.2004

Ostrzeżenie: (10%)
X----


Naprawde Wielkie dzieki Crash, o to mi chodzilo, bardzo mi sie podoba, wisze Ci duże piwko .. (IMG:http://forum.php.pl/style_emoticons/default/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 ?

Ten post edytował alpin 1.02.2006, 03:39:10
Go to the top of the page
+Quote Post
b4x
post
Post #6





Grupa: Zarejestrowani
Postów: 658
Pomógł: 95
Dołączył: 20.12.2005
Skąd: N54,35° E18,63° (Gdańsk)

Ostrzeżenie: (0%)
-----


a np ; dałoby rade przerobic to na inne potrzeby ? (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Np wyciaganie linków + opisów z jportala :]
Go to the top of the page
+Quote Post
crash
post
Post #7





Grupa: Przyjaciele php.pl
Postów: 2 196
Pomógł: 2
Dołączył: 17.01.2004
Skąd: Sosnowiec

Ostrzeżenie: (0%)
-----


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 .. (IMG:http://forum.php.pl/style_emoticons/default/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ę...
Go to the top of the page
+Quote Post
alpin
post
Post #8





Grupa: Zarejestrowani
Postów: 79
Pomógł: 1
Dołączył: 15.03.2004

Ostrzeżenie: (10%)
X----


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
Go to the top of the page
+Quote Post
crash
post
Post #9





Grupa: Przyjaciele php.pl
Postów: 2 196
Pomógł: 2
Dołączył: 17.01.2004
Skąd: Sosnowiec

Ostrzeżenie: (0%)
-----


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. ?>
Go to the top of the page
+Quote Post
alpin
post
Post #10





Grupa: Zarejestrowani
Postów: 79
Pomógł: 1
Dołączył: 15.03.2004

Ostrzeżenie: (10%)
X----


Ok, dziala (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) A u Ciebie wyswietla adres obrazka ?

Ten post edytował alpin 1.02.2006, 15:40:04
Go to the top of the page
+Quote Post
crash
post
Post #11





Grupa: Przyjaciele php.pl
Postów: 2 196
Pomógł: 2
Dołączył: 17.01.2004
Skąd: Sosnowiec

Ostrzeżenie: (0%)
-----


Sprawdziłem na kilkudziesięciu tytułów i działa dobrze. Problem tkwi w pliku cache. Usuń go...
Go to the top of the page
+Quote Post
alpin
post
Post #12





Grupa: Zarejestrowani
Postów: 79
Pomógł: 1
Dołączył: 15.03.2004

Ostrzeżenie: (10%)
X----


Wszystko juz dziala, wielkie dzieki za wszystko, pozdrawiam

Ten post edytował alpin 1.02.2006, 22:03:05
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 04:22