czwartek, 25 grudnia 2014

Pozyskiwanie danych (cz. 3) - wprowadzenie do API na przykładzie last.fm

Problem
last.fm at fowa.Po zdobyciu wszystkich notowań listy Olis, mamy tyle przydatnych danych co kot napłakał. Dysponujemy niewielką liczbą informacji na temat wykonawców, być może wystarczającą żeby wygenerować proste statystyki ale to wciąż za mało żeby cokolwiek wnioskować o charakterystyce notowań. Oczywiście niektórzy czytelnicy mogą wiedzieć sporo o rynku muzycznym i w łatwy sposób określić np. gatunek muzyczny danego artysty, skalę popularności itd. Problem w tym, że w chwili obecnej w bazie danych mamy ich >1500, a ta liczba będzie przyrastać z każdym tygodniem. Drugim problemem jest to, że nawet największy znawca rynku muzycznego może mieć problem z określeniem np. skali popularności.
Tym wpisem potwierdzę jak ważne wg. Mnie jest sprawne obracanie się w świecie dostępnych danych, powtarzając do znudzenia problem naświetlany w moim pierwszym wpisie. Nie jestem bynajmniej odosobniony w tej kwestii. Ostatnio także smarterpoland pisał jak uczyć i jak uczyć się analizy danych, wskazując na dużą wagę umiejętności "inżynierskich", związanych z pozyskiwaniem danych, w tym również za pośrednictwem webAPI. Czym właściwie jest webAPI?
Jest to możliwość bezpośredniego skorzystania z bazy danych jakiegoś serwisu internetowego, za pomocą specjalnych zapytań. Zapytania są niczym innym jak linkiem skonstruowanym według wytycznych dostawcy danych. Za pomocą linków komunikujemy się z serwerem serwisu, w odpowiedzi otrzymując żądane dane. Żadna teoria nie opiszę tego tak dobrze jak skupienie się nad dzisiejszym przykładem, w którym to wykorzystamy webAPI serwisu last.fm do wyciągnięcia dodatkowych informacji o artystach notowanych na liście Olis. Dodatkowymi informacjami będzie tutaj lista słów kluczowych (tagów) określających danego artystę.
Tak jak w przypadku większości API, musimy przejść przez ścieżkę uwierzytelnienia dla Naszej aplikacji ściągającej dane.
  1. W tym celu należy najpierw zarejestrować się w serwisie last.fm
  2. Gdy już się zarejestrujemy zakładamy specjalne pod konto do API, najpewniej będzie to konto niekomercyjne. Dodajemy kilka informacji na temat Naszej aplikacji i zatwierdzamy.
  3. Przechodzimy na stronę z listą Naszych API kont, gdzie wyświetlany jest api key Naszej nowo-utworzonej aplikacji - kopiujemy go i przechodzimy do kolejnego etapu
  4. Skopiowany api key pozwala nam na zdobycie tokenu do aplikacji desktopowej.
  5. Gdy już mamy api key i token, uwierzytelniamy naszą sesję używając linka "www.lastfm.pl/api/auth?api_key=TWÓJ API KEY&token=TOKEN", zastępując pola wyróżnione dużymi literami własnymi kluczami. Na wyświetlonej stronie klikamy "Tak, pozwól na dostęp" po czym, możemy zamknąć przeglądarkę i korzystać z Naszej aplikacji przez najbliższe 60min.
Dysponując listą artystów, dla każdego z nich wysyłamy zapytanie artist.getTopTags ,otrzymując w odpowiedzi dziesięć najczęstszych tagów z przypisanym poziomem poprawności skojarzenia.

Rozwiązanie
1. Uwierzytelnianie sesji - Zainicjowanie procesu pobierania danych przedstawione we wstępie może być wykonane manualnie wg. powyższych instrukcji lub przy pomocy RSelenium. Poniższa funkcja odkrywa nieopisywaną przeze mnie fantastyczną funkcjonalność sterowania przeglądarką za pomocą Selenium. Mianowicie klikanie wybranych elementów oraz wpisywanie i zatwierdzanie loginu i hasła. Z Selenium wszystko idzie jak z płatka. Standardy URL nie są już lekturą obowiązkową, a większość operacji wykonujemy całkiem naturalnie, zapisując w R odbicie działań myszki i klawiatury nie koniecznie wnikając w procesy, które gdzieś tam zachodzą.
Wywołując powyższą funkcję rozpoczynamy proces autoryzacji. Analizując skrypt i bieżącą pracę przeglądarki, można łatwo odgadnąć jak działają poszczególne procedury. Po zakończeniu pracy przeglądarka automatycznie zostaje zamknięta, a my możemy przejść do etapu pobierania danych.

2. Pobieranie danych - w tej części pobierać będziemy tagi każdego z artystów. RSelenium już nie będzie potrzebny, użyjemy w zamian dobrze skrojonej biblioteki 'httr', funkcjonującą jako nakładka na 'RCurl'. Do pobierania danych z API last.fm stworzyłem funkcję artist_tags(artist, api_key, token).
Wczytujemy potrzebne dane z aktualnymi notowaniami Olis, wyodrębniamy listę wszystkich delikwentów. Każdy z delikwentów to jedna iteracja pętli, w której wywołujemy funkcję artist_tags() przekazującą data.frame do listy pod nazwą danego wykonawcy.

Wesołych Świąt i powodzenia!

Brak komentarzy:

Prześlij komentarz