Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.09.2011, 16:47   #1
DjDram
Пользователь
 
Регистрация: 14.06.2009
Сообщений: 53
По умолчанию YOUTUBE delphi (парсинг)

Добрый когда то писал загрузку видео с youtube

использовал следующий код

в uses проекта добавлял GetTube;

в обработчике события нажатия кнопки прописывал

PHP код:
procedure TForm1.Button1Click(SenderTObject);
begin
  
if GetVideoFile('http://www.youtube.com/watch?v=XXXXXXXXXXX',       
   
'C:\Temp\VideoTube.flv'then                                  
  ShowMessage
('Файл получен!')                                  
     else 
ShowMessage('Ошибка');      
end
GetTube.pas

PHP код:
unit GetTube;
 
interface
 
uses
    Windows
,
    
SysUtils,
    
Wininet,
    
Classes,
     
IdHTTP;
 
Function 
GetVideoFile(const URLSaveFileName String) : Boolean;
 
implementation
 
function GetInetFile(const fileURLFileNameString): boolean;
const
    
BufferSize 1024;
var
    
hSession,
     
hURL       :   HInternet;
    
Buffer  :   array[1..BufferSizeof Byte;
    
BufferLen   :   DWORD;
    
f       :   File;
begin
    Result
:=False;
 
    
hSession := InternetOpen(''INTERNET_OPEN_TYPE_PRECONFIG,
            
nilnil0);
    try
        
hURL := InternetOpenURL(hSession,
        
PChar(fileURL),nil,0,0,0);
        try
                
AssignFile(fFileName);
                
Rewrite(f,1);
                
repeat
                    InternetReadFile
(hURL, @BufferSizeOf(Buffer), BufferLen);
                    
BlockWrite(fBufferBufferLen)
                
until BufferLen 0;
                
CloseFile(f);
                
Result:=True;
        finally
            
InternetCloseHandle(hURL)
        
end
    
finally
        
InternetCloseHandle(hSession)
    
end
end
;
 
Function 
GetVideoFile(const URLSaveFileName String) : Boolean;
     function 
fAnsiPos(const SubstrSstringFromPosinteger) : Integer;
     var
          
tmp  :    String;
          
p   :    Integer;
     
begin
          Result 
:= 0;
          
tmp := copy(SFromPos, (Length(S) - FromPos));
          
:=  pos(Substrtmp);
          if 
<> 0 then Result := FromPos 1;
     
end;
const
     
BeginURLFile   =   'http://www.youtube.com/get_video?video_id=';
var
     
IdHTTP     :   TIdHTTP;
     
WebDoc     :   TStringStream;
     
X1,
     
X2,
     
X4,
     
X5         :   Integer;
     
FullURLFile    :   String;
Begin
    Result 
:= false;
    
IdHTTP := TIdHTTP.Create(nil);
    try
        
WebDoc := TStringStream.Create('');
          try
        
with IdHTTP do
            
Begin
                Request
.UserAgent := 'MSIE';
                    
Request.Host := 'www.youtube.com';
            
End;
            
IdHTTP.Get(URLWebDoc);
 
               
X1 := fAnsiPos('"'WebDoc.DataStringPos('"video_id":'WebDoc.DataString) + 11)+1;
               
X2 := fAnsiPos('"'WebDoc.DataStringX1);
               
FullURLFile := BeginURLFile;
 
               
FullURLFile := FullURLFile copy(WebDoc.DataStringX1X2-X1) + '&t=';
 
               
X4 := fAnsiPos('"'WebDoc.DataStringPos('"t"'WebDoc.DataString) + 3)+1;
               
X5 := fAnsiPos('"'WebDoc.DataStringX4+1);
 
               
FullURLFile := FullURLFile copy(WebDoc.DataStringX4X5-X4);
 
               if 
GetInetFile(FullURLFileSaveFileNamethen Result := true;
          finally
          
WebDoc.Free;
          
end;
     finally
        
IdHTTP.Free;
     
end;
End;     
end
похоже страница на Youtube изменилась кто силён в парсинге помогите. спасибо
DjDram вне форума Ответить с цитированием
Старый 05.09.2011, 10:05   #2
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Цитата:
Сообщение от DjDram Посмотреть сообщение
похоже страница на Youtube изменилась кто силён в парсинге помогите. спасибо
Youtube частенько меняет формат данных, и проигрыватель. А вообще там теоретически все просто.
Есть сайт http://www.savefrom.net
как утверждают создатели к урлу достаточно приписать определенный префикс чтобы получить урл на файл который можно качать любым менеджером. Это один способ.
Другой это анализ той строчки урла которую выдает этот же сайт. Нахождение закономерности в коде страницы ютуба и как результат написание своего парсера. Но переодически парсер придется переписывать по вышеуказанной причине.
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 05.09.2011, 10:31   #3
DjDram
Пользователь
 
Регистрация: 14.06.2009
Сообщений: 53
По умолчанию

Ну в принципе да есть http://www.savefrom.net он не плохо парсит
попробывал пропасить им
http://ssyoutube.com/watch?v=eiOcrJtrQbE

Источник
youtube.com/watch?v=eiOcrJtrQbE

Парс на загрузку

Код:
http://o-o.preferred.rds-omr1.v18.lscache4.c.youtube.com/videoplayback?sparams=id%2Cexpire%2Cip%2Cipbits%2
Citag%2Cratebypass&fexp=903708%2C915600&itag=18&ip=82.0.0.0&signature=8384D65EE1F94C3D1ED68A7D4B36C66B
E1B7EE53.C52D3A6CCA5DEBB9DD70A5A8311B2EDE3CE8B1&sver=3&ratebypass=yes&expire=1315227600&key=yt1&ipbits
=8&id=7a239cac9b6b41b1&title=The+Chemodan+-+%D0%92%D0%B8%D0%B4%D0%B5%D0%BE%D0%BF%D1%80%
D0%B8%D0%B3%D0%BB%D0%B0%D1%88%D0%B5%D0%BD%D0%B8%D0%B5+%D0%BD%D0%B0+%D0%A3%D1
%80%D0%B0%D0%BB
они вообще всё поменяли раньше было просто
'http://www.youtube.com/get_video?video_id=XXXXXXXXX'
ищем 11 значный id видео добавляем его в ссылку выше и вуаля а сейчас воообще какой то
_http://o-o.preferred.rds-omr1.v10.lscache2.c.youtube.com/videoplayback?sparams=id
сейчас посмотрим всё ли можно самому вытянуть в парсинге

Последний раз редактировалось DjDram; 05.09.2011 в 10:59.
DjDram вне форума Ответить с цитированием
Старый 05.09.2011, 11:56   #4
DjDram
Пользователь
 
Регистрация: 14.06.2009
Сообщений: 53
По умолчанию

Код:
http://o-o.preferred.rds-omr1.v18.lscache4.c.youtube.com/videoplayback?sparams=id%2Cexpire%2Cip%2Cipbits%2Citag%2Cratebypass
&fexp=903708%2C915600
&itag=18
&ip=82.0.0.0
&signature=8384D65EE1F94C3D1ED68A7D4B36C66BE1B7EE53.C52D3A6CCA5DEBB9DD70A5A8311B2EDE3CE8B1
&sver=3
&ratebypass=yes
&expire=1315227600
&key=yt1
&ipbits=8
&id=7a239cac9b6b41b1
&title=The+Chemodan+-+%D0%92%D0%B8%D0%B4%D0%B5%D0%BE%D0%BF%D1%80%D0%B8%D0%B3%D0%BB%D0%B0%D1%88%D0%B5%D0%BD%D0%B8%D0%B5+%D0%BD%D0%B0+%D0%A3%D1%80%D0%B0%D0%BB
а кто в курсе что из этих параметров что означает и все ли они нужны?

P.S.методом исключения &fexp=903708%2C915600 и &sver=3 это уже не обязательные параметры

Последний раз редактировалось DjDram; 05.09.2011 в 13:02.
DjDram вне форума Ответить с цитированием
Старый 05.09.2011, 12:57   #5
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Цитата:
Сообщение от DjDram Посмотреть сообщение
[CODE]
P.S.методом исключения &fexp=903708%2C915600 и &sver=3 это уже не обязательные параметры
параметр title также не нужен. проверено. тем же самым тыком
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 05.09.2011, 13:40   #6
DjDram
Пользователь
 
Регистрация: 14.06.2009
Сообщений: 53
По умолчанию

да в &titel забиваем своё имя файла любое например videoout.mp4
DjDram вне форума Ответить с цитированием
Старый 05.09.2011, 13:46   #7
DjDram
Пользователь
 
Регистрация: 14.06.2009
Сообщений: 53
По умолчанию

Вообщем получается так

берем ссылку на видео

http://www.youtube.com/watch?v=AeqXl...eature=related

парсим её в парсинге выдираем код
с тегом img.src = ""

для данной ссылки он у нас будет следующим

Код:
img.src = "http:\/\/o-o.preferred.arn06s03.v19.
lscache8.c.youtube.com\/generate_204?sparams=id%2Cexpire%2Cip%
2Cipbits%2Citag%2Cratebypass%2Coc%3AU0hQSlJOVl9FSkNOMF9KSFpF
\u0026fexp=901318%2C907605%2C903116
\u0026itag=43
\u0026ip=0.0.0.0
\u0026signature=3739A2A156F59494C373FC6A7CDBABC89DC8B3.17AE1A45FC409C634D0ECAF9B067635A96A1B8B2
\u0026sver=3
\u0026ratebypass=yes
\u0026expire=1315238400
\u0026key=yt1
\u0026ipbits=0
\u0026id=01ea97963604f9c9";
из него формируем запрос

Код:
http://o-o.preferred.rds-omr1.v18.lscache4.c.youtube.com/videoplayback?sparams=id%2Cexpire%2Cip%2Cipbits%2Citag%2Cratebypass
&fexp=901318%2C907605%2C903116
&itag=43
&ip=0.0.0.0
&signature=3739A2A156F59494C373FC6A7CDBABC89DC8B3.17AE1A45FC409C634D0ECAF9B067635A96A1B8B2
&sver=3
&ratebypass=yes
&expire=1315238400
&key=yt1
&ipbits=0
&id=01ea97963604f9c9
&title=my.mp4
соответственно в парсинге
Код:
\u0026
это наша &
Код:
http:\/\/o-o.prefer
меняем VV на //
Код:
youtube.com\/generate
меняем \/ на /

пробуем
Код:
http://o-o.preferred.rds-omr1.v18.lscache4.c.youtube.com/videoplayback?sparams=id%2Cexpire%2Cip%2Cipbits%
2Citag%2Cratebypass&fexp=901318%2C907605%2C903116&itag=43&ip=0.0.0.0&signature=3739A2A156F59494C373F
C6A7CDBABC89DC8B3.17AE1A45FC409C634D0ECAF9B067635A96A1B8B2&sver=3&ratebypass=yes&expire=131523840
0&key=yt1&ipbits=0&id=01ea97963604f9c9&title=1.mp4
пишет запрещено, где собака зарыта не понятно

P.S. чёт туплю ссылка же всегда должна начинаться с
Код:
http://o-o.preferred.rds-omr1.v18.lscache4.c.youtube.com/videoplayback?sparams=id
потом выдёргиваем весь текст от =id до первого \u0026 и добавляем его к ссылки которая обозначена выше тогда всё грузиться )

Последний раз редактировалось DjDram; 05.09.2011 в 14:22.
DjDram вне форума Ответить с цитированием
Старый 05.09.2011, 13:48   #8
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Цитата:
Сообщение от DjDram Посмотреть сообщение
да в &titel забиваем своё имя файла любое например videoout.mp4
Хм.. прикольно ...
А еще у меня была идея: там у ютуба в странице есть ссылка на проигрыватель swf. Чтобы не париться постоянно с переписыванием парсера можно ведь как нибудь загружать это проигрыватель как положено, и перехватывать поток который проигрыватель будет производить. ну и писать этот поток в файл ... но даже не знаю реально ли такое без доп. драйвера на сетевой карточке.
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 05.09.2011, 13:51   #9
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

тег img.src = указывает на заголовочную картинку ролика.
нам нужен тег "url_encoded_fmt_stream_map"
Там то и будут лежать ссылки (закодированые) на ролики с различным качеством и разрешением. штуки 4 или пять ссылок будет.


Вот тут таблица аски по которой надо менять символы которые указаны с "%" ASCII
НО ... символ %252 меняем на %2 и больше не трогаем. там получиться "%2С" это надо оставить.
В общем меняем и смотрим чтоб было похоже на то что нам дает сэйфромнет.
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.

Последний раз редактировалось WorldMaster; 05.09.2011 в 13:55.
WorldMaster вне форума Ответить с цитированием
Старый 05.09.2011, 13:57   #10
DjDram
Пользователь
 
Регистрация: 14.06.2009
Сообщений: 53
По умолчанию

Цитата:
Сообщение от WorldMaster Посмотреть сообщение
Хм.. прикольно ...
А еще у меня была идея: там у ютуба в странице есть ссылка на проигрыватель swf. Чтобы не париться постоянно с переписыванием парсера можно ведь как нибудь загружать это проигрыватель как положено, и перехватывать поток который проигрыватель будет производить. ну и писать этот поток в файл ... но даже не знаю реально ли такое без доп. драйвера на сетевой карточке.
ну я что то типо того и пуши чтоб можно было в моём проигрывателе(плагин) использовать открытие ссылок youtube в псевдо потоке через кэш
DjDram вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
youtube unbanned Свободное общение 10 31.05.2011 22:22
[Delphi] Парсинг ссылки из письма с email'а stalker_1894 Помощь студентам 1 08.11.2010 15:49
XML (парсинг MSXML2_TLB.pas) и Delphi 2009 S_Yevgeniy Помощь студентам 0 17.09.2009 18:22
XML (парсинг NativeXml ) и Delphi 2009 S_Yevgeniy Помощь студентам 13 17.09.2009 15:56