Ir daudz lielisku R pakotņu, kas ļauj importēt datus no API ar vienu funkciju. Tomēr dažreiz API nav jau uzrakstītas funkcijas. Labā ziņa ir tā, ka ir viegli kodēt savu.
Es to parādīšu, izmantojot AccuWeather API, taču process un kods darbosies lielākajai daļai citu API, kas autentifikācijai izmanto atslēgu.
Reģistrējieties API piekļuvei
Ja vēlaties sekot līdzi, dodieties uz vietni developer.accuweather.com un reģistrējieties bezmaksas kontam. Sadaļā Paketes un cenas atlasiet Ierobežoto izmēģinājumu, kas ļauj veikt 50 API izsaukumus dienā - pietiekami, ja vēlaties tikai pāris reizes dienā pārbaudīt vietējo prognozi, bet acīmredzot, ka tas nav paredzēts jebkādai publiski pieejamai lietojumprogrammai.
Ja jums uzreiz netiek piedāvāta iespēja izveidot lietotni, dodieties uz sadaļu Manas lietotnes un izveidojiet jaunu lietotni.
Sharon Machlis,Es izvēlējos Cits, kur tiks izmantota API, Iekšējā lietotne, ko es veidoju, un Cita - programmēšanas valodai (diemžēl R nav opcija). Jūsu lietotnei jāpiešķir API atslēga.
Ja nevēlaties kodēt šo API atslēgu savā AccuWeather prognožu skriptā, saglabājiet to kā R vides mainīgo. Visvienkāršāk to izdarīt, izmantojot šo paketi.usethis :: edit_r_environ ()
atver jūsu R vides failu rediģēšanai. Pievienojiet tādu rindu kāACCUWEATHER_KEY = 'my_key_string'
uz šo failu, saglabājiet failu un restartējiet R sesiju. Tagad varat piekļūt atslēgas vērtībai, izmantojotSys.getenv ("ACCUWEATHER_KEY")
tā vietā, lai stingri kodētu pašu vērtību.
Nosakiet API URL struktūru
Šajā projektā vispirms es ielādēšu paketes httr, jsonlite un dplyr: httr, lai iegūtu datus no API, jsonlite, lai tos parsētu, un dplyr, lai galu galā izmantotu caurules (varat izmantot arī paketi magrittr).
Nākamais - un tas ir kritiski - jums jāzina, kā strukturēt URL, lai pieprasītu nepieciešamos datus no API. Vaicājuma struktūras noteikšana var būt vissmagākā procesa sastāvdaļa, atkarībā no tā, cik labi API ir dokumentēta. Par laimi, AccuWeather API dokumenti ir diezgan labi.
Jebkuram API vaicājumam ir nepieciešams resursa URL vai tas, ko es domāju par URL sakni, un pēc tam noteiktas vaicājuma daļas. Lūk, ko AccuWeather saka vienas dienas prognožu API dokumentācijā:
//dataservice.accuweather.com / prognozes / v1 / daily / 1day / {locationKey}
Prognozes bāzes URL pārsvarā ir nemainīgs, taču šim ir nepieciešams atrašanās vietas kods. Ja jūs meklējat tikai vienas vietas prognozi, varat krāpties un izmantot AccuWeather vietni, lai meklētu prognozi vietnē accuweather.com un pēc tam pārbaudītu atgriezto URL. Kad es meklēju pasta indeksu 01701 (mūsu birojs Framingemā, MA), kopā ar prognozi tiek parādīts šāds URL:
//www.accuweather.com/en/us/framingham/01701/weather-forecast/571_pc
Skatīt / 571_gab
beigās? Tā ir atrašanās vietas atslēga. Varat arī izmantot AccuWeather atrašanās vietu API, lai programmatiski ievilktu atrašanās vietas kodus, kurus es mazliet parādīšu, vai kādu no AccuWeather tīmekļa vietņu API rīkiem, piemēram, Pilsētas meklēšana vai Pasta indeksu meklēšana.
Kontrolējiet pieprasījuma URL
Konkrētu datu pieprasījumu vaicājuma parametri tiek piesaistīti bāzes URL beigām. Pirmais parametrs sākas ar jautājuma zīmi, kam seko nosaukums ir vienāds ar vērtību. Visi papildu atslēgu un vērtību pāri tiek pievienoti ar zīmi un pēc tam nosaukums ir vienāds ar vērtību. Tātad, lai pievienotu manu API atslēgu, URL izskatās šādi:
//dataservice.accuweather.com/forecasts/v1/daily/1day/571_pc?apikey=MY_KEY
Ja es vēlētos pievienot otru vaicājuma parametru - teiksim, mainot noklusējuma informāciju no false uz true - tas izskatās šādi:
//dataservice.accuweather.com/forecasts/v1/daily/1day/571_pc?apikey=MY_KEY&details=true
Iegūstiet datus
Mēs varam izmantot httr :: IEGŪT ()
funkcija, lai izveidotu HTTP GŪT
URL pieprasījumu, piemēram,
my_url <- paste0 ("// dataservice.accuweather.com/forecasts/","v1 / daily / 1day / 571_pc? apikey =",
Sys.getenv ("ACCUWEATHER_KEY")
my_raw_result <- httr :: GET (my_url)
Tas paste0 ()
komanda izveido URL sadalīja URL sakni divās rindās lasāmības labad un pēc tam pievienoja API atslēgu, kas saglabāta vides mainīgajā ACCUWEATHER_KEY R.
my_raw_result
ir nedaudz sarežģīts saraksts. Faktiskie vēlamie dati lielākoties ir saturiski, taču, ja paskatās uz to struktūru, redzēsit, ka tas ir “neapstrādāts” formāts, kas izskatās pēc bināriem datiem.
Par laimi, httr pakotne ļauj to viegli pārveidot no neapstrādāta uz izmantojamu formātu - ar saturs ()
funkciju.
Parsējiet rezultātus
saturs ()
sniedz jums trīs reklāmguvumu iespējas: kā neapstrādātu (kas šajā gadījumā noteikti nav noderīgi); parsēts, kas, šķiet, parasti atgriež kaut kādu sarakstu; un tekstu. JSON - īpaši ligzdoto JSON - es uzskatu, ka tekstu ir visvieglāk strādāt. Šeit ir kods:
my_content <- httr :: content (my_raw_result, as = 'text')
Šeit ienāk jsonlite pakete no JSON ()
funkcija pagriezīs JSON teksta virkni no saturs ()
izmantojamākā R objektā.
Šeit ir dplyr’s darbības daļēji rezultāti ieskats ()
funkcija ieslēgta my_content
lai apskatītu struktūru:
Tas ir saraksts ar diviem vienumiem. Pirmajā vienumā ir daži metadati un teksta lauks, kuru mēs varētu vēlēties. Otrais elements ir datu rāmis ar daudziem datu punktiem, kurus mēs noteikti vēlamies prognozēt.
Skriešana ieskats ()
tieši tajā datu rāmī ir redzams, ka tas ir ievietots JSON, jo dažas kolonnas faktiski ir viņu pašu datu rāmji. Bet noJSON ()
padarīja to visu diezgan bezšuvju.
Novērojumi: 1 Mainīgie: 8 $ Datums "2019-08-29T07: 00: 00-04: 00" $ EpochDate 1567076400 $ Temperatūra $ Diena $ Nakts $ Avoti ["AccuWeather"]
Tātad šie ir galvenie soļi datu iegūšanai no API:
- Uzziniet API bāzes URL un vaicājuma parametrus un izveidojiet pieprasījuma URL.
- Palaist
httr :: IEGŪT ()
URL. - Parsējiet rezultātus ar
saturs ()
. Jūs varat to izmēģināt aras = 'parsēts'
, bet, ja tas atgriež sarežģītu sarakstu, mēģinietas = 'teksts'
. - Ja nepieciešams, palaidiet
jsonlite :: no JSON ()
uz šī parsētā objekta.
Vēl pāris punkti, pirms mēs iesaiņojamies. Pirmkārt, ja paskatās vēlreiz my_raw_result
- sākotnējais objekts atgriezās no GŪT
- jums vajadzētu redzēt statusa kodu. 200 nozīmē, ka viss bija kārtībā. Bet kods 400. gados nozīmē, ka kaut kas nogāja greizi. Ja rakstāt funkciju vai skriptu, pirms papildu koda palaišanas varat pārbaudīt, vai statusa kods ir 200. gados.
Otrkārt, ja jums ir vairāki vaicājuma parametri, var būt nedaudz nepatīkami tos visus sasaistīt kopā ar paste0 ()
komandu. GŪT()
ir vēl viena opcija, kas veido nosauktu vaicājuma argumentu sarakstu, piemēram:
my_raw_result2 <- GET (URL,vaicājums = saraksts (
apikey = Sys.getenv ("ACCUWEATHER_KEY"),
details = 'true'
)
)
Vai redzēt struktūru? The GŪT()
Funkcija kā galveno argumentu uzskata pamata URL, kā otro vaicājuma argumentu - vārdu un vērtību sarakstu. Katrs no tiem ir nosaukums = vērtība
, ar nosaukumu nē pēdiņās. Pārējais kods ir vienāds.
Tas darbojas arī AccuWeather Locations API.
Lūk, ko API meklē:
Sharon Machlis,Es varu izmantot līdzīgu kodu kā ar prognožu API, bet šoreiz ar vaicājuma parametriem apikey
un q
, attiecīgi AccuWeather atslēga un meklētās vietas teksts:
base_url <- "//dataservice.accuweather.com/locations/v1/cities/search"ny_location_raw <- GET (bāzes_url,
vaicājums = saraksts (apikey = Sys.getenv ("ACCUWEATHER_KEY"),
q = "Ņujorka, NY"
))
ny_parsed%
noJSON ()
Atrašanās vietas kods ir slejā Atslēga.
> ieskats (ny_parsed) Novērojumi: 1 Mainīgie: 15 $ Version 1 $ Key "349727" $ Tips "City" $ Rank 15 $ LocalizedName "New York" $ EnglishName "New York" $ PrimaryPostalCode "10007" $ Region $ Country $ AdministrativeArea $ TimeZone $ GeoPosition $ IsAlias FALSE $ SupplementalAdminAreas []
Tagad jums ir nepieciešams kods, lai izmantotu datus, ko esat ieguvis no API.
Lai iegūtu vairāk R padomu, dodieties uz lapu “Darīt vairāk ar R” ar meklējamu rakstu un videoklipu tabulu.