Jak znaleźć znajomych na Twitterze/Identi.ca.

Przy okazji chęci uporządkowania (może rozwoju) mojego μbloga identi.ca pojawił się odwieczny problem: jak znaleźć znajomych w identi.ca (w ogólności: w serwisie mikroblogowym)? Po chwili namysłu stwierdziłem, że najprostszym sposobem szukania znajomych jest przeglądanie znajomych moich znajomych. Skoro ja znam A, a A zna B, to stosunkowo spora szansa, że znam B lub że chcę go dodać do obserwowanych. Podobnie tematycznie – ludzie zwykle obserwują ludzi o podobnych zainteresowaniach.

Najprostszy wariant, ręczny, to otworzenie przeglądarki, otworzenie profili wszystkich znajomych w kartach, następnie dla każdego profilu otworzenie wszystkich obserwowanych. Teoretycznie dobre, w praktyce szybko zrobiłoby się kilkadziesiąt/kilkaset kart, na dodatek z powtarzającymi się profilami. Nie tędy droga.

Ponieważ identi.ca ma API, to postanowiłem sprawdzić, czy nie uda się lekko sobie pomóc skryptem. Okazało się, że w Perlu jest moduł do obsługi API identi.ca o nazwie Net::Identica. Tak naprawdę API identi.ca i Twittera jest identyczne (do Twittera jest Net::Twitter), ale stwierdziłem, że dodam w systemie dedykowany moduł. Co prawda nie ma go w repozytorium debianowym, ale stosunkowo łatwo go zbudować (po spełnieniu zależności) z użyciem dh-perl-make.UPDATE: Ostatecznie korzystam jednak z Net::Twitter.

Ponieważ sądzę, że pytanie jak znaleźć znajomych na Twitterze (czy też na identi.ca) zadaje sobie sporo ludzi, postanowiłem opublikować skrypt, może komuś się przyda. W skrypcie należy podać ID usera, od którego ma zacząć poszukiwania, login i hasło. Nie polecam zmieniać poziomu głębokości poszukiwań (domyślnie jest to znajomi znajomych).

Algorytm jest prosty: dopóki nie osiągnie zadanego poziomu głębokości (domyślnie 2 czyli znajomi znajomych), to pobierze wszystkie ID użytkowników będących znajomymi obecnego użytkownika i doda je do sprawdzenia. Z kolei sprawdzanego użytkownika oznaczy jako sprawdzanego (i nie będzie go sprawdzał po raz kolejny). Zaczynamy od wskazanego ID użytkownika (przypuszczalnie własnego).

W zasadzie tyle. Na koniec pobierze i wyświetli dla wszystkich zebranych ID, których nie mamy już w znajomych podstawowe dane – nazwę, link do profilu, opis itp. – raczej wystarczy, by określić, czy chcemy dodać daną osobę do obserwowanych, czy nie. Bonusowo ID użytkownika, który jest zakończeniem najkrótszej (jednej z najkrótszych) ścieżek do nowopoznanej osoby.

W trakcie pojawił się drobny problem – znajomych znajomych było ponad 3k. Przypuszczałem, że jest jakiś błąd w skrypcie, ale po bliższym przyjrzeniu się wyszło na jaw, że winny jest rms (tak, Richard M. Stallman), który obserwuje właśnie tyle osób. Na takie okazje została dodana blacklista – wystarczy podać tam ID użytkownika, którego znajomych nie chcemy sprawdzać (w ogóle).

Na koniec skrypt wyświetli nam podstawowe dane, jak dla mnie wystarczające, by zorienotwać się, czy chcemy dodać kogoś do obserwowanych. Zasadniczo nic nie stoi na przeszkodzie, by dodać ich (po ID) skryptem, ale ja wolę wejść na profil i zobaczyć najpierw, co piszą (tak, oznacza to, że prawdopodobnie niebawem będę intensywniej korzystał z identi.ca, kosztem Blipa).

Skrypt poniżej. Przy okazji być może jest to sposób na nieirytujące zamieszczanie kodu na Blox…

UPDATE: Nie bardzo chciały działać URLe, przeszedłem na Net::Twitter i zamieszcam poprawioną wersję.

UPDATE2: Jest w komentarzu, ale nie wszyscy docierają: Jak znaleźć ID użytkownika na Twitterze? ID użytkownika na Twitterze (na Identi.ca też) jest zawarta w feedzie RSS danego użytkownika.

Rockbox, scrobbling i obsługa libre.fm pod Linuksem.

Wygląda, że mój odtwarzacz dorobił się finalnej postaci. To, co najważniejsze, czyli odtwarzanie muzyki działało od samego początku. Ostatnio dorobił się dodatkowej karty flash, a teraz obsługi scrobblingu. O ile samo włączenie scrobblingu, które już wcześniej planowałem zrobić, jest trywialne i aż dziwne, że wcześniej tego nie zrobiłem, o tyle spięcie z libre.fm trywialne nie jest (trudne też nie, ale). Do rzeczy.

Włączenie obsługi scrobblingu w Rockboksie jest proste i sprowadza się do zaznaczenia jednej opcji. Konkrentnie należy zmienić Settings -> Playback Settings -> Last.fm Log na Yes. Tworzony i automatycznie uzupełniany jest plik .scrobbler.log, w standardowym formacie. Nie wiem, czemu wcześniej tego nie zrobiłem w sumie. Pewnie rzuciłem okiem na dalsze wymagane czynności i odpuściłem.

Gorzej z obsługą libre.fm, bo sam plik to nie wszystko (a w zasadzie prawie nic). Początkowo chciałem korzystać z QTscrobblera – klikalne, wolne, niby libre.fm obsługuje. Pierwszy zgrzyt – nie ma tego w repo Debiana, nie ma pakietu .deb do pobrania. Kompilacja i budowa paczki to wprawdzie moment (ave checkinstall!) plus konieczność doinstalowania paru pakietów koniecznych do kompilacji, ale niestety nie widzę nigdzie opcji wyboru libre.fm, a dokumentacja w tym zakresie jest na poziomie non-existent, mimo, że sama aplikacja jest oznaczona jako wspierająca libre.fm na ich wiki. Być może należy dodać wpisy w hosts. Być może ustawić proxy. Zawsze można w źródle zmienić… No ale jakby nie o to chodzi – to miało być łatwe i klikalne, a robi się rzeźba. A wyniki wyszukiwania nie pomagają.

Podczas poszukiwań wielokrotnie natykałem się na opis, jak w prosty sposób (skrypt w bashu plus dwa skrypty w pythonie) aktualizować dane na libre.fm z wiersza poleceń. Metoda prymitywna, ale wyglądająca na prostą i skuteczną, więc stwierdziłem, że dam jej szansę. Jedyne na co warto zwrócić uwagę, to aktualizacja strefy czasowej. OTOH nie mam pewności, dla której strefy czasowej Rockbox dodaje timestampy przy poprawnie ustawionym czasie na odtwarzaczu i komputerze, ale nawet jeśli będzie przesunięcie o te 2 godziny, ale dzień się będzie zgadzał, a taka dokładność w zupełności mi wystarczy.

Instrukcja step-by-step:

  1. Pobierz skrypt bashowy (drugą wersję) z forum i zapisz do pliku
  2. Dostosuj strefę czasową
  3. Utwórz katalog librefm w katalogu użytkownika (mkdir ~/librefm)
  4. Pobierz skrypty import.py oraz gobble.py z tej strony
  5. Uruchom skrypt bashowy (sh nazwa_pod_jaka_zapisany). W katalogu musi być plik .scrobbler.log
  6. Opcjonalnie możesz wykasować pozycje, których nie chcesz wysyłać (np. podcasty czy audiobooki)
  7. Uruchom skrypt w Pythonie (chmod 700 import.py && ./import.py login_do_librefm ~/librefm/rockbox.log)
  8. Podaj hasło do swojego konta na libre.fm
  9. Enjoy your stats

Jeśli ktoś spiął QTscrobblera z libre.fm, to chętnie dowiem się, jak to dokładnie zrobić.

Poza tym, ciągle rozglądam się za wygodnym sposobem słuchania muzyki, ze wsparciem (natywnym) dla libre.fm i – najlepiej – jednoczesnym wsparciem dla Jamendo. Jest Pyjama, ale po pierwsze nie jest to player ogólnego przeznaczenia, tylko – skądinąd wygodny – program do Jamendo. Po drugie, demon szybkości to to nie jest. Nie wiem, czy kwestia Pythona z testinga, czy czego, ale obecnie potrafi zmulić i to do granicy reponsywności (OTOH odtwarzanie działa w tym czasie płynnie, więc nie krytyk). A kiedyś było dobrze… Po trzecie, Pyjama jest słabo rozwijana.

Ideałem byłoby coś, co potrafi scrobble’ować i radia internetowe, i dobrze obsługującego zwykłe albumy z dysku, i Jamendo. W sumie kolejność Jamendo -> radia -> albumy z dysku, bo jakoś nie jestem fanem trzymania wybranej kolekcji (co innego odtwarzacz).

Patos kapu kap.

Niedawno miała miejsca akcja Stop-Cenzurze (dead link). O co chodziło, można doczytać na stronie. Akcja miała wiele pochodnych, przykładowo do pobrania był bardzo ciekawy skypt (ciekawszy niż czarny banner, choć IMO trochę mniej mówiący – banner wyłączający u góry nieco za mały), zasłaniający niektóre wyrazy czarnymi prostokątami (wyłączane po kliknięciu banneru).

Ponieważ akcję popieram, to i tu znalazł się banner (co prawda pojawił się później, bo wtedy dowiedziałem się o akcji, ale był). Można nawet mówić o jakimś sukcesie – chyba pierwszy raz doszło do zauważenia zwykłych ludzi i ich zastrzeżeń do prac rządu i procesu stanowienia prawa, co więcej, była nawet jakaś reakcja i zainteresowanie ze strony rządu. Pożyjemy, zobaczymy.

Natomiast nie o tym chciałem pisać, a o przemówieniu na zakończenie akcji. Jak pisałem, banner zamieściłem, ale nawet nie zgłaszałem strony, bo po co? Kto wejdzie, ten zobaczy banner i tyle. Natomiast chcę się odnieść – po raz kolejny – do fragmentu wspomnianego przemówienia:

Niektórzy z Was mogli się przecież przy tym narazić na mniejsze wpływy u reklamodawców i oburzenie społeczności dla której jesteście. To właśnie można nazwać poświęceniem dla sprawy.

Już samo słowo przemówienie w tytule sugeruje, że od patosu będzie kapać, ale tego się nie spodziewałem. Normalnie zamieszczający od ust sobie odebrali, głodowali miesiąc, wygnano ich z miast i pokasowano im konta na serwisach. Społeczność była oburzona, jad pod ich adresem wprost lał się strumieniami w wielu wpisach poświęconych tej sprawie. Oraz tradycyjnych mediach (szczególnie niektóre dzienniki). Poświęcenie, jakby ręce dali sobie uciąć w ramach protestu. No i maile, nie zapominajmy gorzkich mailach z wyrzutami. Treść takiego maila można zobaczyć poniżej. Bzzzt, wróć. Można by było zobaczyć, jakbym jakiegoś dostał.

Get real, całe przyłączenie się do akcji to było tylko wklejenie kawałka kodu w szablon, żeby się odwiedzającym banner wyświetlił. Po prostu i tylko tyle. Jak napisałem w komentarzu, dla mnie taki tekst na koniec akcji jest żałosny. W stylu wy, wielcy bohaterowie, w ramach głodówki nie zjedliście dziś ani jednego ciastka, dziękujemy za poświęcenie! Choć stańcie do apelu byłoby mocniejsze…

I zastanamiam się, gdzie byli i co robili wszyscy ci obrońcy wypowiedzi, kiedy MG kasowano konto (podążanie za odnośnikami wskazane; miałem nie wracać do tego, ale tak się kojarzy, że nie mogę się powstrzymać).