Что нового

[Сеть, интернет] youtube downloader - качаем видео с youtube.com сами

dwerf

Использует ArchLinux
Сообщения
478
Репутация
219
AutoIt: 3.3.6.1
Версия: первая рабочая

Категория: Автоматизация, Сеть, Разное

Описание: Сабж. Качаем flash video (*.flv) с youtube. Смотреть можно в VLC-плеере. Делал без особых наворочек, чтобы алгоритм скачивания был понятен, т.к. сам в сети смог найти только устаревшую информацию по этой теме, да и то только когда сам с этим разобрался.

Зы:
Разбирался через Opera Dragonfly, закладка Network.
В принципе можно через любую программу/сервис позволяющую смотреть заголовки http.
Например плагин к FireFox, называется вроде бы live-http-headers.

Код:
Код:
;пользователь вводит ссылку
$sLink = InputBox('youtube downloader', 'введите ссылку на видео' & @CRLF & @CRLF & 'пример:' & @CRLF & 'http://www.youtube.com/watch?v=-ZtCRJld08c&&feature=related', '', '', 500)
If @error Then Exit

;проверяем ссылку на валидность
;в ссылке дожен стоять адрес youtube.com/watch и параметр v=id нужного видео
;проверяем наличие "youtube.com/watch": youtube\.com/watch
;перед параметром v могут присутствовать другие параметры: .*
;перед параметром v должен присутствовать ? если v является первым параметром или & если v таковым не является: (?:\?|&)
;дальше идёт название параметра и =: v=
;дальше идёт значение параметра v, оно не может содержать &, т.к. этот сивол указывает на начало следующиго параметра: [^&]+
If Not StringRegExp($sLink, 'youtube\.com/watch.*(?:\?|&)v=[^&]+') Then
	MsgBox(16, 'Ошибка', 'Кривая ссылка.')
	Exit
EndIf

;получаем значение параметра v
;например из 'http://www.youtube.com/watch?v=-ZtCRJld08c&feature=related'
;-ZtCRJld08c
$sVideoId = StringRegExpReplace($sLink, '.*?(?:\?|&)v=([^&]+).*', '$1')

;качаем с youtube текст, в котором находится ссылка на видео
$sVideoInfo = InetRead('http://www.youtube.com/get_video_info?video_id=' & $sVideoId, 1)
If @error Or $sVideoInfo='' Then
	MsgBox(16, 'Ошибка', 'Не удаётся скачать:' & @CRLF & 'http://www.youtube.com/get_video_info?video_id=' & $sVideoId)
	Exit
EndIf
;из справки: "The returned data is in binary format. The BinaryToString() function can be used to convert the data to a string."
$sVideoInfo = BinaryToString($sVideoInfo)

;декодируем текст, пока в тексте присутствуют %xy, заменяем их на Chr(Dec(xy)) (гуглить url encoding)
While StringRegExp($sVideoInfo, '%[a-fA-F\d]{2}')
	$sCode = StringRegExpReplace($sVideoInfo, '(?s).*?%([a-fA-F\d]{2}).*', '$1')
	$sVideoInfo = StringReplace($sVideoInfo, '%' & $sCode, Chr(Dec($sCode)))
WEnd

;в тексте будут несколько строк/ссылок разделённых |
;нам нужна та, которая находится между первым и вторым |
;в ней должно присутствовать "youtube.com/videoplayback?"
;проверяем её наличие и валидность:
;перед первым | могут присутствовать символы: .*?
;|: \|
;дальше снова идут неизвестные символы, так как нам нужна ссылка находящаяся между первым и вторым |, эти символы не являются |: [^\|]*
;в ссылке должно присутствовать "youtube.com/videoplayback?": youtube\.com/videoplayback\?
;потом идут ещё какие-то символы и должен быть ещё один |: .*\|
If Not StringRegExp($sVideoInfo, '.*?\|[^\|]*youtube\.com/videoplayback\?.*\|') Then
	MsgBox(16, 'Ошибка', 'Данные о видео скачаны в не известном формате.')
	Exit
EndIf

;Получаем ссылку
$sLink = StringRegExpReplace($sVideoInfo, '.*?\|(.*?)\|.*', '$1')

;Пользователь вводит адрес, куда сохранять файл
$sSavePath = FileSaveDialog('youtube downloader', @WorkingDir, 'Flash video (*.flv)|All files (*.*)', 18)
If @error Or $sSavePath = '' Then Exit

;собственно качаем
$hInet = InetGet($sLink, $sSavePath, 1, 1)
ProgressOn('youtube downloader', $sLink)
Do
	$aInfo = InetGetInfo($hInet)
	ProgressSet($aInfo[0]*100/$aInfo[1], $aInfo[0] & '/' & $aInfo[1] & ' байтов')
Until $aInfo[2]
InetClose($hInet)
ProgressOff()

If $aInfo[3] Then
	MsgBox(0, 'youtube downloader', 'Скачанно успешно')
Else
	MsgBox(16, 'Ошибка', 'При скачивании произошла ошибка ' & $aInfo[4])
EndIf

Автор(ы): dwerf
 

FlatX007

Tattoo!
Сообщения
197
Репутация
35
Re: [Сеть, интернет] youtube downloader

У меня менеджер для "Ютубуа" может качать в 3х форматах, 3GP, FLV, MP4 (HD)
 

CaveMan

Новичок
Сообщения
1
Репутация
0
Re: [Сеть, интернет] youtube downloader

FlatX007 сказал(а):
У меня менеджер для "Ютубуа" может качать в 3х форматах, 3GP, FLV, MP4 (HD)
Выложи пожалуйста код или скомпилированный .exe
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Re: [Сеть, интернет] youtube downloader

dwerf
Предупреждение За нарушение правил форума (пункт Б.5):
Имя темы должно нести смысловую нагрузку (отражать суть вопроса/проблемы)
Правильно сформулированное название темы привлекает больше внимания, и шансы получить конкретный ответ увеличиваются.


Как правильно называть темы

[[Сеть, интернет] youtube downloader] это неприемлемое название темы, переименуйте тему иначе она будет закрыта.

С уважением, Администратор форума.
 

Zaramot

I ♥ AutoIt
Сообщения
1,160
Репутация
660
Re: [Сеть, интернет] youtube downloader

Вот: Tiny Youtube Downloader

P.S. Просто добавляете ss перед youtube, а дальше всё ясно:
www.ssyoutube.com/watch?v=Pruyaq9QFRM :smile:
 
Верх