Ohjelmointi

Hanki API-tiedot R: n avulla

On paljon upeita R-paketteja, joiden avulla voit tuoda tietoja sovellusliittymästä yhdellä toiminnolla. Joskus sovellusliittymällä ei kuitenkaan ole jo kirjoitettua toimintoa. Hyvä uutinen on, että omasi koodaus on helppoa.

Osoitan tämän AccuWeather-sovellusliittymällä, mutta prosessi ja koodi toimivat useimmissa muissa sovellusliittymissä, jotka käyttävät avainta todentamiseen.

Rekisteröidy API-käyttöoikeuteen

Jos haluat seurata mukana, siirry osoitteeseen developer.accuweather.com ja kirjaudu sisään ilmainen tili. Valitse Paketit ja hinnoittelu -kohdasta Rajoitettu kokeilu, joka sallii 50 API-puhelua päivässä - riittää, jos haluat vain tarkistaa paikallisen ennustesi muutaman kerran päivässä, mutta ei tietenkään minkäänlaista julkista sovellusta varten.

Jos sinulle ei heti esitetä mahdollisuutta luoda sovellusta, siirry Omat sovellukset -kohtaan ja luo uusi sovellus.

Sharon Machlis,

Valitsin Muu, jos sovellusliittymää käytetään, sisäisen sovelluksen luomaani varten ja muun ohjelmointikieleksi (valitettavasti R ei ole vaihtoehto). Sovelluksellesi tulisi määrittää API-avain.

Jos et halua koodata kyseistä API-avainta AccuWeather-ennustekomentosarjaan, tallenna se R-ympäristömuuttujana. Helpoin tapa tehdä tämä on tämän paketin avulla.usethis :: edit_r_environ ()avaa R-ympäristötiedostosi muokkausta varten. Lisää rivi kutenACCUWEATHER_KEY = 'oma_avain_merkkijono' tiedostoon, tallenna tiedosto ja käynnistä R-istunto uudelleen. Voit nyt käyttää avaimen arvoaSys.getenv ("ACCUWEATHER_KEY") sen sijaan, että itse koodaat kovaa koodia.

Määritä sovellusliittymän URL-rakenne

Tätä projektia varten ladaan ensin httr-, jsonlite- ja dplyr-paketit: httr tietojen saamiseksi sovellusliittymästä, jsonlite niiden jäsentämiseen ja dplyr lopulta putkien käyttämiseen (voit käyttää myös magrittr-pakettia).

Seuraava - ja tämä on kriittistä - sinun on osattava rakentaa URL-osoite, jotta voit pyytää haluamiasi tietoja sovellusliittymältä. Kyselyrakenteen selvittäminen voi olla prosessin vaikein osa, riippuen siitä, kuinka hyvin API on dokumentoitu. Onneksi AccuWeather API -asiakirjat ovat melko hyviä.

Kaikki API-kyselyt tarvitsevat resurssin URL-osoitteen tai mielestäni URL-osoitteen juuren ja sitten kyselyn tietyt osat. Näin AccuWeather sanoo yhden päivän ennusteen sovellusliittymän dokumentaatiossa:

 //dataservice.accuweather.com / weathers / v1 / daily / 1day / {locationKey} 

Ennusteen perus-URL on enimmäkseen vakio, mutta tämä tarvitsee a sijaintikoodi. Jos etsit vain ennustetta yhdelle sijainnille, voit huijata ja käyttää AccuWeather-verkkosivustoa etsiäksesi ennustetta osoitteesta accuweather.com ja tarkista sitten palaava URL-osoite. Kun haen postinumeroa 01701 (toimistomme Framingham, MA), seuraava URL tulee takaisin ennusteen kanssa:

//www.accuweather.com/en/us/framingham/01701/weather-forecast/571_pc

Katso / 571_kpl lopussa? Se on sijaintiavain. Voit myös käyttää AccuWeather Locations -sovellusliittymää vetämään sijaintikoodeja ohjelmallisesti, jotka näytän vähän, tai jotain AccuWeatherin Web-pohjaisten sijaintien sovellusliittymän työkaluista, kuten Kaupunkihaku tai Postinumerohaku.

Muodosta pyyntö-URL

Tiettyjen tietopyyntöjen kyselyparametrit kiinnitetään perus-URL-osoitteen loppuun. Ensimmäinen parametri alkaa kysymysmerkillä, jota seuraa nimi on sama arvo. Mahdolliset avainarvoparit lisätään ampersandilla, jota seuraa nimi yhtä suuri arvo. Joten API-avaimen lisäämiseksi URL-osoite näyttäisi tältä:

//dataservice.accuweather.com/forecasts/v1/daily/1day/571_pc?apikey=MY_KEY

Jos halusin lisätä toisen kyselyparametrin - esimerkiksi muuttaa oletustiedot epätosi-arvoksi tosi -, se näyttäisi tältä:

//dataservice.accuweather.com/forecasts/v1/daily/1day/571_pc?apikey=MY_KEY&details=true

Hanki tiedot

Voimme käyttää httr :: GET () toiminto tehdä HTTP SAADA kyseisen URL-osoitteen pyyntö, kuten

my_url <- paste0 ("// dataservice.accuweather.com/forecasts/",

"v1 / daily / 1day / 571_pc? apikey =",

Sys.getenv ("ACCUWEATHER_KEY"))

my_raw_result <- httr :: GET (my_url)

Että liitä0 () URL-osoitteen luonti -komento hajotti URL-juuren kahteen riviin luettavuuden vuoksi ja lisäsi sitten ACCUWEATHER_KEY R -ymuuttujaan tallennetun API-avaimen.

my_raw_result on hieman monimutkainen luettelo. Tarvitsemamme todelliset tiedot ovat enimmäkseen sisältöä, mutta jos tarkastelet sen rakennetta, huomaat, että se on "raaka" muoto, joka näyttää binaaritiedolta.

Sharon Machlis,

Onneksi httr-paketin avulla on helppo muuntaa raakasta käyttökelpoiseen muotoon - sisältö() toiminto.

Jäsennä tulokset

sisältö() antaa sinulle kolme muunnosvaihtoehtoa: raakana (mikä ei todellakaan ole hyödyllistä tässä tapauksessa); jäsennetty, mikä näyttää yleensä palauttavan jonkinlaisen luettelon; ja tekstiä. JSONille - erityisesti sisäkkäiselle JSONille - mielestäni teksti on helpoin työskennellä. Tässä on koodi:

my_content <- httr :: content (my_raw_result, as = 'text')

Tässä tulee jsonlite-paketti sisään lähettäjäJSON () -toiminto muuttaa JSON-tekstimerkkijonon sisältö() käyttökelpoisemmaksi R-objektiksi.

Tässä ovat osittaiset tulokset käynnissä olevista dplyr-ohjelmista vilkaisu () toiminto päällä my_content nähdäksesi rakenteen:

Sharon Machlis,

Se on luettelo, jossa on kaksi kohdetta. Ensimmäisessä kohdassa on joitain metatietoja ja haluamasi tekstikenttä. Toinen kohta on datakehys, jossa on paljon datapisteitä, joita ehdottomasti haluamme ennusteelle.

Juoksu vilkaisu () vain siitä datakehyksestä näkyy, että se oli sisäkkäin JSON, koska jotkut sarakkeet ovat itse asiassa omia datakehyksiä. Mutta lähettäjäJSON () teki kaiken melko saumattomaksi.

Havaintoja: 1 Muuttujat: 8 $ Date "2019-08-29T07: 00: 00-04: 00" $ EpochDate 1567076400 $ Lämpötila $ Päivä $ Yö $ Lähteet ["AccuWeather"]

Joten nämä ovat perusvaiheet tietojen hakemiseen sovellusliittymästä:

  1. Selvitä sovellusliittymän perus-URL-osoite ja kyselyparametrit ja luo pyyntö-URL.
  2. Juosta httr :: GET () URL-osoitteessa.
  3. Jäsennä tulokset sisältö(). Voit kokeilla sitä as = 'jäsennetty', mutta jos se palauttaa monimutkaisen luettelon, yritä as = 'teksti'.
  4. Suorita tarvittaessa jsonlite :: lähettäjäJSON () jäsennetyllä esineellä.

Pari muutama kohta ennen kuin päätämme. Ensinnäkin, jos katsot uudelleen my_raw_result - alkuperäinen kohde palasi SAADA - Sinun pitäisi nähdä tilakoodi. 200 tarkoittaa, että kaikki oli kunnossa. Mutta 400-luvun koodi tarkoittaa jotain menneen pieleen. Jos kirjoitat funktiota tai komentosarjaa, voit tarkistaa, onko tilakoodi 200-luvulla, ennen kuin ylimääräinen koodi suoritetaan.

Toiseksi, jos sinulla on useita kyselyparametreja, voi olla hieman ärsyttävää sitoa ne kaikki yhdessä a: n kanssa liitä0 () komento. SAADA() on toinen vaihtoehto, joka luo nimettyjen kyselyargumenttien luettelon, kuten:

my_raw_result2 <- GET (URL,

kysely = luettelo (

apikey = Sys.getenv ("ACCUWEATHER_KEY"),

details = 'totta'

)

)

Näetkö rakenteen? SAADA() funktio ottaa perus-URL-osoitteen ensimmäiseksi argumentiksi ja luettelon nimistä ja arvoista toisena kyselyargumenttina. Jokainen on nimi = arvo, ja nimi ei lainausmerkeissä. Loput koodista ovat samat.

Se toimii myös AccuWeather Locations -sovellusliittymässä.

Tässä on mitä API etsii:

Sharon Machlis,

Voin käyttää samanlaista koodia kuin ennusteen sovellusliittymässä, mutta tällä kertaa kyselyparametreilla apikey ja q, AccuWeather-avain ja etsimäni paikan teksti vastaavasti:

base_url <- "//dataservice.accuweather.com/locations/v1/cities/search"

ny_location_raw <- GET (pohja_url,

kysely = luettelo (apikey = Sys.getenv ("ACCUWEATHER_KEY"),

q = "New York, NY"

))

ny_parsed%

lähettäjäJSON ()

Sijaintikoodi on Avaimet-sarakkeessa.

> vilkaisu (ny_parsed) Havaintoja: 1 Muuttujat: 15 $ Versio 1 $ Key "349727" $ Tyyppi "City" $ Rank 15 $ LocalizedName "New York" $ EnglishName "New York" $ PrimaryPostalCode "10007" $ Region $ Maa $ AdministrativeArea $ TimeZone $ GeoPosition $ IsAlias ​​FALSE $ SupplementalAdminAreas []

Nyt tarvitset vain koodin sovellusliittymästä hankkimiesi tietojen käyttämiseen.

Jos haluat lisää R-vinkkejä, siirry "Tee enemmän R: n kanssa" -sivulle, jossa on haettava artikkeli- ja videotaulukko.