Delphi+YouTube
, Как?
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.217.37] |
|
|
Соблюдайте общие правила форума
MSDN Library
FAQ раздела
Поиск по разделу
Как правильно задавать вопросы| Страницы: (4) 1 [2] 3 4 все ( Перейти к последнему сообщению ) |
Delphi+YouTube
, Как?
|
Сообщ.
#16
,
|
|
|
|
Rouse_ возник впрос а перехватить как-нибудь разве нельзя адреса роликов, например, посылая запросы на YouTube ...
|
|
Сообщ.
#17
,
|
|
|
|
Цитата andrew.virus @ а перехватить как-нибудь разве нельзя адреса роликов, например, посылая запросы на YouTube Мне такие способы не известны |
|
Сообщ.
#18
,
|
|
|
|
Ура! Я разобрался...
В аттаче мой енот, с помощью которого можно скачивать видео с www.youtube.com Угощаемся =) P.S. Код мальца кривой, но рабочий! Прикреплённый файл GetYTVFile.zip (1.33 Кбайт, скачиваний: 1090)
|
|
Сообщ.
#19
,
|
|
|
|
Attack спасибо ...
|
|
Сообщ.
#20
,
|
|
|
|
пробывал этот код переделать под наш баштуб но неполучилось ничего.
Можете переделать эту программу под скачку видео дял сервиса http://bashtube.ru/ ? |
|
Сообщ.
#21
,
|
|
|
|
Tapac, перекроил под bashtube.ru=) пользуем...
Прикреплённый файл GetBTVFile.zip (1.22 Кбайт, скачиваний: 404)
|
|
Сообщ.
#22
,
|
|
|
|
Вот пример использования, так на всякий слуай =)
Прикреплённый файл BD.zip (3.06 Кбайт, скачиваний: 500)
|
|
Сообщ.
#23
,
|
|
|
|
ага, этот BD.zip при запуске требует какойто компонент(((
|
|
Сообщ.
#24
,
|
|
|
|
Обновлённый енот для bashtube.ru
![]() ![]() //////////////////////////////////////////////////////////////////////////////// /// /// /// -------= GetBashTubeVideoFile =------- /// /// /// /// Ссылка должна быть вида: /// /// http://bashtube.ru/video/XXXX/ /// /// /// /// Пример использования: /// /// /// /// if GetVideoFile('http://bashtube.ru/video/XXXX/', /// /// 'C:\VideoFile.flv') then /// /// ShowMessage('Файл получен!') /// /// else ShowMessage('Ошибка'); /// /// /// //////////////////////////////////////////////////////////////////////////////// unit GetBTVFile; interface uses Windows, SysUtils, Wininet, Classes, IdHTTP; Function GetVideoFile(const URL, SaveFileName : String) : Boolean; implementation function GetInetFile(const fileURL, FileName: String): boolean; const BufferSize = 1024; var hSession, hURL : HInternet; Buffer : array[1..BufferSize] of Byte; BufferLen : DWORD; f : File; begin Result:=False; hSession := InternetOpen('', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0); try hURL := InternetOpenURL(hSession, PChar(fileURL),nil,0,0,0); try AssignFile(f, FileName); Rewrite(f,1); repeat InternetReadFile(hURL, @Buffer, SizeOf(Buffer), BufferLen); BlockWrite(f, Buffer, BufferLen) until BufferLen = 0; CloseFile(f); Result:=True; finally InternetCloseHandle(hURL) end finally InternetCloseHandle(hSession) end end; Function GetVideoFile(const URL, SaveFileName : String) : Boolean; function fAnsiPos(const Substr, S: AnsiString; FromPos: integer) : Integer; var P : PAnsiChar; begin Result := 0; P := AnsiStrPos(PAnsiChar(S) + fromPos - 1, PAnsiChar(SubStr)); if P <> nil then Result := Integer(P) - Integer(PAnsiChar(S)) + 1; end; var IdHTTP : TIdHTTP; WebDoc : TStringStream; X1, X2 : 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.bashtube.ru'; End; IdHTTP.Get(URL + 'play.xml?123', WebDoc); X1 := fAnsiPos('<location>', WebDoc.DataString, Pos('</creator>', WebDoc.DataString) + 10)+10; X2 := fAnsiPos('</location>', WebDoc.DataString, X1); FullURLFile := copy(WebDoc.DataString, X1, X2-X1); if GetInetFile(FullURLFile, SaveFileName) then Result := true; finally WebDoc.Free; end; finally IdHTTP.Free; end; End; end. Хочу заметить, что енот написан и тестирован на Delphi 2009 |
|
Сообщ.
#25
,
|
|
|
|
Есть ли возможность как-то это узнать, например с помощью снифера? |
|
Сообщ.
#26
,
|
|
|
|
ну лично я понял откуда берётся видео разбирая исходник.
Например открывает ссылку http://bashtube.ru/video/10181/ И просто напросто добавим туда play.xml?123 И у нас выходит ссылка http://bashtube.ru/video/10181/play.xml?123 И у нас будет написано http://bashtube.ru/spotajob1.swf http://www.ufanet.ru/ overlay http://bashtube.ru/files/93/93dc089120dbbe0130fbdf3f06ac0d54.flv Вот ссылка http://bashtube.ru/files/93/93dc089120dbbe0130fbdf3f06ac0d54.flv и есть тот самый видос !!! А не знаете ли как зделать эту программу чтобы например мона было грузить более 2-ух видосов сразу ! А то ведь вставляешь ссылку в прогу и всё, пока нескачает нельзя к ней обращаться. Я имею ввиду то, чтобы зделать 1 оболочку, и зделать 1 программу которая будет запускаться из-под оболочки и сохранять видосы |
|
Сообщ.
#27
,
|
|
|
|
Tapac, вроде привели вверху код. Осталось только потоки создавать, передавать в них разные ссылки на скачку и усе
|
|
Сообщ.
#28
,
|
|
|
|
Пример для YouTube не работает.
Качаем файл: http://www.youtube.com/watch?v=Y0a1e2wvhCs FullURLFile в функции GetVideoFile становится следующим: http://www.youtube.com/get_video?video_id=Y0a1e2wvhCs&t=t И никакого FLV по этому адресу нет. |
|
Сообщ.
#29
,
|
|
|
|
Такая же проблема
ну что с ютубом делать? |
|
Сообщ.
#30
,
|
|
|
|
pkotenev, ZILOSOFT, всё дело в том что ребята из youtube просто изменили код странички...
Переписал Unit, теперь всё работает, по крайней мере пока! ![]() ![]() //////////////////////////////////////////////////////////////////////////////// /// /// /// -------= GetYouTubeVideoFile =------- /// /// /// /// Ссылка должна быть вида: /// /// http://www.youtube.com/watch?v=XXXXXXXXXXX /// /// /// /// Пример использования: /// /// /// /// if GetVideoFile('http://www.youtube.com/watch?v=XXXXXXXXXXX', /// /// 'C:\VideoFile.flv') then /// /// ShowMessage('Файл получен!') /// /// else ShowMessage('Ошибка'); /// /// /// ///------------------>>> Написано на Delphi 2009 <<<-------------------------/// /// с предыдущими версиями работать НЕ должно! /// //////////////////////////////////////////////////////////////////////////////// unit GetYTVFile; interface uses Windows, SysUtils, Wininet, Classes, IdHTTP; Function GetVideoFile(const URL, SaveFileName : String) : Boolean; implementation function GetInetFile(const fileURL, FileName: String): boolean; const BufferSize = 1024; var hSession, hURL : HInternet; Buffer : array[1..BufferSize] of Byte; BufferLen : DWORD; f : File; begin Result:=False; hSession := InternetOpen('', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0); try hURL := InternetOpenURL(hSession, PChar(fileURL),nil,0,0,0); try AssignFile(f, FileName); Rewrite(f,1); repeat InternetReadFile(hURL, @Buffer, SizeOf(Buffer), BufferLen); BlockWrite(f, Buffer, BufferLen) until BufferLen = 0; CloseFile(f); Result:=True; finally InternetCloseHandle(hURL) end finally InternetCloseHandle(hSession) end end; Function GetVideoFile(const URL, SaveFileName : String) : Boolean; function fAnsiPos(const Substr, S: string; FromPos: integer) : Integer; var tmp : String; p : Integer; begin Result := 0; tmp := copy(S, FromPos, (Length(S) - FromPos)); p := pos(Substr, tmp); if p <> 0 then Result := p + 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(URL, WebDoc); X1 := fAnsiPos('"', WebDoc.DataString, Pos('"video_id":', WebDoc.DataString) + 11)+1; X2 := fAnsiPos('"', WebDoc.DataString, X1); FullURLFile := BeginURLFile; FullURLFile := FullURLFile + copy(WebDoc.DataString, X1, X2-X1) + '&t='; X4 := fAnsiPos('"', WebDoc.DataString, Pos('"t"', WebDoc.DataString) + 3)+1; X5 := fAnsiPos('"', WebDoc.DataString, X4+1); FullURLFile := FullURLFile + copy(WebDoc.DataString, X4, X5-X4); if GetInetFile(FullURLFile, SaveFileName) then Result := true; finally WebDoc.Free; end; finally IdHTTP.Free; end; End; end. написано и протестировано на Delhpi 2009 А вообще ребята, парсер вам в помощь, я этот енот написал чисто для того, чтобы новичкам было от чего отталкиваться! А обновляю его от делать нечего )) |