Conky
Na wat googlen had ik begrepen dat Conky ook bash en python-scripts begrijpt, en dan is dat antwoord dus ja! Aangezien ik redelijk kan bashen ben ik gelijk maar even aan de slag gegaan.
Wat is Conky
Van de website zelf:
Vooral dat informatie is interessant, vooral als het informatie is die je zelf kan kiezen. Als je de screenshotpagina bekijkt dan lijkt het haast of Conky alleen maar info kan weergeven over je eigen systeem. Nu is dat op zich wel handig, maar ik vind dat zelf niet interessant. Mijn pc doet het of doet het niet, en als ie het niet goed doet dan ga ik dan wel kijken waar het mis loopt. Maar als je zoiets wilt, van dit soort configs zijn er zat:Conky is a free, light-weight system monitor for X, that displays any information on your desktop. Conky is licensed under the GPL and runs on Linux and BSD.
http://conky.sourceforge.net/screenshots.html
Nu kon ik met Samurize zo een beetje alles tonen op de desktop wat ik wilde. Ik had de tvgids paraat, wat weerdingen, veel over de muziek die ik afspeelde en statistieken van last.fm enzovoorts. Aangezien Conky bashscripts verstaat moet dit dus allemaal kunnen. Conky kan zelf die info niet vergaren, maar bash met de juiste commandtools dus weer wel. Het enige wat daarvoor extra geleerd moet worden is de formatting die conky gebruikt, maar die is vrij simpel en kan je afkijken uit andere configs.
Conky installeren
Conky moet geinstalleerd worden met 'sudo apt-get install conky'. Daarna werkt het al. Het enige wat je dan nog moet doen is het starten van een script waarin staat wat er allemaal geladen moet worden en waar het moet komen te staan.
Ik ben zelf begonnen met http://code.google.com/p/conkywizard/. Hiermee maak je vrij simpel een Conky-config over je eigen systeem. Het mooie is dat je gelijk voorbeelden krijgt hoe het werkt als je in die configfiles duikt. En die configfiles kan je dus ook gelijk ombatterijen naar je eigen voorkeur. Zo kun je van dit (ConkyWizard default theme):

Naar dit (mijn huidige theme):

Conky ombatterijen
Als je Conky een ander uiterlijk wilt geven dan is dat het makkelijkst door in ieder geval een andere afbeelding te laden als achtergrond voor de informatie.
Een conky configfile is als volgt opgebouwd:
Eerst leg je vast waar de config gepresenteerd moet worden. Je legt de dimensies, locatie en presentatie vast. Dit sluit je af met een regel waarop je TEXT zet. Daaronder kun je opschrijven welke informatie gepresenteerd wordt.
Het mooie daarvan is dat je ook scripts kan laten uitvoeren op intervals, bijvoorbeeld elk half uur of elke 10 seconden. Er zijn ontzettend veel commando's om te gebruiken, commando's die positie bepalen (zoals $GOTO) zijn relatief aan de dimensies van de configuratie boven TEXT. Interessante commando's voor scripters zijn exec (execute) en execp (execute and parse) en execi en execpi (hetzelfde als exec/execp maar dan op intervals). execpi 60 ./pad/naar/script zorgt ervoor dat elke 60 seconden het script wordt uitgevoerd en geparsed.
Parsen houdt in dat je Conky taal in de scripts kan zetten (bijvoorbeeld laten echo'en) en dat deze dan gelezen wordt alsof het in je configuratie file staat. Je configuratiefile kan daardoor uit tig verschillende scripts bestaan. Dus Conky is zo flexibel als alles wat je maar kunt echo'en in bash, of printen in python. De mogelijkheden zijn dus eindeloos wat informatievergaring betreft. Gotta love that!
Scrapen voor Conky
Scrapen is hetzelfde als schrapen of vergaren, en meestal wordt daarmee bedoelt informatie schrapen of vergaren van websites. Op linux heb je daar bijvoorbeeld curl en wget voor. curl moet je vaak nog even installeren, maar wget is altijd al wel aanwezig.
Curl leest webpagina's online en met curl kun je bijvoorbeeld een link "aanklikken" als ware het iemand die dat met een muis doet. Zo kan je een optie op een website aanpassen en daarna gaan scrapen. Dit doe ik bijvoorbeeld in mijn sickbeard script. Ik klik de listview van coming episodes aan met curl, scrape de eerstvolgende 3 series die worden uitgezonden, en vervolgens laat ik curl de layout weer terugzetten naar Posterview, zodat ik die zie als ik zelf naar Sickbeard surf.
Wget download de link die je aangeeft. Dit kan gebruikt worden om lokaal een webpagina op te slaan, zodat je dat lokale bestand kan scrapen. Dit heeft als voordeel dat je maar 1 online request hoeft te doen om alle informatie ineens op te halen, terwijl je met curl misschien wel 30 requests moet doen om hetzelfde te bereiken. Bovendien zal een lokaal opgeslagen pagina wat sneller gescraped worden dan een online pagina.
Een voorbeeld:
Ik wil mijn onlangs bekeken series in mijn config, naast die van Sickbeard, welke de 'Coming soon' series toont. De toegevoegde waarde van al dit is mij onbekend, ik kan immers net zo goed de url zelf bezoeken, dus dan maar voor de leuk. Maar het is ook leuk om dat met bash uit een page te peuteren, als oefening, ter leering ende vermaeck om nu weer eens te zien wat voor een lelijke code ik daarvoor ga verzinnen.
De tools die dan nodig zijn zijn curl (of wget), grep en sed. Curl zet de webpagina om in terminaloutput, grep beperkt die output tot die zinnen die ik specificeer met woorden en operators die ik opgeef en met sed haal ik de rest van de overbodige info weg.
LET OP: ONDERSTAANDE IS VEROUDERD.
trakt.tv heeft tegenwoordig een api, waarmee deze info opgehaald kan worden. Meer informatie: http://trakt.tv/api-docs/user-watched-episodes
Deductie:
De pagina is: http://trakt.tv/user/Mar2zz/watched/shows
Als ik in de bron van de pagina kijk dan zie ik dat de regels met recent gekeken afleveringen allemaal beginnen met '<a href="/show/' . Dus als ik nou de output daarop grep en dan maximaal 12 (-m12) regels pak, dan heb ik een kleinere output met 3x een shownaam, seizoen/episode en plaatje) ervan. Dat levert op:
curl -s http://trakt.tv/user/Mar2zz/watched/shows | grep -m12 '<a href=\"/show/'
mars@laptop:~$ curl -s http://trakt.tv/user/Mar2zz/watched/shows | grep -m12 '<a href=\"/show/' <a href="/show/the-big-bang-theory/season/4/episode/20"><img src="http://vicmackey.trakt.tv/images/episodes/34-4-20-218.jpg" /></a> <a href="/show/the-big-bang-theory">The Big Bang Theory</a> <h5><a href="/show/the-big-bang-theory/season/4/episode/20"><span>Season 4, Episode 20</span></a></h5> <a href="/show/the-big-bang-theory/season/4/episode/20">The Herb Garden Germination</a> <a href="/show/sons-of-anarchy/season/3/episode/10"><img src="http://vicmackey.trakt.tv/images/episodes/76-3-10-218.jpg" /></a> <a href="/show/sons-of-anarchy">Sons of Anarchy</a> <h5><a href="/show/sons-of-anarchy/season/3/episode/10"><span>Season 3, Episode 10</span></a></h5> <a href="/show/sons-of-anarchy/season/3/episode/10">Firinne</a> etc etc.....
Met sed kun je in een file alles vervangen. Het is flexibel, maar er zijn ook erg veel voorstanders van awk om dit soort zaken te doen. Ik gebruik sed omdat ik het onder de knie heb. De syntax is: sed -i 's/ongewenst/doorditvervangen/' bestandsnaam, wat betekent vervang in het bestand alle ongewenst met gewenst.
Aangezien ik heel specifiek kon greppen hoef ik maar weinig vervangingen te doen en bij opschoningen vervang ik ongewenst spul met niets (sed 's/ongewenst//' bestandsnaam). .* is een wildcard, wat betekent alles voor de tekens die ervoor staan vervangen (*. is erachter vervangen). Dit haalt grote lappen tekst weg, dus ik maak er gebruik van.
Dit stukje code schoont het helemaal op:
code:
1
2
3
4
5
6
7
8
9
| sed -i '
s/<\/.*//
s/.*\">//
s/\" \/>//
s/<span>//
s/<img src=\"//
s/Season //
s/, Episode /x/
' /tmp/trakt |
code:
1
2
3
4
5
6
7
8
9
10
11
12
| http://vicmackey.trakt.tv/images/episodes/34-4-20-218.jpg The Big Bang Theory 4x20 The Herb Garden Germination http://vicmackey.trakt.tv/images/episodes/76-3-10-218.jpg Sons of Anarchy 3x10 Firinne http://vicmackey.trakt.tv/images/episodes/76-3-9-218.jpg Sons of Anarchy 3x9 Turas |
Nu ik de gegevens heb opgeschoond laat ik het omzetten naar conkyformatting en neem ik het op in de config. Dat is een kwestie van aangeven welke regel uit /tmp/trakt waar moet komen. De plaatjes download ik dan met wget zodat die ook getoond kunnen. Dit alles wordt dus met een bashscript afgehandeld in een paar seconden en ik laat conky dan 1x in de zes uur ofzo deze gegevens vernieuwen.
Nu hoef ik dus alleen nog maar een background ervoor te maken. Omdat ik steeds dezelfde mishandelde foto van een moederbord gebruik als achtergrond hoef ik alleen maar het traktlogo eraan toe te voegen.
Het uiteindelijke resultaat:

Tot slot
't Is wat prutsen, maar dan heb je ook wat. Je kunt er verder niets mee, dus echt nut is niet aanwezig, maar je hebt iets zelfgemaakts en je kan jezelf makkelijk informeren door ff alles te minimaliseren, want Conky minimaliseert niet mee. Conky kan met de pc mee opstarten door een bashscriptje toe te voegen aan startups met daarin zoiets als:
'conky -c $HOME/pad_naar_conky_config/conky_confignaam'
Het ontrafelen van webpagina's is een leuke puzzel, dus ideaal als je weer eens flauw bent van je Rubiks Cube. Als je bash of python kan schrijven kun je heel veel met Conky, waarschijnlijk kun je het hele internet op je bureaublad weergeven (dan moet je veel rouleren). RSS-feeds zijn daar ook leuke slachtoffers voor.
Op het web rouleren erg veel conky-configs, maar ik ben nog niet echt tegengekomen dat ze volledig misbruikt worden zoals op deze manier. Terwijl het er een ideaal programma voor is. Als ik nu ook nog eens een beetje kon designen dan zag het er ook nog eens piekfijn uit, ik ben al blij dat het functioneel is en niet al te lelijk.
Dat design kan je beter aan anderen overlaten, er zijn conky-design-contests af en toe, die conky ten volle benutten en enorm geavanceerd zijn en ongelooflijk mooi gemaakt. Hier staat daar een enorm mooi voorbeeld van.
06-'11 Headphones
03-'11 Terminal
Reacties
Om toch het niveau iets naar het gemiddelde (lagere) niveau te halen: Werkt dit ook onder windows 7?
Ik las trouwens met hetzelfde, en ik moest toch ook eventjes glimlachen.
Windows heeft Rainlendar om dit te kunnen doen. Bovendien werkt Rainlendar ook op mac en linux. Wat dat betreft is Rainlendar crossplatform en had ik beter voor Rainlendar kunnen gaan. Maar ik doe alles in bash en dat werkt weer niet op windows dus zou het geen toegevoegde waarde voor mij hebben, *nix only here. Maar met Rainlendar kan je geloof ik hetzelfde doen, dat is m.i. net zo flexibel, als je maar ergens de info netjes krijgt kun je het met Rainlendar op je bureaublad zetten.
Het is overigens niet zo vergaand/ingewikkeld als het lijkt. Als je bash kunt dan heb je binnen 10 minuten de info bij elkaar die je hebben wilt. Deze trakt-conky heb ik gemaakt tijdens het schrijven van de blog en heeft me denk ik 5 minuten terminalspammen gekost. Aan het bashscript kun je wel zien dat het weinig code is en niet ontzettend ingewikkeld, er zijn maar 4 commando's gebruikt immers. Met een beetje gepruts en gegoogle heb je het zo voor elkaar.
Dit soort dingen is trouwens ook erg leuk op een tweede scherm.
Maar ik ben nu op weg om dezelfde client opnieuw te gaan maken. Ik heb al een script wat de laatste 20 recent afgespeelde tracks van last.fm haalt inclusief albumcover.
code:
1
2
3
4
5
6
7
8
9
10
| curl -s http://www.last.fm/user/mar2zz | grep -m20 '<a href="/music/.*.</a> ' > /tmp/lastfm
##clean up last.fm info
sed -i '
s/.*src=\"//
s/<\/a> – <a.*\">/ - /
s/.*\">//
s/\" .*//
s/<\/a>.*//
' /tmp/lastfm |
Hmmm, die codebox kan niet omgaan met s/<\/a> – <a.*\">/ - /
[Reactie gewijzigd op donderdag 14 april 2011 13:39]
Om te kunnen reageren moet je ingelogd zijn. Via deze link kun je inloggen als je al geregistreerd bent. Indien je nog geen account hebt kun je er hier één aanmaken.