Russian Qt Forum

Qt => Общие вопросы => Тема начата: Ubuntu_linux от Март 17, 2013, 04:54



Название: Как выкачать видео с ютуба
Отправлено: Ubuntu_linux от Март 17, 2013, 04:54
Какой алгоритм использовать?


Название: Re: Как выкачать видео с ютуба
Отправлено: Bepec от Март 17, 2013, 07:52
http://freehabr.ru/blog/php/797.html

Это для php, но в принципе алгоритм можно понять. И хотя б на джаву перенести )


Название: Re: Как выкачать видео с ютуба
Отправлено: Ubuntu_linux от Март 17, 2013, 12:25
http://freehabr.ru/blog/php/797.html

Это для php, но в принципе алгоритм можно понять. И хотя б на джаву перенести )
Спасибо, ютуб дает ответ на запрос, но каждий раз он чуточку разный  в 'fmt_url_map' и тут незню как бить. Плюс попадаются два itag с разными значениями в одном линке. Что делать?


Название: Re: Как выкачать видео с ютуба
Отправлено: Bepec от Март 17, 2013, 13:38
Не сетевик, незнаю :)

PS я с сайтов трансляций качал "нескачиваемые" матчи тупым заливом куков. Но эт молодой был, неопытный.


Название: Re: Как выкачать видео с ютуба
Отправлено: Ubuntu_linux от Март 17, 2013, 15:36
Не сетевик, незнаю :)

PS я с сайтов трансляций качал "нескачиваемые" матчи тупым заливом куков. Но эт молодой был, неопытный.
Воощето я делаю ето на js, но то не суть важно. Главное почему ютуб себя коварно ведет и как ето побороть?


Название: Re: Как выкачать видео с ютуба
Отправлено: Bepec от Март 17, 2013, 23:32
Вкратце - у него дофига серверов для раздачи, это раз. Во вторых за показ рекламы во время просмотра они неплохо дерут бабки :D Потому и выдумывают поболе :D


Название: Re: Как выкачать видео с ютуба
Отправлено: kamre от Март 17, 2013, 23:56
SMPlayer (http://smplayer.sourceforge.net/) умеет играть видео с ютуба, можно в его исходниках поискать.


Название: Re: Как выкачать видео с ютуба
Отправлено: Ubuntu_linux от Март 18, 2013, 03:20
SMPlayer (http://smplayer.sourceforge.net/) умеет играть видео с ютуба, можно в его исходниках поискать.
Ок, вот оно:
Код
C++ (Qt)
void RetrieveVideoUrl::gotVideoPage(QNetworkReply *reply)
{
   if(reply->error() != QNetworkReply::NoError)
   {
       emit errorOcurred(m_title, (int)reply->error());
       return;
   }  
   QByteArray arr = reply->readAll();    
   if(arr.isEmpty())
   {
       fetchYTVideoPage(id, m_title);
       return;
   }
   QString replyString = QString::fromUtf8(arr.constData(), arr.size());        
   QRegExp regex("\\\"url_encoded_fmt_stream_map\\\"\\s*:\\s*\\\"([^\\\"]*)");
   regex.indexIn(replyString);
   QString fmtArray = regex.cap(1);    
   fmtArray = sanitizeForUnicodePoint(fmtArray);
   fmtArray.replace(QRegExp("\\\\(.)"), "\\1");
   htmlDecode(fmtArray);
   QStringList codeList = fmtArray.split(',');
   foreach(QString code, codeList)
   {
// (2012-12-20) Youtube Fix by RVM for SMPlayer (http://smplayer.sourceforge.net)
 
/* qDebug("RetrieveYoutubeUrl::parse: code: '%s'", code.toLatin1().constData()); */
 
int itag = 0;
QString n_url;
QString url;
QString s_itag;
 
QStringList par_list = code.split(QRegExp("&|\\?"));
foreach(QString par, par_list) {
/* qDebug("RetrieveYoutubeUrl::parse: par: %s", par.toLatin1().constData()); */
 
if (par.startsWith("url=")) url = par.mid(4);
else
if (par.startsWith("itag=")) {
if (s_itag.isEmpty()) {
s_itag = par;
QRegExp rx("itag=(\\d+)");
if (rx.indexIn(s_itag) != -1) itag = rx.cap(1).toInt();
/* qDebug("RetrieveYoutubeUrl::parse: itag: %d", itag); */
}
}
else {
if (!n_url.isEmpty()) n_url += "&";
n_url += par;
}
}
n_url = url + "?" + s_itag + "&" + n_url;
n_url.replace("&sig=", "&signature=");
 
/* qDebug("RetrieveYoutubeUrl::parse: n_url: '%s'", n_url.toLatin1().constData()); */
 
urlMap[itag] = n_url;
   }
 
   emit gotUrls(urlMap, m_title, id);    
}

Но все равно, что то ютуб у меня выделывается...



Название: Re: Как выкачать видео с ютуба
Отправлено: IGreench от Март 28, 2013, 07:43
Вот реализация на питоне http://rg3.github.com/youtube-dl/index.html
Очень удобная и хорошая

Вот gui обёртка на него, написанная на Qt https://sourceforge.net/projects/gyd/

Не знаю, для каких задач нужен алгоритм, но я бы не стал его переписывать на Qt, а вот обёртку бы свою написал  :)

И напишите свои соображения, находки и прочее. Тема интересная и, порой, актуальная.


Название: Re: Как выкачать видео с ютуба
Отправлено: Ubuntu_linux от Март 28, 2013, 15:20
Вот реализация на питоне http://rg3.github.com/youtube-dl/index.html
Очень удобная и хорошая

Вот gui обёртка на него, написанная на Qt https://sourceforge.net/projects/gyd/

Не знаю, для каких задач нужен алгоритм, но я бы не стал его переписывать на Qt, а вот обёртку бы свою написал  :)

И напишите свои соображения, находки и прочее. Тема интересная и, порой, актуальная.
Спасибо, но я сам раскрыл тайну ютуба, вот что получилось:
http://hdconvert.com/#youtube
Сколько я тестил, все работало как часики.


Название: Re: Как выкачать видео с ютуба
Отправлено: Ubuntu_linux от Март 28, 2013, 15:29
Я, вот, дописываю АПИ под все это дело, если кому интересно... Может подключиться без проблем и получать ссилочки на видео всех доступных форматов!
Если что, то напишите что хотели бы чтоб сервер отдавал в ответ.!

Сейчас сервер отдает ответ в формате JSON с несколькими комбинациями:
1) Полностью все ссилки по порядку вормат-качество + названия ролика+ продолжительность ролика+автор+звездочки
2) аналогично п.1 но с конкретно запрашиваемой ссилочкой с соответственными параметрами формат-качество
3) Просто единственная запрашиваемая, формат-качество, ссилочка в текстовом виде


Название: Re: Как выкачать видео с ютуба
Отправлено: Ubuntu_linux от Март 28, 2013, 15:33
В чем фишка? - Когда ютуб опять что-то поменяет, то не надо перерисовать/компилировать приложения достаточно МНЕ изменить серверную логику....
Есть вопросы  ???


Название: Re: Как выкачать видео с ютуба
Отправлено: IGreench от Март 28, 2013, 21:15
Круто! Мне нравится.
Хочу апи к такой сладости =)
И конвертирование, и скачивание с ютуба было бы круто.

Если не секрет, то было бы здорово узнать тайну алгоритма   ;)


Название: Re: Как выкачать видео с ютуба
Отправлено: Ubuntu_linux от Март 28, 2013, 21:40
Круто! Мне нравится.
Хочу апи к такой сладости =)
И конвертирование, и скачивание с ютуба было бы круто.

Если не секрет, то было бы здорово узнать тайну алгоритма   ;)

Все очень сложно и просто  как бы. %) На словах тяжело объяснить... Тай зачем, если есть апи?