Programování

Získejte data API s R.

Existuje spousta skvělých balíčků R, které vám umožňují importovat data z API s jedinou funkcí. Někdy však API nemá již napsanou funkci. Dobrou zprávou je, že je snadné kódovat vlastní.

Ukážu to s AccuWeather API, ale proces a kód budou fungovat pro většinu ostatních API, které používají klíč pro autentizaci.

Zaregistrujte se pro přístup k API

Pokud chcete pokračovat, přejděte na web developer.accuweather.com a zaregistrujte si bezplatný účet. V části Balíčky a ceny vyberte omezenou zkušební verzi, která umožňuje 50 volání API denně - dost, pokud chcete jen zkontrolovat místní předpověď několikrát denně, ale samozřejmě ne pro jakýkoli druh veřejné aplikace.

Pokud se vám hned nezobrazí možnost vytvořit aplikaci, přejděte do části Moje aplikace a vytvořte novou aplikaci.

Sharon Machlis,

Vybral jsem Other pro místo, kde bude použito API, Internal App pro to, co vytvářím, a Other pro programovací jazyk (bohužel R není volba). K vaší aplikaci by měl být přiřazen klíč API.

Pokud tento klíč API nechcete natvrdo kódovat do skriptu prognózy AccuWeather, uložte jej jako proměnnou prostředí R. Nejjednodušší způsob je použít tento balíček.usethis :: edit_r_environ ()otevře váš soubor prostředí R pro úpravy. Přidejte řádek, jako jeACCUWEATHER_KEY = 'my_key_string' do tohoto souboru, uložte soubor a restartujte relaci R. Nyní můžete získat přístup ke klíčové hodnotě pomocíSys.getenv ("ACCUWEATHER_KEY") namísto pevného kódování samotné hodnoty.

Určete strukturu URL API

U tohoto projektu nejprve načtím balíčky httr, jsonlite a dplyr: httr pro získání dat z API, jsonlite pro jejich analýzu a dplyr pro případné použití potrubí (můžete také použít balíček magrittr).

Další - a to je zásadní - potřebujete vědět, jak strukturovat URL, abyste mohli požadovat požadovaná data z API. Zjištění struktury dotazu může být nejtěžší částí procesu, v závislosti na tom, jak dobře je API dokumentováno. Naštěstí jsou dokumenty AccuWeather API docela dobré.

Jakýkoli dotaz API vyžaduje adresu URL prostředku nebo to, co považuji za kořen adresy URL, a poté konkrétní části dotazu. AccuWeather říká ve své dokumentaci pro API pro jednodenní předpověď:

 //dataservice.accuweather.com / forecasts / v1 / denně / 1 den / {locationKey} 

Základní URL pro předpověď je většinou konstantní, ale tato potřebuje kód umístění. Pokud hledáte pouze předpověď pro jedno místo, můžete podvádět a použít web AccuWeather k vyhledání předpovědi na accuweather.com a poté zkontrolovat URL, která se vrátí. Když vyhledám PSČ 01701 (naše kancelář ve Framinghamu, MA), vrátí se spolu s předpovědí následující adresa URL:

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

Viz / 571_pc na konci? To je klíč k poloze. Můžete také použít API AccuWeather Locations pro programové vytištění lokalizačních kódů, které trochu ukážu, nebo některý z webových API API AccuWeather Locations, jako je City Search nebo poštovní směrovací číslo.

Vytvořte adresu URL požadavku

Parametry dotazu pro konkrétní požadavky na data jsou připoutány na konec základní adresy URL. První parametr začíná otazníkem následovaným názvem se rovná hodnotě. Jakékoli další páry klíč – hodnota se přidají s ampersandem, za kterým následuje název se rovná hodnotě. Chcete-li přidat můj klíč API, adresa URL bude vypadat takto:

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

Pokud bych chtěl přidat druhý parametr dotazu - řekněme, změnit výchozí podrobnosti z false na true - vypadalo by to takto:

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

Získejte data

Můžeme použít httr :: ZÍSKAT () funkce pro vytvoření HTTP DOSTAT žádost o tuto adresu URL, například

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

"v1 / denně / 1 den / 571_pc? apikey =",

Sys.getenv ("ACCUWEATHER_KEY"))

my_raw_result <- httr :: GET (my_url)

Že paste0 () příkaz vytvářející adresu URL rozdělil kořen adresy URL na dva řádky kvůli čitelnosti a poté přidal klíč API uložený v proměnné prostředí ACCUWEATHER_KEY R.

my_raw_result je poněkud složitý seznam. Skutečná data, která chceme, jsou většinou v obsahu, ale pokud se podíváte na jejich strukturu, uvidíte, že jde o „surový“ formát, který vypadá jako binární data.

Sharon Machlis,

Balíček httr naštěstí usnadňuje převod ze surového do použitelného formátu - pomocí obsah() funkce.

Analyzovat výsledky

obsah() poskytuje tři možnosti převodu: jako surový (což v tomto případě rozhodně není užitečné); analyzováno, což zřejmě obvykle vrátí nějaký seznam; a text. Pro JSON - zejména vnořený JSON - považuji text za nejjednodušší pro práci. Zde je kód:

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

Tady přichází balíček jsonlite odJSON () funkce změní textový řetězec JSON z obsah() do více použitelného R objektu.

Zde jsou částečné výsledky spuštění dplyr záblesk() funkce zapnuta můj_obsah podívat se na strukturu:

Sharon Machlis,

Je to seznam se dvěma položkami. První položka obsahuje některá metadata a textové pole, které bychom mohli chtít. Druhou položkou je datový rámec se spoustou datových bodů, které pro předpověď určitě chceme.

Běh záblesk() jen na tom datovém rámci ukazuje, že byl vnořený JSON, protože některé sloupce jsou vlastně jejich vlastní datové rámce. Ale odJSON () všechno to bylo docela bezproblémové.

Pozorování: 1 Proměnné: 8 $ Datum "2019-08-29T07: 00: 00-04: 00" $ EpochDate 1567076400 $ Teplota $ Den $ Noc $ Zdroje ["AccuWeather"]

Toto jsou základní kroky k načtení dat z API:

  1. Zjistěte základní adresu URL a parametry dotazu API a vytvořte adresu URL požadavku.
  2. Běh httr :: ZÍSKAT () na URL.
  3. Analyzujte výsledky pomocí obsah(). Můžete to zkusit s as = 'analyzováno', ale pokud to vrátí komplikovaný seznam, zkuste to as = 'text'.
  4. V případě potřeby spusťte jsonlite :: fromJSON () na tom analyzovaném objektu.

Ještě pár bodů, než to zabalíme. Nejprve, když se znovu podíváte na my_raw_result - původní objekt se vrátil z DOSTAT - měli byste vidět stavový kód. 200 znamená, že vše bylo v pořádku. Ale kód ve 400. letech znamená, že se něco pokazilo. Pokud píšete funkci nebo skript, můžete před spuštěním dalšího kódu zkontrolovat, zda je stavový kód ve 200. letech.

Zadruhé, pokud máte více parametrů dotazu, může být trochu nepříjemné spojit je všechny dohromady s a paste0 () příkaz. DOSTAT() má další možnost, kterou je vytvoření pojmenovaného seznamu argumentů dotazu, například:

my_raw_result2 <- ZÍSKAT (url,

dotaz = seznam (

apikey = Sys.getenv ("ACCUWEATHER_KEY"),

details = 'true'

)

)

Vidíte strukturu? The DOSTAT() funkce vezme základní URL jako první argument a seznam jmen a hodnot jako druhý argument dotazu. Každý z nich je název = hodnota, se jménem ne v uvozovkách. Zbytek kódu je stejný.

To funguje i pro AccuWeather Locations API.

API hledá:

Sharon Machlis,

Mohu použít podobný kód jako u API pro předpověď, ale tentokrát s parametry dotazu apikey a q, klávesa AccuWeather a text místa, které hledám, respektive:

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

ny_location_raw <- ZÍSKAT (base_url,

query = list (apikey = Sys.getenv ("ACCUWEATHER_KEY"),

q = "New York, NY"

))

ny_parsed%

odJSON ()

Kód umístění je ve sloupci Klíč.

> glimpse (ny_parsed) Poznámky: 1 Proměnné: 15 $ Verze 1 $ Klíč "349727" $ Typ "Město" $ Pořadí 15 $ LocalizedName "New York" $ EnglishName "New York" $ PrimaryPostalCode "10007" $ Region $ Země $ AdministrativeArea $ TimeZone $ GeoPosition $ IsAlias ​​FALSE $ SupplementalAdminAreas []

Nyní potřebujete pouze kód pro použití dat, která jste stáhli z API.

Další tipy R najdete na stránce „Do More With R“ s prohledávatelnou tabulkou článků a videí.

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