Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [class] pobieranie plików z wrzuty
Zmorcia
post 5.10.2008, 06:43:07
Post #1





Grupa: Zarejestrowani
Postów: 234
Pomógł: 5
Dołączył: 26.01.2008
Skąd: Lutcza

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


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


--------------------
POMOGŁEM ? Wciśnij "Pomógł" , dzięki !
Go to the top of the page
+Quote Post
Spirit86
post 5.10.2008, 07:44:26
Post #2





Grupa: Zarejestrowani
Postów: 607
Pomógł: 23
Dołączył: 8.09.2004
Skąd: Wrocław

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


  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??

Ten post edytował Spirit86 5.10.2008, 07:45:23


--------------------
Audio: Metallica, Soil, RHCP, OffSpring, Green Day, "Retro", Gorillaz, Disturbed, Coma
DB: MySQL 4.1 | php: 4.4.3 Pomogłem Ci? Wciśnij przycisk POMÓGŁ.
Go to the top of the page
+Quote Post
Dizzy
post 5.10.2008, 07:57:20
Post #3





Grupa: Zarejestrowani
Postów: 139
Pomógł: 0
Dołączył: 6.09.2008

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


No no...
Gratuluje choć nie napisałes skrypt zbyt profesionalnie na następny raz sie bardziej przyłóz smile.gif
Go to the top of the page
+Quote Post
Zmorcia
post 5.10.2008, 07:58:43
Post #4





Grupa: Zarejestrowani
Postów: 234
Pomógł: 5
Dołączył: 26.01.2008
Skąd: Lutcza

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


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

Ten post edytował Zmorcia 5.10.2008, 07:58:59


--------------------
POMOGŁEM ? Wciśnij "Pomógł" , dzięki !
Go to the top of the page
+Quote Post
bim2
post 6.10.2008, 16:03:03
Post #5





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

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


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.


--------------------
Go to the top of the page
+Quote Post
Zmorcia
post 6.10.2008, 18:40:04
Post #6





Grupa: Zarejestrowani
Postów: 234
Pomógł: 5
Dołączył: 26.01.2008
Skąd: Lutcza

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


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.


--------------------
POMOGŁEM ? Wciśnij "Pomógł" , dzięki !
Go to the top of the page
+Quote Post
bim2
post 7.10.2008, 14:38:50
Post #7





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

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


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. ?>


--------------------
Go to the top of the page
+Quote Post
pEbE
post 1.08.2011, 13:41:51
Post #8





Grupa: Zarejestrowani
Postów: 106
Pomógł: 3
Dołączył: 21.03.2006
Skąd: Sosnowiec

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


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).
Go to the top of the page
+Quote Post
Giluś
post 8.08.2011, 09:21:18
Post #9





Grupa: Zarejestrowani
Postów: 377
Pomógł: 9
Dołączył: 2.11.2010

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


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 ?
Go to the top of the page
+Quote Post
rav1989
post 8.08.2011, 11:04:15
Post #10





Grupa: Zarejestrowani
Postów: 66
Pomógł: 0
Dołączył: 5.07.2007

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


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

Ten post edytował rav1989 8.08.2011, 11:28:09
Go to the top of the page
+Quote Post
Giluś
post 8.08.2011, 15:05:22
Post #11





Grupa: Zarejestrowani
Postów: 377
Pomógł: 9
Dołączył: 2.11.2010

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


A da się tak zrobić, aby od razu pobierało, wygeneruję mi link i jak wejdę to pobierze mi się ?
Go to the top of the page
+Quote Post
CuteOne
post 9.08.2011, 14:16:52
Post #12





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


google -> header force download
Go to the top of the page
+Quote Post
seba123
post 26.08.2011, 03:27:49
Post #13





Grupa: Zarejestrowani
Postów: 57
Pomógł: 1
Dołączył: 20.03.2008

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


I już nie śmiga, bo sygnatury są generowane prawdopodbnie per IP.
Go to the top of the page
+Quote Post
pEbE
post 26.08.2011, 09:48:29
Post #14





Grupa: Zarejestrowani
Postów: 106
Pomógł: 3
Dołączył: 21.03.2006
Skąd: Sosnowiec

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


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.

Ten post edytował pEbE 26.08.2011, 09:48:42
Go to the top of the page
+Quote Post
erix
post 26.08.2011, 10:58:58
Post #15





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Darmowe serwery mają wiele rzeczy zablokowane, więc zacząłbym właśnie od serwera zamiast od skryptów.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
pEbE
post 26.08.2011, 11:53:13
Post #16





Grupa: Zarejestrowani
Postów: 106
Pomógł: 3
Dołączył: 21.03.2006
Skąd: Sosnowiec

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


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. ?>
Go to the top of the page
+Quote Post
seba123
post 28.08.2011, 01:51:14
Post #17





Grupa: Zarejestrowani
Postów: 57
Pomógł: 1
Dołączył: 20.03.2008

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


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.
Go to the top of the page
+Quote Post
Macios25
post 31.08.2011, 17:30:34
Post #18





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 31.07.2011

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


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...)



Ten post edytował Macios25 31.08.2011, 23:26:04
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 27.04.2024 - 00:58