2010-09-10 37 views
16

Tôi đang tìm cách tải xuống các video Youtube bằng PHP. Tôi đã tìm kiếm cách thực hiện việc này hàng giờ nhưng tiếc là tất cả kết quả của Google mà tôi tìm thấy đều đã cũ và không hoạt động nữa.Tải xuống các video Youtube bằng PHP

Tôi sẽ đánh giá cao nếu ai đó có thể giải thích cách thực hiện việc này hoặc cung cấp liên kết đến bài viết cập nhật giải thích chi tiết.

Cảm ơn rất nhiều.

+0

sử dụng giải pháp này: https://www.phpclasses.org/package/9092-PHP-Download-files-of-given-YouTube-videos.html – mghhgm

Trả lời

13

Đầu tiên điều bạn nên làm là có được công cụ như Fiddler và truy cập trang video YouTube. Trong Fiddler, bạn sẽ thấy tất cả các tệp tạo nên trang đó, bao gồm cả chính tệp FLV. Bây giờ, bạn biết rằng video không phải là một trong các tệp CSS, cũng không phải là tệp hình ảnh. Bạn có thể bỏ qua chúng. Tìm một tập tin lớn. Nếu bạn nhìn vào URL, nó bắt đầu bằng /videoplayback.

Bây giờ, khi bạn đã tìm thấy, hãy tìm hiểu cách trình duyệt biết cách tải tệp đó. Thực hiện tìm kiếm qua các phiên (Ctrl + F) và tìm "videoplayback". Bạn sẽ thấy một lần truy cập trên trang đầu tiên bạn truy cập, chẳng hạn như http://www.youtube.com/watch?v=123asdf. Nếu bạn đào sâu qua tệp đó, bạn sẽ thấy thẻ DIV có ID là "trình phát xem". Trong đó có một thẻ script để thiết lập trình phát flash, và bên trong đó là tất cả các tham số flash. Trong đó là URL của video.

Vì vậy, bây giờ bạn biết cách sử dụng các công cụ của mình để tìm hiểu cách trình duyệt truy cập vào nó. Làm thế nào để bạn sao chép hành vi này trong PHP?

Thực hiện file_get_contents() trên trang tham chiếu video. Bỏ qua mọi thứ không có trong div người xem đó. Phân tích cú pháp thông qua mã cho đến khi bạn tìm thấy biến chứa URL. Từ đó, bạn có thể sẽ phải hủy cảnh báo URL đó. Một khi bạn có nó, bạn có thể làm một file_get_contents() (hoặc một số phương pháp tải xuống khác, tùy thuộc vào những gì bạn đang cố gắng làm) để lấy URL. nó là đơn giản. Mã phân tích cú pháp HTML của bạn sẽ phức tạp nhất.

Cuối cùng, hãy nhớ những gì bạn định làm có thể là bất hợp pháp. Kiểm tra EULA.

+1

Cảm ơn cho một câu trả lời chi tiết như vậy! –

1

Không ai viết hướng dẫn sử dụng/howtos trở nên lỗi thời sau mỗi bốn tuần. Gần nhất bạn có thể nhận được là kiểm tra các phương pháp khai thác thực tế trong một thực hiện hiện đại. Khá dễ đọc:

http://bitbucket.org/rg3/youtube-dl/raw/2010.08.04/youtube-dl

Nếu bạn không muốn đọc qua/reimplement nó, nó rõ ràng là không đơn giản, bạn chỉ có thể chạy nó như nó vốn có từ PHP:

system("youtube-dl '$url'"); 
1

lần cuối cùng tôi đang làm việc để sửa một trong các phần mở rộng chrome brocken để tải xuống video trên youtube. Tôi đã sửa nó bằng cách thay đổi phần kịch bản. (Javascript)

var links = new String(); 
var downlink = new String(); 
var has22 = new Boolean(); 
has22 = false; 
var Marked=false; 

var FMT_DATA = fmt_url_map;//This is html text that you have to grab. In case of extension it was readily available through:document.getElementsByTagName('script'); 

var StrSplitter1='%2C', StrSplitter2='%26', StrSplitter3='%3D'; 
if (FMT_DATA.indexOf(',')>-1) { //Found , 
    StrSplitter1=','; 
    StrSplitter2=(FMT_DATA.indexOf('&')>-1)?'&':'\\u0026'; 
    StrSplitter3='='; 
} 

var videoURL=new Array(); 
var FMT_DATA_PACKET=new Array(); 
var FMT_DATA_PACKET=FMT_DATA.split(StrSplitter1); 

for (var i=0;i<FMT_DATA_PACKET.length;i++){ 
    var FMT_DATA_FRAME=FMT_DATA_PACKET[i].split(StrSplitter2); 
    var FMT_DATA_DUEO=new Array(); 

    for (var j=0;j<FMT_DATA_FRAME.length;j++){ 
     var pair=FMT_DATA_FRAME[j].split(StrSplitter3); 
     if (pair.length==2) { 
      FMT_DATA_DUEO[pair[0]]=pair[1]; 
     } 
    } 

    var url=(FMT_DATA_DUEO['url'])?FMT_DATA_DUEO['url']:null; 

    if (url==null) continue; 
     url=unescape(unescape(url)).replace(/\\\//g,'/').replace(/\\u0026/g,'&'); 
     var itag=(FMT_DATA_DUEO['itag'])?FMT_DATA_DUEO['itag']:null; 
     var itag=(FMT_DATA_DUEO['itag'])?FMT_DATA_DUEO['itag']:null; 
    if (itag==null) continue; 
     var signature=(FMT_DATA_DUEO['sig'])?FMT_DATA_DUEO['sig']:null; 
     if (signature!=null) { 
     url=url+"&signature="+signature; 
    } 
    if (url.toLowerCase().indexOf('http')==0) { // validate URL 

     if (itag == '5') { 
      links += '<a href="' + url + '&title=' + username + title + quality240 + '"style="text-decoration:none"><span class="yt-uix-button-menu-item" id="v240p">FLV (240p)</span></a>'; 
     } 
     if (itag == '18') { 
      links += '<a href="' + url + '&title=' + username + title + quality360 + '"style="text-decoration:none"><span class="yt-uix-button-menu-item" id="v360p">MP4 (360p)</span></a>'; 
     } 
     if (itag == '35') { 
      links += '<a href="' + url + '&title=' + username + title + quality480 + '"style="text-decoration:none"><span class="yt-uix-button-menu-item" id="v480p">FLV (480p)</span></a>'; 
     } 
     if (itag == '22') { 
      links += '<a href="' + url + '&title=' + username + title + quality720 + '"style="text-decoration:none"><span class="yt-uix-button-menu-item" id="v720p">MP4 HD (720p)</span></a>'; 
     } 
     if (itag == '37') { 
      links += ' <a href="' + url + '&title=' + username + title + quality1080 + '"style="text-decoration:none"><span class="yt-uix-button-menu-item" id="v1080p">MP4 HD (1080p)</span></a>'; 
     } 
     if (itag == '38') { 
      links += '<a href="' + url + '&title=' + username + title + quality4k + '"style="text-decoration:none"><span class="yt-uix-button-menu-item" id="v4k">MP4 HD (4K)</span></a>'; 
     } 

     FavVideo(); 
     videoURL[itag]=url; 
     console.log(itag); 
    } 
} 

Bạn có thể nhận liên kết video riêng biệt từ mảng videoURL [itag]. Trên logic có thể được chuyển đổi sang PHP dễ dàng

Phần mở rộng có thể được tải về từ vị trí http://www.figmentsol.com/chrome/ytdw/

Tôi hy vọng điều này sẽ giúp một ai đó. Đây là giải pháp làm việc (ngày: 06-04-2013)

Các vấn đề liên quan