Youtube Video auf Server speichern

This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

  • Youtube Video auf Server speichern

    Hallo zusammen,

    ich würde gerne auf meinem Server YT Videos speichern - Bedeutet, dass ich sie nicht runterladen will sondern sofort auf den Server ziehen und von daan dann auch bei Ausfällen seitens YT meine Videos anschauen kann.

    Nun meine Frage: PHP Scripte wo ein Downloadlink erzeugt wird gibt es ja zu genüge, aber wer hat ein codeschnipsel wo ich beispielweise einen link angebe von yt und er mir das video dann z.B. unter /downloads/ legt?

    (Und rechtlich gesehen werde ich das ganze nur selbst nutzen, also nicht öffentlich, also unbedenklich - Musik darf man ja auch auf dem server haben solange kein dritter zugriff hat)
  • Bei Ausfällen von YouTube, du meinst, für die Zeiten, in denen Google offline ist? Relativ unwahrscheinlich, dass du genau dann in den paar Sekunden ein Video schauen möchtest, wenn du mich fragst.

    Schaue mal hier: developeronline.blogspot.com/2…tube-videos-with-php.html

    Habs nicht getestet, aber evtl. hilfts dir ja.
    Jan Thurau
    Software and Systems Engineer
    janthurau.de

    [Blocked Image: http://www.pageheroes.com/media/image/pageheroes_logo.png] - We get your page working!
  • Ist auch in der heutigen Zeit wahrscheinlicher dass die Gema das sperrt oder es mal wieder in deutschland nicht verfügbar ist ect. - und wenn ich dann (übertrieben gesagt) in 4 Jahren draufschaue und 90% meiner videos "weg sind" hätte ich noch alle original auf meinem server :)

    Auf der Seite war ich schon, aber bringt mir auch nichts, da ich damit nur runterladen und nicht auf dem Server speichern kann (bzw. ich weiß nicht wie ich das umprogrammieren kann, damit sich der film ablegt...)
  • Hey,

    gut - das mit der GEMA stimmt natürlich.

    Am Ende des Tutorials wird ein Downloadlink ausgegeben. Den musst du einfach - statt ihn auszugeben - über PHP aufrufen, und dann in eine Datei packen.
    Das könntest du folgendermaßen machen:

    <?php
    $filename = "Video1.flv";
    file_put_contents($filename, file_get_contents("URL"));
    ?>

    Wenns damit Probleme gibt, könnte man es noch direkt über die fopen, fgets und fwrite Funktionen machen - dann würde der Inhalt nicht erst in den Ram geladen werden,.
    Jan Thurau
    Software and Systems Engineer
    janthurau.de

    [Blocked Image: http://www.pageheroes.com/media/image/pageheroes_logo.png] - We get your page working!

    The post was edited 1 time, last by Jan Thurau ().

  • Was habe ich hier falsch gemacht?

    Source Code

    1. <?php
    2. $location="http://www.youtube.com/watch?v=319hsZ12TAE";
    3. $handle = fopen($location, "r");
    4. if($handle) { $contents = '';
    5. while (!feof($handle)) { $contents .= fread($handle, 8192); }
    6. fclose($handle);
    7. $result1 = preg_match("/&t=([\w]*)&/",$contents,$tickets);
    8. $ticket = $tickets[1];
    9. $result2 = preg_match("/v=(\w*)/",$location,$video_id);
    10. $id = $video_id[1];
    11. $filename = "Video1.flv";
    12. $dieurl="http://www.youtube.com/get_video?video_id=".$id."".$ticket;
    13. echo $dieurl;
    14. file_put_contents($filename, file_get_contents($dieurl));
    15. }
    16. ?>
    Display All
  • Habe jetzt folgendes dort eingesetzt:
    $location="http://www.youtube.com/watch?v=U9aw6Rcnkp4&t=0m00s";

    Folgende Fehlermeldung kommt:
    youtube.com/get_video?video_id=U9aw6Rcnkp4
    Warning: file_get_contents(youtube.com/get_video?video_id=U9aw6Rcnkp4) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.0 404 Not Found in /www/..../down/download.php on line 17

    Der Ordner /down/ hat auf jeden Fall Rechte 777, dadran liegt es nicht...
  • Was ist denn jetzt t? Habe vorhin mal beim Einbettcode die Zeit verändert und schon wird mein t zu einer Zeit wo der dann anfangen soll: youtu.be/Vu20dwa9pYE?t=2m59s

    Und laut JaffaCoder ist t nun gleich einem Token? Habe jetzt mal mein Video genommen und die ID bei deinem Beispiel eingefügt: youtube.com/get_video_info?video_id=Vu20dwa9pYE
    Raus kommt dann eine get_video_info Datei 8|
    Öffne ich die steht da eine ganz lange Adresse - Suche ich nach &token kommt folgendes als Wert: vjVQa1PpcFNsqzOQFoCqRMuFFyBrkwh6a9c3TxMvFZY%3D

    Wenn ich das also hier alles richtig verstanden habe fehlt dem Script dieser Wert. Ersetze ich ihn also oben bekomme ich folgende location:

    Source Code

    1. $location="http://www.youtube.com/watch?v=U9aw6Rcnkp4&t=vjVQa1PpcFNsqzOQFoCqRMuFFyBrkwh6a9c3TxMvFZY%3D";


    Irgendwie scheine ich euch dann doch noch nicht verstanden zu haben, denn es kommt wieder der Fehler:
    youtube.com/get_video?video_id=U9aw6Rcnkp4
    Warning: file_get_contents(youtube.com/get_video?video_id=U9aw6Rcnkp4) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.0 404 Not Found in /www/.../down/download.php on line 17



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

    Ah, soll der token eine eigene variable sein und eingesetzt werden?

    Source Code

    1. <?php
    2. $location="http://www.youtube.com/watch?v=U9aw6Rcnkp4&token=vjVQa1PpcFNsqzOQFoCqRMuFFyBrkwh6a9c3TxMvFZY%3D";
    3. $handle = fopen($location, "r");
    4. if($handle) { $contents = '';
    5. while (!feof($handle)) { $contents .= fread($handle, 8192); }
    6. fclose($handle);
    7. $result1 = preg_match("/&t=([\w]*)&/",$contents,$tickets);
    8. $ticket = $tickets[1];
    9. $result2 = preg_match("/v=(\w*)/",$location,$video_id);
    10. $id = $video_id[1];
    11. $result3 = preg_match("/&token=([\w]*)&/",$contents,$token_id);
    12. $token = $token_id[1];
    13. $filename = "Video1.flv";
    14. $dieurl="http://www.youtube.com/get_video?video_id=".$id."".$ticket."".$token;
    15. echo $dieurl;
    16. file_put_contents($filename, file_get_contents($dieurl));
    17. }
    18. ?>
    Display All



    :( Sorry wenn ihr ein bisschen mehr Geduld mit meinen Fragen haben müsst :(
  • So, habs gefunden und den Fehler behoben. Ich muss noch ne Funktion schreiben, um die Links aus der Info-Datei rauszubekommen, was warscheinlich in einem laaaaaaaaaaangen RegExp enden wird... Der Rest des SCripts wäre fertig. Es werden alle möglichen Videoformnate, die es zum Video gibt, abgespeichert... Jeder, der das brauch sollte sich das so anpassen, wie er es brauch ;)
  • Wobei... den Kern kiann ich auch jetzt schon reinstellen.... Wenn ihr dass ausführt, müsst ihr allerdings beachten, dass es auch seine Zeit dauert, bis das Video geladen ist... ;)
    Und nicht wundern, wenn der COde an manchen Stellen etwas unsauber und verwirrend ist :D Dürften auch noch ein paar Fehler drin sein ^^

    download.php

    Source Code

    1. <?php
    2. /*
    3. $infos = urldecode(urldecode(urldecode(file_get_contents('http://www.youtube.com/get_video_info?video_id=0VqTwnAuHws'))));
    4. $array = array();
    5. parse_str($infos, $array);
    6. echo $array['title']; */
    7. require_once('youtube.php');
    8. $yt = new YoutubeVideo('0VqTwnAuHws');
    9. if($yt->video_exists()){
    10. //echo 'Video vorhanden';
    11. }
    12. else{
    13. echo 'nope';
    14. }
    15. $yt->copy_files_to('../videos/'.md5(microtime()));
    16. ?>
    Display All



    youtube.php

    Source Code

    1. <?php
    2. class YoutubeVideo
    3. {
    4. private $id = null;
    5. private $info = null;
    6. private $info_array = array();
    7. private $links = array();
    8. public $title;
    9. public $views;
    10. public $author;
    11. public $keywords;
    12. public $date;
    13. public function __construct($id)
    14. {
    15. $this->id = $id;
    16. }
    17. public function yt_is_available()
    18. {
    19. $fp = fsockopen('http://www.youtube.com/', 11211, $errno, $errstr, 5);
    20. if(is_resource($fp)){
    21. fclose($fp);
    22. return true;
    23. }
    24. return false;
    25. }
    26. private function set_info()
    27. {
    28. $this->info = urldecode(urldecode(urldecode(file_get_contents('http://www.youtube.com/get_video_info?video_id='.$this->id))));
    29. }
    30. public function video_exists()
    31. {
    32. if($this->info == null){
    33. $this->set_info();
    34. }
    35. if(strlen($this->info) > 0){
    36. return true;
    37. }
    38. return false;
    39. }
    40. public function copy_files_to($folder_name)
    41. {
    42. $folder_origin = $folder_name;
    43. if($this->info == null){
    44. $this->set_info();
    45. }
    46. parse_str($this->info, $this->info_array);
    47. echo '<pre>';
    48. var_dump($this->info_array);
    49. echo '</pre><br>'.str_replace('url=', '<br><br>url=', $this->info).'<br><br><br>';
    50. $link_array = array();
    51. preg_match_all('/(url=)(.*?)(;\scodecs=)/', $this->info, $link_array);
    52. echo '<pre><br><br>';
    53. $this->links = $link_array[2];
    54. var_dump($this->links);
    55. echo '</pre>';
    56. $i = 0;
    57. while(file_exists($folder_name)){
    58. $folder_name = $folder_origin.'-'.$i;
    59. $i++;
    60. }
    61. if(!mkdir($folder_name, 0, true)){
    62. return false;
    63. }
    64. for($i = 0; $i < count($this->links); $i++)
    65. {
    66. copy($this->links[$i], $folder_name.'/'.$i);
    67. }
    68. return true;
    69. }
    70. }
    71. ?>
    Display All


    Edit: Ich werd in den nächsten Tag, wenn ich Zeit dazu finde die Klasse vollenden (nach Dateiendungen sortieren, dass man nicht alle Video runterlädt, sondern nur die, die man will) und dann auf phpclasses hochladen.

    The post was edited 1 time, last by JaffaCoder ().