Wyświetlanie informacji z Last.fm w Conky

Uwaga: Ten wpis został utworzony ponad rok temu. Informacje w nim zawarte mogą być nieaktualne!
Jest to artykuł konkursowy nadesłany do nas przez Łukasza C.

Program Conky, jak zapewne większość użytkowników Ubuntu wie, jest aplikacją służącą do wyświetlania w elegancki sposób informacji o systemie oraz sprzęcie na naszym pulpicie. Za pomocą Conky’ego możemy wyświetlić poza wspomnianymi wcześniej informacjami w zasadzie wszystko, od pogody do… informacji zawartych na stronach internetowych. W tym artykule chciałbym przedstawić na przykładzie portalu Last.fm, jak wyciągnąć i wyświetlić na pulpicie interesujące nas informacje ze stron internetowych.

Od czego zacząć?

Oczywiście od zainstalowania samego programu Conky. Nie będę się tutaj rozpisywał, jak to zrobić, bo z artykułu musiałbym zrobić małą książkę, a wszystkie niezbędne informacje znajdziecie chociaż na tym blogu. Innym programem, bez którego sobie nie poradzimy, jest w3m. Jest to prosta w obsłudze przeglądarka tekstowa, którą możemy zainstalować wykonując w terminalu polecenie:

sudo apt-get install w3m

Wyciąganie danych ze strony internetowej

Po zainstalowaniu przeglądarki możemy sprawdzić jak ona działa. Aby przejść do sedna tematu, proponuję sprawdzić to na przykładzie strony Last.fm. Jeśli ktoś nie posiada tam własnego profilu, zapraszam na mój. W tradycyjnych przeglądarkach wgląda to tak [link], natomiast w3m wyświetli nam ją w następujący sposób:

w3m http://www.lastfm.pl/user/Franz1906

Jak widać widzimy sam tekst, razem z odnośnikami do podstron. Załóżmy, że chciałbym wyświetlać informacje o trzech najczęściej odsłuchiwanych zespołach z ostatnich 7 dni. Znając portal Last.fm domyśliłem się, że łatwiej te informacje będzie można wyciągnąć z zakładki Rankingi (z menu po lewej stronie). Następnie kopiujemy adres z przeglądarki do konsoli i tam sprawdzamy jak nam wyświetli stronę w3m.

w3m http://www.lastfm.pl/user/Franz1906/charts/

Wszystko pięknie, teraz wystarczy tylko wyciągnąć interesujące nas informacje. Jak już wcześniej wspomniałem, chcę aby Conky wyświetlał mi tylko trzech ulubionych artystów. W takim wypadku, aby osiągnąć wyznaczony cel, posłużę się komendami grep, cut oraz sed.

Aby wybrać z całej strony jedną linię, oczywiście posłużę się grepem. Charakterystyczną cechą linii, która zawiera interesujące nas informacje w tym wypadku jest cyfra oraz spacja po niej. Spróbujmy zatem w konsoli:

w3m http://www.lastfm.pl/user/Franz1906/charts | grep -w "1 "

Wynik prawidłowy, ale formatowanie nie trzyma się niczego. Dlatego też za pomocą komendy cut wytnę interesujące mnie fragmenty tej linii. Jako że taki skrypt miałem już napisany, wiem (bo sobie wyliczyłem), że nazwę wykonawcy mogę wyciąć za pomocą polecenia:

w3m http://www.lastfm.pl/user/Franz1906/charts | grep -w "1 " | cut -b'12-32' | sed 's/^\s\+//'

Wynik elegancki, można wstawić do kodu Conky’ego ;) . Komenda sed usuwa nam w tym wypadku „białe znaki” – ponieważ są nam one niepotrzebne w tym wypadku. Komenda cut -b wyświetla nam znaki od 12 do 32 w danej linii, jeśli ktoś potrzebuje więcej może to zmienić. Oczywiście jeśli chcemy także widzieć liczbę odsłuchań, możemy posłużyć się komendą:

w3m http://www.lastfm.pl/user/Franz1906/charts | grep -w "1 " | cut -b'33-71' | sed 's/^\s\+//'

Oczywiście liczby przy cut mogą się zmieniać w zależności od użytkownika. Ale te są raczej dość uniwersalnie dobrane.

Wyświetlanie na pulpicie:

Teraz pozostało nam wkleić odpowiednie komendy do pliku z Conky’m. Ja zrobiłem to w następujący sposób. Do pliku z konfiguracją Conky wklejam następującą linię:

${color afafaf}1. ${execpi 60 w3m http://www.lastfm.pl/user/Franz1906/charts | grep -w "1 " | cut -b'12-32' | sed 's/^\s\+//'}$alignr${color d0d0d0}${execpi 60 w3m http://www.lastfm.pl/user/Franz1906/charts | grep -w "1 " | cut -c'33-71' | sed 's/^\s\+//'} odtworzeń

Jak widać korzystam z funkcji exepi, która aktualizuje nam stan co 60 sekund, wydaje mi się, że częściej nie obciążać dodatkowym zajęciem procesora ;) . Następnie wyświetlam pozycję wykonawcy oraz otrzymane polecenia. Liczbę odsłuchań wyrównuję do prawej strony. Efekt końcowy na pulpicie:

Screen Conky

Screen z Conky

Inne zastosowania metody

Korzystając z tej metody możemy wyświetlić dowolną informację z sieci, mogą być to najświeższe newsy z portalu informacyjnego, czy „obiad na dziś” ze strony z przepisami kulinarnymi, lub aktualnie odsłuchiwane utwory ze wspomnianego portalu Last.fm. Jeśli będziesz potrzebował pomocy dotyczącej komend grep, cut czy awk znajdziesz ją dopisując –help do komendy w terminalu.

Jeżeli powyższy artykuł nie rozwiązał lub rozwiązał częściowo Twój problem, dodaj swój komentarz opisujący, w którym miejscu napotkałeś trudności.
Mile widziane komentarze z uwagami lub informacjami o rozwiązaniu problemu.
  • ubuntu-usr

    Coś mi się wydaje, że pomysł na tę pracę został zaczerpnięty stąd. Nawet jeśli tak nie jest, łatwiej jest użyć skryptu z tej strony niźli wykonywać dość skomplikowany przewodnik samemu. Wszystko ogranicza się do instalacji skryptu. Wymagane są zależności w postaci zainstalowanych programów takich jak: w3m, grep i sed. Na koniec w skrypcie podmieniamy dwie zmienne (login i miejsce, gdzie mają być pobierane pliki, sugerowany folder: ~/tmp) i to koniec:)

  • ubuntu-usr

    Okazuje się, że i nawet skrypt nie jest potrzebny! Zamiast przerabiać cały przewodnik, obciążając przy tym swój komputer, Wystarczy w pliku ~/.conkyrc dodać jedną linię kodu:

    ${rss http://ws.audioscrobbler.com/1.0/user/nazwa-użytkownika/recenttracks.rss 1 item_titles 10 }

  • http://tapetowo.eu Franz

    Świetnie, tylko, że Twoja metoda zwraca zupełnie co innego niż ta opisana w artykule.
    Poza tym tak jak pisze, można ją wykorzystać w wielu innych wypadkach, niż tylko w Last.fm…

  • ubuntu-usr

    Twoja metoda zwraca zupełnie co innego niż ta opisana w artykule” – po pierwsze, nie jest to moja metoda, tylko info wyciągnięte z wiki Arch’a. Po drugie zwraca ona dokładnie to samo tyle, że poprzez agregację RSS, odciążając przy tym kompa. Wyjątkiem jest brak informacji co do ilości odtworzeń, jednak wydaje mi się, że takie info jest niepraktyczne.

    można ją wykorzystać w wielu innych wypadkach” – może i jest, ale nic by się nie stało, jakby autor omówił nieco szerzej działanie grep, w3m i sed.

  • ubuntu-usr

    edit: Rzeczywiście, zwracany jest ranking danego użytkownika, a nie listę ostatnio odtworzonych utworów. Sorry za pomyłkę.

  • http://tapetowo.eu Franz

    Co do drugiej uwagi to racja, można było to szerzej opisać, ale wygodniej byłoby, gdyby pojawiło się to w osobnych artykułach. Straszna papka wyszła by z tego, gdybym chciał jeszcze to tutaj opisywać…