Форум: "Начинающим";
Текущий архив: 2019.03.10;
Скачать: [xml.tar.bz2];
ВнизПолучить адрес потока видео с 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.006 c