Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Pętla w PHP pobieranie informacji ze innych stron za pomocą curl
Forum PHP.pl > Forum > Przedszkole
Giluś
Cześć posiadam skrypt który:

1. Pobiera Nazwę z MySQL.
2. Wysyła za pomocą cURL tą nazwę do innej strony.
3. Z tej innej strony pobiera ~10 różnych wyników (za pomocą wyrażeń regularnych).
4. Zapisuje te wyniki do MySQL.

I tak powtarza np.: 500x.

Mój problem polega na tym, iż bardzo długo to trwa 500 wyników to jakieś 5-10 minut wykonywania skryptu i właśnie się zastanawiam czy to wina złego skryptu czy też przez to, że posiadam słaby internet (chociaż w to wątpię bo niby skrypt się wykonuje po stronie serwera a nie mojej)..

A wiec jaka może być inna jeszcze przyczyna ?

binprogrammer
Nie potrafię się profesjonalnie wypowiedzieć w tej sprawie, ale każdy duży skrypt wykonuję się dłużej, to nie twoja wina - no pewnie w jakimś tam stopniu tak, ale więcej pracy wykonuje serwer.
Damonsson
To powinno trwać nie więcej niż minutę, podejrzewam, że zapis do bazy 500x jest problemem.
Zamykasz połączenie i znowu łączysz się tak 500x?
Pobierasz cURLem całą stronę?
Giluś
Może pokażę ten skrypt.

  1. function file_get_contents_curl($url) {
  2. $cookie = 'bbnaut=' . urlencode('2458561058e5cfaa') . '; welcomeScreenNew=' . urlencode('welcomeScreen');
  3. $ch = curl_init();
  4. curl_setopt($ch, CURLOPT_HEADER, 0);
  5. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  6. curl_setopt($ch, CURLOPT_URL, $url);
  7. curl_setopt($ch, CURLOPT_COOKIE, $cookie);
  8. $data = curl_exec($ch);
  9. curl_close($ch);
  10. return $data;
  11. }
  12.  
  13. $connection = @mysql_connect('localhost', '', '');
  14. $db = @mysql_select_db('', $connection);
  15. mysql_query("SET NAMES 'utf8'");
  16. $wynik = mysql_query("SELECT * FROM bots LIMIT 500");
  17.  
  18.  
  19. while($r = mysql_fetch_assoc($wynik)) {
  20. $rs = urlencode($r['tyt']);
  21.  
  22. // Szukaj
  23. $data = file_get_contents_curl('http://www.filmweb.pl/search?q='.$rs);
  24. preg_match('#<a class=searchResultTitle href="(.*)">#',$data,$out);
  25. $dans = explode('">', $out[1]);
  26.  
  27. // Faktyczne pobieranie filmu.
  28. $dane = file_get_contents_curl('http://www.filmweb.pl'.$dans[0]);
  29.  
  30. preg_match('#<span id=filmYear class=halfSize>(.*)</span>#',$dane,$rok);
  31. preg_match('#property="v:name" property="v:itemreviewed">(.*)</h1><span id=filmYear class=halfSize>#',$dane,$nazwa);
  32. preg_match('#<h2 class="text-large caption">(.*)</h2><div class=hide>#',$dane,$nazwa2);
  33. preg_match('#</tr><tr><th>produkcja:</th><td><ul class="inline sep-comma">(.*)</ul></td></tr><tr><th>premiera:</th>#',$dane,$produkcja);
  34. preg_match('#<p class=text property="v:summary">(.*)</p></div><div class="pageBox sep-hr">#',$dane,$opis);
  35. preg_match('#rel="v:directedBy">(.*)</a></li></ul></td></tr><tr><th>scenariusz:</th>#',$dane,$rez);
  36. preg_match('#<i class=icon-small-clock></i> (.*)</div><div class=communityRate>#',$dane,$time);
  37. preg_match('#class=film_mini><img src="(.*)"#',$dane,$ss);
  38. preg_match('#<div class=filmInfo><table><tr><th>gatunek:</th><td><ul class="inline sep-comma">(.*)</ul></td></tr><tr><th>produkcja:</th>#',$dane,$gatunek);
  39.  
  40. $roks = explode('(', $rok[1]);
  41. $rokz = explode(')', $roks[1]);
  42. $nazwaas = str_replace('&oacute;','ó',$nazwa[1]);
  43. $opis = strip_tags($opis[1]);
  44. $opis = str_replace('&oacute;','ó',$opis);
  45. $fotka = explode('" alt="', $ss[1]);
  46.  
  47. $HTML = $produkcja[1];
  48. $HTML1 = $gatunek[1];
  49. $html = new DOMDocument();
  50. $html1 = new DOMDocument();
  51. $html->validateOnParse = false;
  52. $html1->validateOnParse = false;
  53. $html->loadHTML($HTML);
  54. $html1->loadHTML($HTML1);
  55. $links = array();
  56. $links1 = array();
  57. foreach ( $html->getElementsByTagName('a') as $link ) {$links[] = $link->nodeValue;}
  58. foreach ( $html1->getElementsByTagName('a') as $link1 ) {$links1[] = $link1->nodeValue;}
  59. $tablica = $links;
  60. $tablica1 = $links1;
  61. $produk = '';
  62. $gatun = '';
  63. $ile = count($tablica);
  64. $ile1 = count($tablica1);
  65. for ($i=0; $i <$ile; $i++){$produk .= $tablica[$i].', ';}
  66. for ($i=0; $i <$ile1; $i++){$gatun .= $tablica1[$i].', ';}
  67.  
  68.  
  69.  
  70. $link_put = 'http://www.putlocker.com/file/'.$r['link'].'';
  71. $nazwa_pl = strip_tags($nazwaas);
  72. $nazwa_en = strip_tags($nazwa2[1]);
  73. $rez_pl = strip_tags($rez[1]);
  74. $produk = strip_tags($produk);
  75. $czas_p = strip_tags($rokz[0]);
  76. $czas = strip_tags($time[1]);
  77. $opis_pl = strip_tags($opis);
  78. $gatun = strip_tags($gatun);
  79. $gatun = str_replace('Ĺ', 'ł', $gatun);
  80. $gatun = str_replace('Ä', 'ą', $gatun);
  81.  
  82. if($nazwa_pl and $link_put) {
  83. $ins = @mysql_query("
  84. INSERT INTO bot_film_gen SET
  85. nazwapl = '".$nazwa_pl."',
  86. nazwaen = '".$nazwa_en."',
  87. rez = '".$rez_pl."',
  88. prod = '".$produk."',
  89. czas = '".$czas_p."',
  90. czast = '".$czas."',
  91. opis = '".$opis_pl."',
  92. fotka = '".$fotka[0]."',
  93. link = '".$link_put."',
  94. name = '".$rs."',
  95. gatunek = '".$gatun."',
  96. ids = '".$r['id']."'
  97. ");}
  98. }


Co prawda jest to troszkę powtórzone te zmienne ale raczej nie powinno to tak spowalniać serwera...
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.