Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [class] pobieranie plików z wrzuty
Forum PHP.pl > Forum > Gotowe rozwiązania > Algorytmy, klasy, funkcje
Zmorcia
Witam, dzis napisałem z nudów klasę do pobierania plików z wrzuty, mozna ja oczywiście rozbudować.

  1. <?
  2. // Autor Kuba `Zmorcia` Krupa
  3. // E-mail: ahn2@o2.pl
  4. // Www: callshot.eu
  5.  
  6.    class download {
  7.        public function pobierz($link, $portal){
  8.            $this->link = $link;
  9.            $this->portal = $portal;            
  10.                switch ($this->portal) {
  11.                    case 'wrzuta':
  12.                        $this->z = array('audio','film');
  13.                        $this->n = array('aud/file','vid/file');
  14.                        $this->view = str_replace($this->z, $this->n, $this->link);
  15.                        return $this->view;
  16.                    break;
  17.            }
  18.        }
  19.    }
  20.    
  21. $download = new download;
  22.  
  23. if(!isset($_POST['link'])){
  24. echo '<form method="post" action="">';
  25. echo '<input type="text" style="width: 300px" name="link">&nbsp;<br />';
  26. echo '<input type="radio" name="portal" value="wrzuta" checked="checked" />wrzuta<br />';
  27. echo '<input type="submit" value="pobierz">';
  28. echo '</form>';
  29. } else {
  30. header('location: '.$download -> pobierz($_POST['link'], $_POST['portal']).'');
  31. echo 'Pobieranie powinno nastapić w przeciągu kilki sekund!';
  32. }
  33. ?>


Miłego korzystania smile.gif
Spirit86
  1. <?
  2. header('location: '.$download -> pobierz($_POST['link'], $_POST['portal']).'');
  3. echo 'Pobieranie powinno nastapić w przeciągu kilki sekund!';
  4. }
  5. ?>


Te 2 linijki są bez sensu i w dodatku z błędem jedna.
  1. <?php
  2. header('location: '.$download -> pobierz($_POST['link'], $_POST['portal']));
  3. ?>


Zrób np. streamowanie, bo niektórym się otwiera w przeglądarce.
No i najważniejsze. Robienie klasy dla jednej funkcji??
Dizzy
No no...
Gratuluje choć nie napisałes skrypt zbyt profesionalnie na następny raz sie bardziej przyłóz smile.gif
Zmorcia
Cytat(Spirit86 @ 5.10.2008, 08:44:26 ) *
  1. <?php
  2. header('location: '.$download -> pobierz($_POST['link'], $_POST['portal']).'');
  3. echo 'Pobieranie powinno nastapić w przeciągu kilki sekund!';
  4. }
  5. ?>


Te 2 linijki są bez sensu i w dodatku z błędem jedna.
  1. <?php
  2. header('location: '.$download -> pobierz($_POST['link'], $_POST['portal']));
  3. ?>


Zrób np. streamowanie, bo niektórym się otwiera w przeglądarce.
No i najważniejsze. Robienie klasy dla jednej funkcji??


Wiem, ale w klasach dopiero zaczynam winksmiley.jpg mam 14 lat jeszcze duzo przedemną smile.gif
bim2
Jak miałem 14 to umiałem odróżnić gdzie pakuję się klasy a gdzie funkcje. Sorka, ale to jest ździebko słabe. Nie nazwałbym to nawet klasą a funkcją z przedrostkiem class.
Zmorcia
Cytat(bim2 @ 6.10.2008, 17:03:03 ) *
Jak miałem 14 to umiałem odróżnić gdzie pakuję się klasy a gdzie funkcje. Sorka, ale to jest ździebko słabe. Nie nazwałbym to nawet klasą a funkcją z przedrostkiem class.


Mówiłem, że to jest niepełna classa dop pobierania plików z wrzuty, a robie do reszty serwisów: Youtube.com, dailymotion.com etc.
bim2
ja bym wtedy napisal to inaczej. (mam już napisaną, ale nie mam zamiaru ujwaniać)

  1. <?php
  2. class Download {
  3. public function __construct($sLink)
  4. {
  5.   $this->sType = $this->checkType($sLink);
  6.   $this->sLink = $sLink;
  7. }
  8. public function getType() {}
  9.  
  10. public function getFile() {
  11. return $this->{'_'.$this->sType}($this->sLink);
  12. }
  13. private function _wrzuta($sLink)
  14. {
  15.  
  16. }
  17. }
  18. ?>
pEbE
Odkopuję stary temat, ale jako że wrzuta już dawno wprowadziła nowe "zabezpieczenia" przed pobieraniem plików, pomyślałem że komuś może się przydać ta funkcja:
  1. /*
  2. Generowanie gotowego adresu do ściągnięcia pliku na podstawie adresu url z serwisu wrzuta.pl
  3. $url - adres z wrzuta.pl
  4. */
  5. function wrzuta( $url )
  6. {
  7.  
  8. // Dzielenie url'a na części
  9. $url = str_replace( 'http://', '', $url );
  10. $url_p = explode( '/', $url );
  11.  
  12. // Generowanie adresu do pliku XML i jego odczyt (są w nim informacje o poszukiwanym przez nas linku)
  13. $xml_url = 'http://' . $url_p[0] . '/xml/plik/' . $url_p[2] . '/' . $url_p[3] . '/wrzuta.pl/' . round( rand()*1000000+1 );
  14. $xml = file_get_contents( $xml_url );
  15.  
  16. // Wyciąganie linku z XML
  17. preg_match_all("/<fileId><!\[CDATA\[(.*)\]\]><\/fileId>/", $xml, $matches);
  18. return $matches[1][0];
  19.  
  20. }

Z XML'a można wyciągnąć też inne dane (nazwę pliku, mime itp).
Giluś
Cześć, to chyba nie działa wink.gif
Dałem taki kod:
  1. <?php
  2. function wrzuta( $url )
  3. {
  4. // Dzielenie url'a na części
  5. $url = str_replace( 'http://', '', $url );
  6. $url_p = explode( '/', $url );
  7.  
  8. // Generowanie adresu do pliku XML i jego odczyt (są w nim informacje o poszukiwanym przez nas linku)
  9. $xml_url = 'http://' . $url_p[0] . '/xml/plik/' . $url_p[2] . '/' . $url_p[3] . '/wrzuta.pl/' . round( rand()*1000000+1 );
  10. $xml = file_get_contents( $xml_url );
  11.  
  12. // Wyciąganie linku z XML
  13. preg_match_all("/<fileId><!\[CDATA\[(.*)\]\]><\/fileId>/", $xml, $matches);
  14. return $matches[1][0];
  15.  
  16. }
  17.  
  18.  
  19. echo wrzuta('http://maaagdalenka.wrzuta.pl/audio/4siGyuc1Ynj/noir_desire_-_le_vent_nous_portera');
  20.  
  21. ?>

Link nie jest reklamujący, wyszło mi takie coś:
http://c.wrzuta.pl/wa9727/7cfbf2840003fc9c...ires=1312795127

Gdy na to wejdę to uruchamia mi się odtwarzacz, a nie ściąga się smile.gif

Tak ma być czy coś źle robię, jeśli tak ma być to jak ściągnąć taki plik ?
rav1989
Jak nie działa jak działa...
Skrypt podaje Ci url do pliku muzycznego (do MP3), żeby pobrać wystarczy kliknąć Prawym Przyciskiem Myszy i wybrać opcje "Zapisz element docelowy" (zależy jaką masz przeglądarkę biggrin.gif potem tylko zmień nazwę na taką z rozszerzeniem .mp3 i już, ewentualnie wrzucić link do jakiegoś managera pobierania biggrin.gif

A tak już ogólnie można zamiast:

  1. echo wrzuta('http://maaagdalenka.wrzuta.pl/audio/4siGyuc1Ynj/noir_desire_-_le_vent_nous_portera');


dać taki kawałek, zaczerpnięty z pierwszego postu i dostosowany smile.gif

  1. if(!isset($_POST['link'])){
  2. echo '<form method="post" action="">';
  3. echo '<input type="text" style="width: 300px" name="link"><br />';
  4. echo '<input type="submit" value="pobierz">';
  5. echo '</form>';
  6. } else {
  7. header('Location: '.wrzuta($_POST['link']));
  8. }
  9.  


No i dalej chyba każdy da sobie radę biggrin.gif
Giluś
A da się tak zrobić, aby od razu pobierało, wygeneruję mi link i jak wejdę to pobierze mi się ?
CuteOne
google -> header force download
seba123
I już nie śmiga, bo sygnatury są generowane prawdopodbnie per IP.
pEbE
Może to i racja. U mnie na localhoście śmiga, ale po wrzuceniu na darmowy serwer juz niestety nie. Może gdyby robic to przez javascript po stronie klienta to by działało.
erix
Darmowe serwery mają wiele rzeczy zablokowane, więc zacząłbym właśnie od serwera zamiast od skryptów.
pEbE
Nie jest to kwestia tego że serwer blokuje pobieranie danych z zewnątrz. Podejrzewam że wrzuta ma "czarną listę" serwerów z hostingiem i je po prostu blokuje.
Możesz to sam sprawdzić:
Na 000webhost: http://przemowo.site11.com/wrzuta.php
Skrypt zwraca:
  1. <Error><Code>SignatureDoesNotMatch</Code><Message>The request signature we calculated does not match the signature you provided.</Message><RequestId>4A8C7919</RequestId><BucketName>c.wrzuta.pl</BucketName><KeyName>wa6738/1c2419fb001760824d0aff80</KeyName><HostId>fc18:15</HostId><Date>Fri, 26 Aug 2011 10:50:51 GMT</Date></Error>

Natomiast na localu działa jak najbardziej doskonale.

Kod pliku wygląda tak:
  1. <?php
  2.  
  3.  
  4. if( !isset($_POST['url']) )
  5. {
  6.  
  7. ?>
  8. <form method="POST">
  9. Link z wrzuta.pl: <input type="text" name="url" size="40">
  10. <input type="submit" value="Generuj"><br />
  11. <input type="checkbox" name="auto" value="1" disabled="disabled" /> Sciagnij automatycznie
  12. </form>
  13. <?php
  14.  
  15. }
  16. else
  17. {
  18.  
  19. $url = str_replace( 'http://', '', $_POST['url'] );
  20. $url_p = explode( '/', $url );
  21.  
  22. $xml_url = 'http://' . $url_p[0] . '/xml/plik/' . $url_p[2] . '/' . $url_p[3] . '/sr/' . round( rand()*1000000+1 );
  23. $xml = file_get_contents( $xml_url );
  24.  
  25. preg_match_all("/<fileId><!\[CDATA\[(.*)\]\]><\/fileId>/", $xml, $matches);
  26. $file = $matches[1][0];
  27.  
  28. preg_match_all("/<name><!\[CDATA\[(.*)\]\]><\/name>/", $xml, $matches);
  29. $name = $matches[1][0];
  30.  
  31. preg_match_all("/<mime><!\[CDATA\[(.*)\]\]><\/mime>/", $xml, $matches);
  32. $mime = $matches[1][0];
  33.  
  34. preg_match_all("/<size>(.*)<\/size>/", $xml, $matches);
  35. $size = $matches[1][0];
  36.  
  37. if( isset($_POST['auto']) and $_POST['auto'] == 1 )
  38. {
  39.  
  40. $ext = '';
  41. switch($mime)
  42. {
  43. case 'audio/mpeg': $ext = '.mp3'; break;
  44. case 'video/x-flv': $ext = '.flv'; break;
  45. case 'image/jpeg': $ext = '.jpg'; break;
  46. }
  47.  
  48. flush();
  49. header('Content-Description: File Transfer');
  50. header('Content-Type: '.$mime);
  51. header('Content-Disposition: attachment; filename="'.$name.$ext.'"');
  52. header('Content-Transfer-Encoding: binary');
  53. header('Expires: 0');
  54. header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
  55. header('Pragma: public');
  56. header('Content-Length: ' . $size);
  57. readfile($file);
  58. flush();
  59.  
  60. }
  61. else
  62. {
  63. echo 'Kliknij tu aby sciagnac: <a target="_blank" href="'.$file.'">'.$name.'</a>';
  64. }
  65.  
  66. }
  67.  
  68. ?>
seba123
Cytat
Podejrzewam że wrzuta ma "czarną listę" serwerów z hostingiem i je po prostu blokuje.
Źle podejrzewasz. Co odwołanie do pliku zmienia się sygnatura - zatem ta, którą pobierzesz przez serwer będzie już inna niż ta, którą serwer wrzuty wygeneruje komputerowi użytkownika.

Jedynym sposobem jest raczej pobranie pierw na swój serwer, a później za pomocą np. header wysłanie pliku do użytkownika.
Macios25
Cytat
Jedynym sposobem jest raczej pobranie pierw na swój serwer, a później za pomocą np. header wysłanie pliku do użytkownika.

Dokładnie w taki sposób działają obecnie strony, które oferują pobieranie z wrzuty.
Najpierw plik ściągany jest z wrzuty na serwer X a dopiero potem istnieje możliwość pobrania go z serwera. smile.gif

//// Dodano:

Pobawiłem się trochę i udało mi się zrobić "półautomatyczny" skrypt pobierania z wrzuty.
( OBSŁUGUJE ON OBECNIE TYLKO PLIKI MUZYCZNE! )
Tutaj można przetestować jak działa:
http://dreamseller.cba.pl/wrzuta/index.php

Instrukcja obsługi.
1. Podajemy link do strony np: http://malinowa.mamba.wrzuta.pl/audio/5mXc...-_ladna_i_cwana
2. Zostanie wygenerowany link, otwieramy jego i kopiujemy całą zawartość dokumentu.
3. Skopiowany tekst wklejamy w wyznaczone miejsce.
4. Klikamy na wygenerowany link i zapisujemy plik na naszym dysku.

KOD:
  1. <?php
  2.  
  3.  
  4. if( !isset($_POST['url']) && !isset($_POST['xml']) )
  5. {
  6.  
  7. ?>
  8. Etap 1. Podaj link do pliku, który chcesz porbać:
  9. <form method="POST">
  10. Link z wrzuta.pl: <input type="text" name="url" size="40"><br>
  11. <input type="submit" value="Generuj"><br />
  12. </form>
  13. <?php
  14.  
  15. }
  16. elseif (isset($_POST['url']))
  17. {
  18.  
  19. $url = str_replace( 'http://', '', $_POST['url'] );
  20. $url_p = explode( '/', $url );
  21. $x= round( rand()*1000000+1);
  22. echo('Etap2: Przejdź pod adres i skopjuj zawartość strony:<br> http://' . $url_p[0] . '/xml/plik/' . $url_p[2] . '/' . $url_p[3] . '/sr/'.$x);
  23.  
  24.  
  25.  
  26.  
  27. ?>
  28. <form method="POST">
  29. <textarea name="xml" cols="80" rows="10">Etap3 :Tutaj wklej skopjowaną zawartość strony...
  30. </textarea><br>
  31. <input type="submit" value="Generuj"><br />
  32. </form>
  33. <?php
  34.  
  35. }
  36. elseif(isset($_POST['xml'])) {
  37.  
  38.  
  39. echo('Etap 4: kliknij w poniższy link. Następnie klikniej prawym przyciskiem a potem wybierz zapisz jako. <br>Link:<br> ');
  40. $link = explode('http://c.wrzuta.pl/wa',$_POST['xml']);
  41. $link = explode(']]>',$link[1]);
  42. echo('<a href="http://c.wrzuta.pl/wa'.$link[0].'">Kliknij tutaj.</a>');
  43. }
  44.  
  45.  
  46. ?>


1. Skrypt napisałem żeby pokazać sam zamysł jak można ściągać pliki z wrzuty bez zapisywania ich na swoim serwerze.
Nie jest on w 100% wygodny dla użytkownika ponieważ wymaga dodatkowo podjęcia akcji polegającej na skopiowaniu dokumentu.
2. Podejrzewam, że skrypt mógłby być w pełni automatyczny gdyby za pomocą CURL połączyć się z jakąś bramką proxy.
Następnie prowadzić komunikacje przez nią.
( Sygnatura zostałaby wygenerowana dla proxy, więc potem za pomocą tej samej bramki można byłoby pobrać xml,
a następnie użytkownik mógłby pobrać przez bramkę plik. )

( Robiłem ręcznie pobieranie przez bramkę proxy i działa...)

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-2024 Invision Power Services, Inc.