Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Weryfikacja linków z rapidshara
Forum PHP.pl > Forum > PHP
Fixer
Słuchajcie jak rozwiązać w php problem sprawdzania linków na sewerze rapidshare czy te jeszcze istnieją czy już zostały wykasowane?
Chcę wkleić link w stylu http://rapidshare.com/files/61035815/plik.rar a skrypt by sprawdził czy plik istnieje na serwerze.
Taki weryfikator linków.

coś podobnego jak tutaj macie: http://www.mtworld.info/filec/
Cezar708
  1. <?php
  2. $arrHeaders = get_headers($urlDoSprawdzenia);
  3. if ( $arrHeaders[0] == 'HTTP/1.1 200 OK' ){
  4. echo "url $urlDoSprawdzenia jest jest dostępny";
  5. } else {
  6. echo "url $urlDoSprawdzenia nie jest dostępny błąd: `{$arrHeaders[0]}`";
  7. }
  8. ?>


to tylko sprawdzi, czy url jest dostępny w internecie. Nie sprawdzisz tą drogą zawartości strony, i chyba na to nie da się napisać skryptu.

PS: get_headers tylko pod PHP5, jak masz PHP4 to użyj cURL.
Fixer
myślałem nad łopatologiczną metodą mianowicie, pobierać kod html tej strony z linkiem, a potem sprawdzać wyrażeniami regularnymi czy wytępuje fraza "dead link" czy coś w tym stylu... bo strony z dobrym linkiem od tych ze złym różnią się...
Ale założe się, że jest prostsza metoda.

Sprawdzanie czy jest taki a taki adres nie załatwia problemu, tu trzeba sprawdzić czy jest plik na serwerze, fizycznie go pod tą ścieżką nie ma więc mamy problem...
Cezar708
to w takim układzie juz trza będzie naprawdę pobawić się za pomocą cURL tutaj masz przykłady na dole strony, może Ci się przydadzą
Fixer
Znalazłem cos takiego:
  1. <?php
  2. class CURL {  
  3.  
  4. var $callback = false;  
  5.  
  6. function setCallback($func_name) {  
  7. $this->callback = $func_name;  
  8. }  
  9.  
  10. function doRequest($method, $url, $vars) {  
  11. $ch = curl_init();  
  12. curl_setopt($ch, CURLOPT_URL, $url);  
  13. curl_setopt($ch, CURLOPT_HEADER, 1);  
  14. curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);  
  15. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);  
  16. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  
  17. curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');  
  18. curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');  
  19. if ($method == 'POST') {  
  20. curl_setopt($ch, CURLOPT_POST, 1);  
  21. curl_setopt($ch, CURLOPT_POSTFIELDS, $vars);  
  22. }  
  23. $data = curl_exec($ch);  
  24. curl_close($ch);  
  25. if ($data) {  
  26. if ($this->callback)  
  27. {  
  28. $callback = $this->callback;  
  29. $this->callback = false;  
  30. return call_user_func($callback, $data);  
  31. } else {  
  32. return $data;  
  33. }  
  34. } else {  
  35. return curl_error($ch);  
  36. }  
  37. }  
  38.  
  39. function get($url) {  
  40. return $this->doRequest('GET', $url, 'NULL');  
  41. }  
  42.  
  43. function post($url, $vars) {  
  44. return $this->doRequest('POST', $url, $vars);  
  45. }  
  46.  
  47. }  
  48.  
  49. function aktualizacja_statusu($id, $status) {  
  50.  
  51. global $db;  
  52.  
  53. // Aktualizacja/dodanie do bazy danych  
  54. $sql = "SELECT COUNT(*) as count FROM rs_links WHERE id=" . (int)$id;  
  55. if (!($result = $db->sql_query($sql)) )  
  56. {  
  57. message_die(GENERAL_ERROR, "Błąd pobrania z rs_links", '', __LINE__, __FILE__, $sql);  
  58. }  
  59.  
  60. $row = $db->sql_fetchrow($result);  
  61.  
  62. if ($row['count'] > 0) {  
  63.  
  64. // Aktualizacja  
  65. $sql = "UPDATE rs_links SET last_checked = " . time() . ", status='" . $status . "' WHERE id=" . (int)$id;  
  66. echo $sql . '<br />';  
  67. if (!($db->sql_query($sql)) )  
  68. {  
  69. message_die(GENERAL_ERROR, "Błąd aktualizacji rs_links.", '', __LINE__, __FILE__, $sql);  
  70. }  
  71.  
  72. } else {  
  73.  
  74. // Dodanie  
  75. $sql = "INSERT INTO rs_links (id, last_checked, status) VALUES (" . (int)$id . ", " . time() . ", '" . $status . "')";  
  76. echo $sql . '<br />';  
  77. if (!($db->sql_query($sql)) )  
  78. {  
  79. message_die(GENERAL_ERROR, "Błąd aktualizacji rs_links.", '', __LINE__, __FILE__, $sql);  
  80. }  
  81.  
  82. }  
  83.  
  84. // Usunięcie z rs_checker  
  85. $sql = "DELETE FROM rs_checker WHERE id=" . (int)$id;  
  86. if (!($db->sql_query($sql)) )  
  87. {  
  88. message_die(GENERAL_ERROR, "Błąd aktualizacji rs_checker.", '', __LINE__, __FILE__, $sql);  
  89. }  
  90.  
  91. }  
  92.  
  93. $curl = &new CURL();  
  94.  
  95. // Aktualizacja wszystkich linków w rs_checker  
  96. $sql = "SELECT * FROM rs_checker";  
  97. if (!($result = $db->sql_query($sql)) )  
  98. {  
  99. message_die(GENERAL_ERROR, "Błąd pobierania danych z rs_checker", '', __LINE__, __FILE__, $sql);  
  100. }  
  101.  
  102. $linki_do_sprawdzenia = array();  
  103.  
  104. $i = 0;  
  105. $subset = 0;  
  106. $linki_na_runde = 100;  
  107.  
  108. while($row = $db->sql_fetchrow($result)) {  
  109.  
  110. if ($i >= ($linki_na_runde - 1)) {  
  111.  
  112. $subset++;  
  113. $i = 0;  
  114.  
  115. }  
  116.  
  117. $linki_do_sprawdzenia[$subset][$row['id']] = $row['link'];  
  118.  
  119. $i++;  
  120.  
  121. }  
  122.  
  123. $db->sql_freeresult($result);  
  124.  
  125. foreach($linki_do_sprawdzenia as $linki_do_sprawdzenia_teraz) {  
  126.  
  127. $linki_do_sprawdzenia_teraz_ids = array();  
  128.  
  129. foreach($linki_do_sprawdzenia_teraz as $id => $link) {  
  130.  
  131. $linki_do_sprawdzenia_teraz_ids[] = $id;  
  132.  
  133. }  
  134.  
  135. $response = '';  
  136. $attempts = 0;  
  137.  
  138. while (strlen($response) < 1) {  
  139.  
  140. // Ilość powtórzeń przed zabiciem skryptu  
  141. if ($attempts >= 5) {  
  142.  
  143. die('Wykonano 5 powtórzeń do Rapidshare, poddaje się...');  
  144.  
  145. }  
  146.  
  147. // Sprawdzanie linków przez system RS.com  
  148. $links = implode("\n", $linki_do_sprawdzenia_teraz);  
  149. $response = $curl->post('http://rapidshare.com/cgi-bin/checkfiles.cgi', array('urls' => $links));  
  150.  
  151. }  
  152.  
  153. // Sprawdza które linki są poprawne  
  154. $pattern = '|File ([0-9]+) ([^)]+) found|i';  
  155. preg_match_all($pattern, $response, $matches);  
  156.  
  157. $poprawne_linki = array();  
  158.  
  159. if (count($matches[1]) > 0) {  
  160.  
  161. foreach ($matches[1] as $id) {  
  162.  
  163. $poprawne_linki[] = $id;  
  164.  
  165. aktualizacja_statusu($id, '1');  
  166.  
  167. }  
  168.  
  169. }  
  170.  
  171. // Linki które nie zostały odnalezione a tym samym uznane za martwe  
  172. $martwe_linki = array_diff($linki_do_sprawdzenia_teraz_ids, $poprawne_linki);  
  173.  
  174. if (count($martwe_linki) > 0) {  
  175.  
  176. foreach ($martwe_linki as $id) {  
  177.  
  178. aktualizacja_statusu($id, '0');  
  179.  
  180. }  
  181.  
  182. }  
  183.  
  184. }  
  185.  
  186. echo 'Sukces!';
  187. ?>


Źródło: http://blog.brodowski.net.pl/2008/01/01/sp...-rapidsharecom/

Czy ktoś ma pojęcie jak tego użyć?
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.