След поста за youtube video в mplayer и осъзнавайки че google и в частност youtube са били така добри да предоставят решение което не включва "хак" на уеб сайта им се почувствах задължен да споделя това с "милионите" читатели на блога ни.
Решението е именно google data api-то което с пълна сила работи с youtube предоставяйки тонове готови библиотеки за различни езици и доста удобна документация с примери на всички тези езици:
http://code.google.com/apis/youtube/2.0/developers_guide_protocol_audience.html
Ето и линк с информация за останалите API-та на google:
http://code.google.com/apis/youtube/getting_started.html
Авторът, верен на идеята, че може да пише на всеки създаван някога програмен език (дори и тези които никога не е виждал) разбира се се насочи към най-малко познатият си Python:
http://code.google.com/apis/youtube/1.0/developers_guide_python.html
Ето едно парче код като proof of concept с което ще приключим този пост:
#! /usr/bin/env python
# -*- coding: utf-8 -*-
# Author: Peach
import gdata.youtube
import gdata.youtube.service
import sys
def PrintEntryDetails(entry):
print '%s [%i:%i]' % (entry.media.title.text, (int(entry.media.duration.seconds)//60), (int(entry.media.duration.seconds)-(int(entry.media.duration.seconds)//60)*60) )
#print 'Video published on: %s ' % entry.published.text
#print 'Video description: %s' % entry.media.description.text
#print 'Video category: %s' % entry.media.category[0].text
#print 'Video tags: %s' % entry.media.keywords.text
#print 'Video watch page: %s' % entry.media.player.url
#print 'Video flash player URL: %s' % entry.GetSwfUrl()
#print 'Video duration: %s' % entry.media.duration.seconds
def PrintVideoFeed(feed):
i=1
for entry in feed.entry:
sys.stdout.write('[')
sys.stdout.write(str(i))
sys.stdout.write('] ')
i=i+1
PrintEntryDetails(entry)
def SearchAndPrint(search_terms):
yt_service = gdata.youtube.service.YouTubeService()
query = gdata.youtube.service.YouTubeVideoQuery()
query.vq = search_terms
query.max_results = 50
query.orderby = 'relevance'
query.racy = 'include'
feed = yt_service.YouTubeQuery(query)
PrintVideoFeed(feed)
SearchAndPrint('Rihanna unfaithful')
Показват се публикациите с етикет youtube. Показване на всички публикации
Показват се публикациите с етикет youtube. Показване на всички публикации
вторник, 15 март 2011 г.
петък, 11 март 2011 г.
YouTube в Mplayer (или друг плейър)
Големи благодарности на целия екип на FreeBSD, че не си бяха свършили работата да предоставят работеща алтернатива на flashplayer която да може да пуска видеа от youtube.
По този начин те предоставиха предизвикателството да се намери заобиколен начин за пускане на youtubе-ските видеа с външен плейър.
Решението което ще покажа е работещо към датата на публикуване и устройва автора като начин/удобство на употреба.
Решението се състои от 3 основни стъпки:
http://kb.mozillazine.org/Register_protocol#Linux
Точка втора е създаването на greasemonkey script който да изрязва video id-то от отворената youtube страница и да го изпраща към bash скрипта. Ето скрипта който аз използвам:
// ==UserScript==
// @name Youtube Video Play to Mplayer
// @namespace http://admin-fu.blogspot.com/
// @description Play You Tube video to Mplayer
// @include http://*.youtube.com/*
// @include http://youtube.com/*
// ==/UserScript==
function youtubeIDextract(url)
{
var youtube_id;
youtube_id = url.replace(/^[^v]+v.(.{11}).*/,"$1");
return youtube_id;
}
var id = youtubeIDextract(window.location.href);
GM_openInTab("ytm://"+id);
И последната точка 3 е bash скрипта който се явява протокол хендлър за новият портокол на firefox (обяснено в точка 1). Ето скрипта:
#!/bin/bash
i=`echo "$1" | cut -d"/" -f3`
mplayer $(wget http://www.youtube.com/watch?v=$i -qO- | sed -n "/fmt_url_map/{s/[\'\"\|]/\n/g;p}" | sed -n '/^fmt_url_map/,/videoplayback/p' | sed -e :a -e '$q;N;5,$D;ba' | tr -d '\n' | sed -e 's/\(.*\),\(.\)\{1,3\}/\1/')
Предполагам ще се налага промяна в bash скрипта всеки път като youtube параноясат и решат да защитават нечии авторски права.
По този начин те предоставиха предизвикателството да се намери заобиколен начин за пускане на youtubе-ските видеа с външен плейър.
Решението което ще покажа е работещо към датата на публикуване и устройва автора като начин/удобство на употреба.
Решението се състои от 3 основни стъпки:
- firefox
- greasemonkey script
- bash script
http://kb.mozillazine.org/Register_protocol#Linux
Точка втора е създаването на greasemonkey script който да изрязва video id-то от отворената youtube страница и да го изпраща към bash скрипта. Ето скрипта който аз използвам:
// ==UserScript==
// @name Youtube Video Play to Mplayer
// @namespace http://admin-fu.blogspot.com/
// @description Play You Tube video to Mplayer
// @include http://*.youtube.com/*
// @include http://youtube.com/*
// ==/UserScript==
function youtubeIDextract(url)
{
var youtube_id;
youtube_id = url.replace(/^[^v]+v.(.{11}).*/,"$1");
return youtube_id;
}
var id = youtubeIDextract(window.location.href);
GM_openInTab("ytm://"+id);
И последната точка 3 е bash скрипта който се явява протокол хендлър за новият портокол на firefox (обяснено в точка 1). Ето скрипта:
#!/bin/bash
i=`echo "$1" | cut -d"/" -f3`
mplayer $(wget http://www.youtube.com/watch?v=$i -qO- | sed -n "/fmt_url_map/{s/[\'\"\|]/\n/g;p}" | sed -n '/^fmt_url_map/,/videoplayback/p' | sed -e :a -e '$q;N;5,$D;ba' | tr -d '\n' | sed -e 's/\(.*\),\(.\)\{1,3\}/\1/')
Предполагам ще се налага промяна в bash скрипта всеки път като youtube параноясат и решат да защитават нечии авторски права.
Абонамент за:
Публикации (Atom)