kategorie:

menu:


Informace o přehrávané skladbě v avataru

16.08.2008   ::    téma: Programování

V dnešním světě internetu jsou jedním z nejběžnějších způsobů komunikace různá diskuzní fóra. Hodně z nich (především ta založená na phpBB) umožňují zobrazení tzv. avataru (či podpisu, chcete-li) pod každým příspěvkem uživatele, ve kterém může konkrétní uživatel o sobě mnohé prozradit. A co více o vás vypoví, než to jakou hudbu posloucháte?

Službu zobrazení informací o hudbě kterou posloucháte v malém obrázku nabízí například známý sociální server last.fm, který tyto informace může sbírat pomocí pluginu ve vašem hudebním přehrávači. Jeho možnosti mi ale moc nevyhovovaly, tak jsem se jednoho dne rozhodl napsat vlastní řešení. Přehrávač Amarok (pro KDE 3.5) který používám k tomu přímo vyzývá.

výsledný avatar

Odeslání informací z přehrávače na server

K tomuto účelu dobře poslouží předpřipravený script nowPlaying.sh, který je možné stáhnout a nainstalovat z menu Amaroku (Nástroje, Správce scriptů…). Tento bashový script je potřeba před použitím trochu upravit. Především nastavit kam má informace odesílat. Standartně je umístěn ve složce ~/.kde/share/ap­ps/amarok/scrip­ts/

moje úprava scriptu nowPlaying.sh

#!/bin/bash
dropout="false"
key="myKey" # define your SECRET_KEY (eg key="mykey")
# zde napiste vase url
url="http://www.karry.wz.cz/podpis/amarok.php?key=$key"

while [ $dropout == "false" ]; do

    artist=`dcop amarok player artist`
    title=`dcop amarok player title`
    t=`dcop amarok player totalTime`
    album=`dcop amarok player album`
    playing=`dcop amarok player isPlaying`

    artist=${artist//&/%26}
    title=${title//&/%26}
    album=${album//&/%26}

    current="$title"
    currentPlaying="$playing"
    wget -q "$url&title=$title&time=$t&artist=$artist&album=$album&playing=$playing" -O - > /dev/null
    echo "send info wget -q $url&title=$title&time=$t&artist=$artist&album=$album&playing=$playing -O -";
    while [ "$title" == "$current" ] && [ "$currentPlaying" == "$playing" ]; do
        ## && [ "$currentPlaying" == "$playing" ]
        sleep 10
        current=`dcop amarok player title`
        currentPlaying=`dcop amarok player isPlaying`
    done
done

Jak je vidět, script používá k získávání informací z Amaroku dcop, což je standartní systém na zasílání zpráv mezi aplikacemi používaný v KDE 3.5. Informace na zadané url zasílá jednoduše tím, že stáhne ze serveru php script s daty v parametru. Hodnota key slouží k ochraně před cizím zásahem do odeslaných dat. O spouštění scriptu se postará sám Amarok, když jej povolíte ve správci scriptů.

Uložení dat na serveru

Script amarok.php se na serveru stará pouze o ověření hodnoty key a o uložení informací do souboru.

<?php

// key="myKey" &title=$title&time=$t&artist=$artist&album=$album&playing=$playing

if ($_GET['key']=="myKey"){

    $data = time()."\n";
    $data .= $_GET['playing']."\n";
    $data .= stripslashes($_GET['title'])."\n";
    $data .= stripslashes($_GET['artist'])."\n";
    $data .= stripslashes($_GET['album'])."\n";

    $fp = FOpen("./amarok.dat","w");
    FWrite ($fp, $data);
    FClose ($fp);

}else{
    Header("HTTP/1.0 401 Unauthorized");
    echo "Unauthorized";
}

?>

Vygenerování avataru

Samotný script na vygenerování avataru je asi nejsložitější. V podstatě ale pouze načte pozadí avataru, přečte informace o přehrávané skladbě ze souboru, zapíše je na pozadí a výsledek odešle. Script navíc do avataru vypíše můj aktuální stav na Jabberu, který je zjišťován ze stránek mého Jabber poskytovatele, serveru jabbim.cz. Tento script si i s grafikou můžete stáhnout na konci přispěvku.

Při vkládání avataru do fóra může nastat jeden problém. V phpBB bývá vyžadován soubor s příponou jpg, nebo png. Script s příponou php odmítne vzít jako obrázek. To se dá vyřešit změněním přípony scriptu z php na jpg. Poté je ale nutné říci webovému serveru (Apache) aby s tímto souborem zacházel jako s php scriptem a protlačil jej php interpretem. Proto přidáme do suboru .htaccess následující řádky:

<Files podpis.jpg>
    ForceType application/x-httpd-php
</Files>

všechny scripty i s grafikou