U ovom dijelu predavanja ćemo preuzeti ekonomske podatke (između ostalog) sa FRED API-ja. To zatijeva registraciju i pohranu API ključa.
Koristiti ćemo JSONView browser ekstenziju koja omogućava pregled JSON output-a u Chrome-u i Firefox-u. (Nije nužno ali preporučeno!)
Prigodan način za instalaciju i učitavanje svih prethodno pobrojanih paketa (ukoliko to niste već napravili):
## učitaj i instaliraj pakete
if (!require("pacman")) install.packages("pacman")
pacman::p_load(tidyverse, httr, lubridate, hrbrthemes, janitor, jsonlite, listviewer, usethis)
pacman::p_install_gh("sboysel/fredr") ## https://github.com/sboysel/fredr/issues/75
#tema
theme_set(hrbrthemes::theme_ipsum())
U prvom dijelu predavanja o preuzimanju sadržaja sa interneta smo vidjeli da web stranice i web aplikacije mogu biti: 1) na strani servera i 2) na strani klijenta. Već smo pokazali kako preuzeti podatke koji su procesuirani na strani servera koristeći rvest paket. Ta se tehnika fokusira na CSS selektore (SelectorGadget) i HTML tagove. Također smo vidjeli da webscraping nije egzaktna zanost već dijelom i umjetnost! Mnoštvo CSS opcija i fleksibilnost HTML-a čine preuzimanje podataka specifičnim za svaku pojedinu stranicu i trenutak. To ne znači da opći principi ne funkcioniraju!
Fokus ovog dijela predavanja je preuzimanje podataka koji su procesuirani na strani klijenta (client-side). Ovaj je pristup u najvećem broju slučajeva jednostavniji način za preuzimanje podataka sa web-a. To ne znači da određena doza “umjetnosti” nije potrebna…! Još jednom valja naglasiti etičke i zakonske aspekte preuzimanja web sadržaja…pogledajte u prvom dijelu predavanja!
Webstranice i aplikacije koje su procesuirane na strani klijenta zahtijevaju sljedeći pristup:
Cijelokupni proces slanja zahtjeva, odgovora i procesuiranja se odvija kroz API (or Application Program Interface) host aplikacije.
Ako prvi put čujete za API, pogledajte Zapier- ov pregled An Introduction to APIs. Pregled je opširan ali ne morate proći sve detalje…Zaključak je da API predstavlja skup pravila i metoda koje omogućavaju interakciju različitih software-skih aplikacija u razmjeni informacija. To se ne odnosi samo na web servere i browser-e nego i na npr. neke pakete koje smo već koristili u ovom kolegiju.1 Ključni koncepti su:
GET
(i.e. “zamoli” server za informaciju), a neke druge su POST
, PUT
i DELETE
.Ključna točka u razumijevanju API-ja je da možemo pristupiti informacijama direktno iz API baze podataka ukoliko na ispravan način specificiramo URL-ove. Ti URL-ovi su ono što nazivamo API izvorima (engl. API endpoints).
API izvori su u mnogočemu sličini normalnim web URL-ovima koje stalno posjećujemo. Za početak, možete navigirati do njih u browser-u. “Normalne” web stranice prikazuju informacije u “lijepom” HTML-u (slike, video, GFI itd.), a API izvori su “ružni”. Navigirajte browser do API izvora i vidjeti ćete samo hrpu neformatiranog teksta. Ono što uistinu vidite je najvjerojatnije JSON (JavaScript Object Notation) ili XML (Extensible Markup Language).
Sintaksa tih jezika (JSON i XML) vas ne treba zabrinjavati. Važno je da objekt u vašem browser-u (koji učitava hrpu nestrukturiranog teksta) zapravo ima vrlo precizno definiranu strukturu i format. Taj objekt akođer sadžava informacije (podatke) koje je moguće vrlo jednostavno učitati u R (ili Python, Julia…). Potrebno je samo znati točan API izvor za podatke koje želimo!
Vrijeme je za nekoliko primjera…Započeti ćemo sa najjednostavnijim slučajem (bez API ključa i sa eksplicitnim API izvorom), a nakon toga nastaviti sa složenijim primjerima.
NYC Open Data je zanimljiva inicijativa. Njezina misija je "make the wealth of public data generated by various New York City agencies and other City organizations available for public use". Podatci koje možete preuzeti uključuju uhićenja, lokacije wifi spotova, oglase za posao, broj beskućnika, licence za pse, popis wc-a u javnim parkovima…Pogledajte popis dostupnih podataka kada stignete! U ovom primjeru ćemo preuzeti podatke o drveću 2015 NYC Street Tree Census.
Ovaj izvor koristimo na početku pošto nije potrebno postaviti API ključ unaprijed.2 Podatke ćemo preuzeti u nekoliko koraka:
Pogledajte animirani prikaz: