--- title: "Overview of scryr" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{Overview of scryr} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r, include = FALSE} knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) ``` scryr is a lightweight wrapper around [Scryfall](https://scryfall.com/), an amazing (and free!) _Magic: The Gathering_ API. With scryr you can ingest card data as tidy data frames, allowing for frictionless integration with tidyverse pipelines. Currently there are 2 main endpoints: `cards` and `sets`. The other 4 endpoints (`bulk_data`, `catalogs`, `rulings`, and `symbols`) are mostly auxiliary to the main ones. ```{r setup, message = FALSE} # Start scryr and helpers library(dplyr) library(scryr) ``` ## Cards This endpoints is, by far, the most complex. Make sure to read `scry_cards()`' full documentation before diving in! For the curious, more relevant information about cards can be found in `vignette("syntax")` (_Query Syntax_) and `vignette("layouts")` (_Layouts and Faces_). The most important function here is `scry_cards()`. It returns a data frame of card data given a query: ```{r} # Legendary vampires vampires <- scry_cards("t:vampire t:legend") # There are many, many columns print(vampires) ``` Note that many columns are list-columns with deeply nested information inside. This is a result of Scryfall's data model and is the reason why scryr needs tibbles to work. But don't be alarmed! It's all pretty consistent. ```{r} # Get Anje's related cards vampires %>% filter(name == "Anje, Maid of Dishonor") %>% pull(all_parts) # Get Anje's color identity vampires %>% filter(name == "Anje Falkenrath") %>% pull(color_identity) ``` There are also "singular" functions, that is, functions that return one card instead of many. They are `scry_card()` and its siblings, all of them methods that find a card given some sort of identifier. ```{r} # Using an ID scry_card("913dd06f-ed2f-4128-9c9d-9cd0d8a55425")$name # Using a name scry_card_name("Anje Falkenrath")$name # Using a collector number and a set scry_card_number(37, "c19")$name # Just get a random vampire commander scry_card_random("t:vampire t:legend")$name ``` If you're unsure of exactly what card you're looking for, don't worry. Scryfall also has an endpoint that tries to autocomplete the name of a card and scryr makes it available so that you don't have to ever leave R to look for a card. ```{r} # There she is autocomplete_name("falken")[12] ``` ## Sets The other main endpoint retrieves information about sets. There are also many list-columns but, again, they are all handled consistently; following in the footsteps of `cards`, `sets` also has a "plural" function and a "singular" function. Note that `scry_cards()` is the only "plural" method that can filter results with its `q` argument. ```{r} # Get all sets scry_sets() # Get a single set with an ID scry_set("vow") ``` ## Other Endpoints All other endpoints return way less information than the two above. Here is a short demonstration of what else you can do with the rest of scryr: ```{r} # Get information from a catalog head(scry_catalog("keyword-actions")) # Get rulings for a card scry_ruling("913dd06f-ed2f-4128-9c9d-9cd0d8a55425") # Get information about symbols scry_symbols() # Parse mana costs parse_cost("2g2")$cost # Get names of bulk files scry_bulk_files()$name # Download (and parse) bulk rulings scry_bulk_file("Rulings") ```