Ubuntu Suomen keskustelualueet
Ubuntun käyttö => Ohjelmointi, palvelimet ja muu edistyneempi käyttö => Aiheen aloitti: aurinkolasit - 18.05.09 - klo:20.24
-
Moro,
Näppäsin tämmöisen skriptin, joka etsii youtubesta videoita halutulla hakutermillä ja pistää ne mplayerin soittolistaan. Ehdottakaa parannuksia / kehitysideoita :-).
Käyttö on muotoa ./youtube.sh "hakutermi" (käytä "."-merkkiä väliviivan asemesta)
EDIT 19.5.09 - printtaa yksinkertainen soittolista
EDIT 15.6.09 - parempi käyttöliittymä
#!/bin/bash
# Youtube.sh v.0.02 GPL
# Search youtube, create a playlist and watch videos ;-).
# Depends on mplayer and the necessary codecs respectively
# Search term should be url-encoded but regexp works too i.e. use '.' for whitespace
# For example "monty python" = monty.python
# Author PiPARI 06/2009
if [ "$#" -ne "1" ]; then
echo "USAGE: `basename $0` searchterm (use \".\" for whitespace)"
exit 2
else
if [ -f /tmp/youtube.pls ]; then
rm /tmp/youtube.pls
fi
pagesrc="http://gdata.youtube.com/feeds/base/videos?q=$1&client=ytapi-youtube-search&v=2"
urllist=`wget -q -O - $pagesrc | grep 'www\.youtube\.com\/watch.v=' | sort | sed 's/^.*http:\/\///g;s/"\>.*//g;s/^[^w].*//g'`
youtube_playlist()
{
until [ "$choice" == q ]
do
echo
echo -e "\e[38;5;143mEnter a number to choose a title, q to quit\e[39m"
echo
sed = /tmp/youtube.pls | sed -e 's/^.*title=//g' -e 's/_/ /g' | sed -e 'N;s/\n/\. /'
echo -e 'Play: \c'; read choice
if echo $choice | grep '^[0-9]*$' > /dev/null; then # play from here
tail -n "+$choice" /tmp/youtube.pls > /tmp/youtubetmp.pls
mplayer -really-quiet -fs -playlist /tmp/youtubetmp.pls 2> /dev/null
fi
clear
done
rm /tmp/youtubetmp.pls 2> /dev/null
choice=""
}
grab_title()
{
echo $1 | grep '<title>.*<\/title>' | sed 's/^.*<title>//;s/<\/title>.*$//;s/\&/\&/g;s/\"/\"/g;s/^.*YouTube - \|\/\|\\//g'
}
create_playlist()
{
echo
echo -e "\e[38;5;143mCreating a playlist\e[39m"
echo
for URL
do
# Thanks to Elte. The below is mod of his/her script found at
# http://wiki.multimedia.cx/index.php?title=MPlayer_youtube_script
theurl=`wget -q -O - $URL`
grab_title "$theurl"
echo http://www.youtube.com/get_video?video_id=$(echo "$theurl" | \
sed -e '/fullscreenUrl/!d' \
-e "s/.*video_id=\([^']*\).*/\1/" \
-e 's/ /_/g'\
-e 's/\\\"/"/g') >> /tmp/youtube.pls
done
clear
}
create_playlist $urllist
echo -e "\e[38;5;143mFetched playlist succesfully!\e[39m"
sleep 1
youtube_playlist
rm /tmp/youtube.pls
fi
-
Elokuvasoittimesta (totem) tämä ominaisuus löytyy vakiona ja on varmaankin aloittelija ystävällisempi.
-
Elokuvasoittimesta (totem) tämä ominaisuus löytyy vakiona ja on varmaankin aloittelija ystävällisempi.
Juu, löytyy. Itselläkin on se plugini valittuna, mutta en kyllä löydä yhtään että mistä ihmeestä pääsen etsimään youtuben videoita Totemilla?
Ja toisaalta, tämähän on "Ohjelmointi, palvelimet ja muu edistyneempi käyttö", joten tuskin aivan aloittelijoille on tarkoitettukaan, lähinnä varmaan että kun on tehnyt näppärän skriptin ni halutaan jakaa se muillekkin.
Sittne mitä skriptiin tulee, niin kyllä tuo ihan hyvin tuntuu toimivan, hyvää työtä :)
Saako vielä kysyä miksi tuo piste pitää laittaa välilyönnin tilalla?
Eikös sen saisi annettua siten, että pistää parametrit heittomerkkien sisällä, eli esim:
./youtube.sh "Dark Tranquillity"
Vai onko joku muu syy jota en vain hiffaa?
Eniveis, ihan asiallinen skripta. =)
-
^ Totemissa löytyy sivupalkista Youtube-haku.
-
^ Totemissa löytyy sivupalkista Youtube-haku.
Ah, katsoppas, niinpä näkyykin olevan :) Kiitsa. Tiedä jos joskus jaksaa katsoa sitä kautta. En olekkaan aiemmin löytänyt tuota. :D
-
Elokuvasoittimesta (totem) tämä ominaisuus löytyy vakiona ja on varmaankin aloittelija ystävällisempi.
Saako vielä kysyä miksi tuo piste pitää laittaa välilyönnin tilalla?
Eikös sen saisi annettua siten, että pistää parametrit heittomerkkien sisällä, eli esim:
./youtube.sh "Dark Tranquillity"
Vai onko joku muu syy jota en vain hiffaa?
Eniveis, ihan asiallinen skripta. =)
Terve,
Jos katot tuota skriptiä, niin siinähän hakutermi on ensimmäinen argumentti eli $1, ja se on toisen muuttujan $pagesrc:n sisällä. Noh, tää pagesrc on nettiosoite, ja niissähän erikoismerkit pitäisi olla url-enkoodattu. Välilyönti pitäisi muuttaa esimerkiksi muotoon '%20'. Nyt kun Youtube ja google kuitenkin tukee regexp-tyyppisiä hakuja (kato wikipediasta regexp) niin mä hyväksikäytän sitä -- laiskuuttani. Piste on regexpissä jokerimerkki, joka tarkoittaa "mikä tahansa merkki", jolloin mitään url-enkoodauksia ei periaatteessa tarvitse tehdä. Tietysti tuota skriptiä voisi parantaa siten, että sille antaisi mitä vaan hakutermejä ja se parsisi ne sopivaan muotoon muuttujalle $pagesrc esimerkiksi uuden funtion 'url_encode' avulla. Teen sen sitten kun saan inspiksen.
-
Terve,
Jos katot tuota skriptiä, niin siinähän hakutermi on ensimmäinen argumentti eli $1, ja se on toisen muuttujan $pagesrc:n sisällä. Noh, tää pagesrc on nettiosoite, ja niissähän erikoismerkit pitäisi olla url-enkoodattu. Välilyönti pitäisi muuttaa esimerkiksi muotoon '%20'.
Ah, no niinpäs tietysti. Enpäs muistanutkaan tuota ajatella että pitäähän ne toki enkoodata, eli juu, ihan järkisyyhän tuo. :)
Nyt kun Youtube ja google kuitenkin tukee regexp-tyyppisiä hakuja (kato wikipediasta regexp) niin mä hyväksikäytän sitä -- laiskuuttani. Piste on regexpissä jokerimerkki, joka tarkoittaa "mikä tahansa merkki", jolloin mitään url-enkoodauksia ei periaatteessa tarvitse tehdä.
Juuh, regexpit on kyllä todella näppäriä monesti koodaillessa, on niitä jonkin verran tullut käytettyä itsekkin.
Ja tuon hyödyntäminen tuossa on toki ihan näppärää. Miksipä suotta tehdä vaikeammin :P
En tiennytkään että ne käyttää regexpi-mahdollisuutta hauissa, katos. Uutta oppii :)
Tietysti tuota skriptiä voisi parantaa siten, että sille antaisi mitä vaan hakutermejä ja se parsisi ne sopivaan muotoon muuttujalle $pagesrc esimerkiksi uuden funtion 'url_encode' avulla. Teen sen sitten kun saan inspiksen.
Juuh, taitavat mennä ihan suoraan nuo erikoismerkit heksadesimaaliarvoina, ainakin muistelisin mitä C:llä koodasi tuota mikä muuntaa erikoismerkit takaisin asciiksi.