Programovanie

Získajte údaje API s R.

Existuje veľa skvelých balíkov R, ktoré vám umožňujú importovať údaje z API s jedinou funkciou. Niekedy však API nemá už napísanú funkciu. Dobrou správou je, že je ľahké kódovať tie svoje.

Ukážem to pomocou rozhrania AccuWeather API, ale proces a kód budú fungovať pre väčšinu ostatných rozhraní API, ktoré používajú na autentifikáciu kľúč.

Zaregistrujte sa a získajte prístup k rozhraniu API

Ak chcete postupovať ďalej, prejdite na stránku developer.accuweather.com a zaregistrujte si bezplatný účet. V časti Balíky a ceny vyberte obmedzenú skúšobnú verziu, ktorá umožňuje 50 hovorov API denne - dosť, ak si chcete iba dvakrát skontrolovať miestnu predpoveď, ale zjavne nie pre akýkoľvek druh verejne prístupnej aplikácie.

Ak sa vám okamžite nezobrazí možnosť vytvoriť aplikáciu, prejdite do časti Moje aplikácie a vytvorte novú aplikáciu.

Sharon Machlis,

Vybral som si Iné pre miesto, kde sa API bude používať, Internú aplikáciu pre to, čo tvorím, a Iné pre programovací jazyk (R, bohužiaľ, nie je možné). K vašej aplikácii by mal byť priradený kľúč API.

Ak tento kľúč API nechcete naprogramovať do svojho predpovedného skriptu AccuWeather, uložte ho ako premennú prostredia R. Najjednoduchšie to urobíte pomocou tohto balíka.usethis :: edit_r_environ ()otvorí váš súbor R prostredia na úpravy. Pridajte riadok ako naprACCUWEATHER_KEY = 'môj_kľúčový_reťazec' do tohto súboru, uložte súbor a reštartujte reláciu R. Teraz môžete získať prístup k hodnote kľúča pomocouSys.getenv ("ACCUWEATHER_KEY") namiesto pevného kódovania samotnú hodnotu.

Určte štruktúru URL API

Pre tento projekt najskôr načítam balíčky httr, jsonlite a dplyr: httr na získanie údajov z API, jsonlite na ich analýzu a dplyr na prípadné použitie rúrok (môžete tiež použiť balík magrittr).

Ďalej - a to je rozhodujúce - potrebujete vedieť, ako štruktúrovať adresu URL, aby ste mohli požadovať požadované údaje z rozhrania API. Zistenie štruktúry dotazu môže byť najťažšou časťou procesu, v závislosti od toho, ako dobre je API zdokumentované. Našťastie sú dokumenty AccuWeather API celkom dobré.

Akýkoľvek dotaz API vyžaduje adresu URL zdroja alebo to, čo považujem za koreň adresy URL, a potom konkrétne časti dotazu. AccuWeather vo svojej dokumentácii k API pre jednodňovú predpoveď hovorí:

 //dataservice.accuweather.com / forecasts / v1 / denne / 1 deň / {locationKey} 

Základná adresa URL predpovede je väčšinou konštantná, ale táto vyžaduje kód umiestnenia. Ak hľadáte iba predpoveď pre jedno miesto, môžete podvádzať a použiť web AccuWeather na vyhľadanie predpovede na accuweather.com a potom skontrolovať adresu URL, ktorá sa vráti. Keď hľadám PSČ 01701 (naša kancelária vo Framinghame, MA), vráti sa spolu s predpoveďou aj táto adresa URL:

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

Viď / 571_pc nakoniec? To je kľúč polohy. Môžete tiež použiť API AccuWeather Locations na programové vytiahnutie kódov miest, ktoré trochu ukážem, alebo niektorý z webových nástrojov API AccuWeather Locations API, ako je City Search alebo poštové smerovacie číslo.

Vytvorte webovú adresu žiadosti

Parametre dopytu pre konkrétne požiadavky na údaje sa pripútajú na koniec základnej adresy URL. Prvý parameter začína otáznikom a za ním sa rovná názov rovná hodnote. Akékoľvek ďalšie páry kľúč - hodnota sa pridajú s ampersandom, za ktorým nasleduje názov sa rovná hodnote. Takže aby som pridal môj kľúč API, URL by vyzerala takto:

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

Ak by som chcel pridať druhý parameter dotazu - povedzme, zmeniť predvolené podrobnosti z nepravdivých na pravdivé - vyzeralo by to takto:

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

Získajte údaje

Môžeme použiť httr :: ZÍSKAŤ () funkcia na vytvorenie HTTP ZÍSKAJTE žiadosť tejto adresy URL, ako napríklad

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

"v1 / denne / 1 deň / 571_pc? apikey =",

Sys.getenv ("ACCUWEATHER_KEY"))

my_raw_result <- httr :: GET (my_url)

To paste0 () príkaz na vytvorenie adresy URL rozdelil koreň adresy URL na dva riadky kvôli čitateľnosti a potom pridal kľúč API uložený v premennej prostredia ACCUWEATHER_KEY R.

my_raw_result je trochu zložitý zoznam. Skutočné údaje, ktoré chceme, sú väčšinou v obsahu, ale ak sa pozriete na ich štruktúru, uvidíte, že ide o „surový“ formát, ktorý vyzerá ako binárne údaje.

Sharon Machlis,

Našťastie balík httr umožňuje ľahkú konverziu zo surového do použiteľného formátu - pomocou obsah () funkcia.

Analyzujte výsledky

obsah () poskytuje tri možnosti konverzie: ako surové (čo v tomto prípade určite nie je užitočné); analyzovaný, čo sa zdá, že zvyčajne vráti nejaký zoznam; a text. Pre JSON - najmä vnorený JSON - považujem text za najjednoduchší na prácu. Tu je kód:

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

To je miesto, kde prichádza balíček jsonlite fromJSON () funkcia zmení textový reťazec JSON z obsah () do použiteľnejšieho R objektu.

Tu sú čiastočné výsledky spustenia programu dplyr záblesk () funkcia zapnutá môj_obsah získať prehľad o štruktúre:

Sharon Machlis,

Je to zoznam s dvoma položkami. Prvá položka obsahuje niekoľko metadát a textové pole, ktoré by sme mohli chcieť. Druhou položkou je dátový rámec s množstvom dátových bodov, ktoré pre predpoveď určite chceme.

Beží záblesk () práve ten dátový rámec ukazuje, že bol vnorený JSON, pretože niektoré zo stĺpcov sú vlastne ich vlastné dátové rámce. ale fromJSON () urobilo to všetko pekne bezproblémové.

Pozorovania: 1 Premenné: 8 $ Dátum "2019-08-29T07: 00: 00-04: 00" $ EpochDate 1567076400 $ Teplota $ Deň $ Noc $ Zdroje ["AccuWeather"]

Toto sú základné kroky na získanie údajov z rozhrania API:

  1. Zistite základnú adresu URL a parametre dotazu API a vytvorte webovú adresu požiadavky.
  2. Bež httr :: ZÍSKAŤ () na URL.
  3. Výsledky analyzujte pomocou obsah (). Môžete to skúsiť s as = 'parsed', ale ak to vráti komplikovaný zoznam, skúste as = 'text'.
  4. Ak je to potrebné, utekajte jsonlite :: fromJSON () na tom analyzovanom objekte.

Ešte pár bodov, než to zabalíme. Najprv, ak sa pozriete znova na my_raw_result - pôvodný objekt sa vrátil z ZÍSKAJTE - mali by ste vidieť stavový kód. 200 znamená, že bolo všetko v poriadku. Ale kód v 400. rokoch znamená, že sa niečo pokazilo. Ak píšete funkciu alebo skript, pred spustením ďalšieho kódu môžete skontrolovať, či je stavový kód do 200. rokov.

Po druhé, ak máte viac parametrov dopytu, môže byť trochu nepríjemné ich všetky spojiť reťazcom a paste0 () príkaz. ZÍSKAŤ () má ďalšiu možnosť, ktorou je vytvorenie pomenovaného zoznamu argumentov dotazu, napríklad:

my_raw_result2 <- ZÍSKAŤ (url,

dopyt = zoznam (

apikey = Sys.getenv ("ACCUWEATHER_KEY"),

details = 'true'

)

)

Vidíte štruktúru? The ZÍSKAŤ () funkcia vezme základnú URL ako prvý argument a zoznam mien a hodnôt ako druhý argument dopytu. Každý z nich je názov = hodnotu, s menom nie v úvodzovkách. Zvyšok kódu je rovnaký.

To funguje aj pre rozhranie AccuWeather Locations API.

Rozhranie API hľadá toto:

Sharon Machlis,

Môžem použiť podobný kód ako v API pre predpoveď, ale tentokrát s parametrami dotazu apikey a q, kláves AccuWeather a text miesta, ktoré hľadám, respektíve:

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

ny_location_raw <- ZÍSKAŤ (base_url,

dotaz = zoznam (apikey = Sys.getenv ("ACCUWEATHER_KEY"),

q = "New York, NY"

))

ny_parsed%

fromJSON ()

Kód umiestnenia sa nachádza v stĺpci Kľúč.

> glimpse (ny_parsed) Pozorovania: 1 Premenné: 15 $ Verzia 1 $ Kľúč „349727“ $ Typ „Mesto“ $ Poradie 15 $ LocalizedName „New York“ $ EnglishName „New York“ $ PrimaryPostalCode „10007“ $ Región $ Krajina $ AdministrativeArea $ TimeZone $ GeoPosition $ IsAlias ​​FALSE $ SupplementalAdminAreas []

Teraz už potrebujete iba kód na použitie údajov, ktoré ste získali z API.

Ďalšie tipy R nájdete na stránke „Do More With R“ s prehľadávateľnou tabuľkou článkov a videí.

$config[zx-auto] not found$config[zx-overlay] not found