Kirjoittaja Aihe: Youtube.sh - hae ja katsele Youtube-videoita päätteeltä [PÄIVITYS 15.6.09]  (Luettu 3356 kertaa)

aurinkolasit

  • Vieras
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ä
Koodia: [Valitse]
#!/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/"\&gt.*//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/\&amp;/\&/g;s/\&quot;/\"/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


« Viimeksi muokattu: 15.06.09 - klo:18.47 kirjoittanut aurinkolasit »

papukaija

  • Käyttäjä
  • Viestejä: 100
    • Profiili
Vs: Youtube.sh - hae ja katsele Youtube-videoita päätteeltä
« Vastaus #1 : 22.05.09 - klo:23.16 »
Elokuvasoittimesta (totem) tämä ominaisuus löytyy vakiona ja on varmaankin aloittelija ystävällisempi.

Stargazers

  • Käyttäjä
  • Viestejä: 549
    • Profiili
Vs: Youtube.sh - hae ja katsele Youtube-videoita päätteeltä
« Vastaus #2 : 15.06.09 - klo:08.11 »
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. =)

Minna S

  • Käyttäjä
  • Viestejä: 1053
    • Profiili
Vs: Youtube.sh - hae ja katsele Youtube-videoita päätteeltä
« Vastaus #3 : 15.06.09 - klo:08.52 »
^ Totemissa löytyy sivupalkista Youtube-haku.

Linux user # 406601

Stargazers

  • Käyttäjä
  • Viestejä: 549
    • Profiili
Vs: Youtube.sh - hae ja katsele Youtube-videoita päätteeltä
« Vastaus #4 : 15.06.09 - klo:09.42 »
^ 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

aurinkolasit

  • Vieras
Vs: Youtube.sh - hae ja katsele Youtube-videoita päätteeltä
« Vastaus #5 : 15.06.09 - klo:17.05 »
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. 




Stargazers

  • Käyttäjä
  • Viestejä: 549
    • Profiili
Vs: Youtube.sh - hae ja katsele Youtube-videoita päätteeltä
« Vastaus #6 : 15.06.09 - klo:18.04 »
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.