Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2019.03.10;
Скачать: CL | DM;

Вниз

Получить адрес потока видео с Youtube   Найти похожие ветки 

 
Artem78 ©   (2016-10-28 03:26) [0]

Нужно по ссылке на видео с Youtube (например: https://www.youtube.com/watch?v=tPVmFDjAfp8) получить ссылку на сам видео поток (http://r16---sn-5hne6nl6.googlevideo.com/videoplayback?dur=748.402&upn=SijNsBoqZZs&pl=19&id=o-AMVzNhAP1BaGGT2jtcLM6DAGjP_Zmi3USNMmIkrds8JC&source=youtube&ratebypass=yes&signa ture=0FC292202109AB47606851DE70BF1257E56DD38B.... и т.д.). Этот адрес можно получить здесь: http://www.youtube.com/get_video_info?video_id=tPVmFDjAfp8 . Структура как видете очень запутанная, потоков тут много, нужно выдрать хотябы первый попавшийся.

Посоветуйте, как его можно подцепить? Может где-нибудь есть уже готовый модуль для этого?

P.S. Есть рабочий код на php для этой задачи - http://stackoverflow.com/a/13968020/4108542 . PHP я знаю хорошо, но испытываю трудности с переносом этого кода на Delphi.


 
Artem78 ©   (2016-10-28 16:05) [1]

Неужели никто не может помочь? очень нужно


 
kilkennycat ©   (2016-10-29 03:24) [2]

я могу помочь. что именно у тебя не получается?


 
stas ©   (2016-10-29 16:39) [3]

RegExp в помощь.


 
Artem78 ©   (2016-11-13 01:26) [4]

Немного подумав, таки решил задачу. Выкладываю код, может кому-нибудь ещё пригодится:

unit uYoutube;

interface

uses
 Classes,
 SysUtils,
 httpsend, ssl_openssl, synacode, PerlRegEx,
 Windows;

function GetYoutubeDownloadLink(const VideoID: string): string;
function MemoryStreamToString(M: TMemoryStream): string;

implementation

function GetYoutubeDownloadLink(const VideoID: string): string;
var
 HTTPSender: THTTPSend;
 Str: string;
 RegexObj: TPerlRegEx;
begin
 Result := "";
 HTTPSender := THTTPSend.Create;
 try
   HTTPSender.HTTPMethod("GET", "https://www.youtube.com/get_video_info?video_id=" + VideoID);
   if (HTTPSender.ResultCode >= 100) and (HTTPSender.ResultCode<=399) then begin
     Str := MemoryStreamToString(HTTPSender.Document);
     RegexObj := TPerlRegEx.Create;
     try
       RegexObj.Subject := Str;
       RegexObj.RegEx := "url_encoded_fmt_stream_map=([^&]+)";
       if RegexObj.Match then
         Str := DecodeURL(RegexObj.Groups[1]);
     finally
       RegexObj.Free;
     end;

     RegexObj := TPerlRegEx.Create;
     try
       RegexObj.Subject := Str;
       RegexObj.RegEx := "url=([^&]+)";
       if RegexObj.Match then
         Str := DecodeURL(RegexObj.Groups[1]);
     finally
       RegexObj.Free;
     end;

     Result := Str;
   end;
 finally
   HTTPSender.Clear;
   HTTPSender.Free;
 end;
end;

function MemoryStreamToString(M: TMemoryStream): string;
begin
 SetString(Result, PChar(M.Memory), M.Size div SizeOf(Char));
end;

end.


 
Artem78 ©   (2016-11-13 01:28) [5]

Удалено модератором


 
Германн ©   (2016-11-13 01:51) [6]

Удалено модератором



Страницы: 1 вся ветка

Текущий архив: 2019.03.10;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.003 c
2-1478620871
Некто
2016-11-08 19:01
2019.03.10
StringGrid.Objects


1-1358834250
DevilDevil
2013-01-22 09:57
2019.03.10
Сплэш окно, MainWindow


15-1477431002
Юрий
2016-10-26 00:30
2019.03.10
С днем рождения ! 26 октября 2016 среда


2-1478291127
Иван
2016-11-04 23:25
2019.03.10
Определить путь к файлу (TSearchRec)


1-1360856114
brother
2013-02-14 19:35
2019.03.10
Перевести с C++