Programmēšana

Iegūstiet API datus, izmantojot R

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.

Sharon Machlis,

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:

Sharon Machlis,

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:

  1. Uzziniet API bāzes URL un vaicājuma parametrus un izveidojiet pieprasījuma URL.
  2. Palaist httr :: IEGŪT () URL.
  3. Parsējiet rezultātus ar saturs (). Jūs varat to izmēģināt ar as = 'parsēts', bet, ja tas atgriež sarežģītu sarakstu, mēģiniet as = 'teksts'.
  4. 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 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.