My latest package is a R client for Melanie Seltzer’s “friends-quotes-api”, called {centralperk}! This was mainly a way for me to continue learning about APIs, specifically using APIs with R. I’ve been doing some work with an API powered by {plumber} for data collection at work and wanted to explore more. {centralperk} is massively influenced (and many code chunks taken from) by the {goodshirt} package by Adam Gruer which I use every time I start up RStudio.

To use {centralperk} you can just call the functions directly:

But in my opinion the best usage of {centralperk} is to insert it into your R profile file. Whenever you open up a new RStudio instance (or just restart your R session if you’re in the mood to procrastinate) a new quote from Friends will pop up in your console to brighten your day!

You can do this by first installing {centralperk}:

devtools::install_github("Ryo-N7/centralperk")

Get a random quote via centralperk():

library(centralperk)

centralperk()
## 
##  But they don't know that we know they know we know! 
## 
##  > Phoebe

Get a quote from any of the main characters with ross(), rachel(), joey(), chandler(), phoebe(), monica()!

ross()
## 
##  I grew up in a house with Monica, okay. If you didn't eat fast, you didn't eat. 
## 
##  > Ross
rachel()
## 
##  I got off the plane. 
## 
##  > Rachel
joey()
## 
##  How you doin? 
## 
##  > Joey
chandler()
## 
##  I'm not so good with the advice. Can I interest you in a sarcastic comment? 
## 
##  > Chandler
phoebe()
## 
##  But they don't know that we know they know we know! 
## 
##  > Phoebe
monica()
## 
##  Guys can fake it? Unbelievable! The one thing that’s ours! 
## 
##  > Monica

Then to access your R profile file (it will create one for you if you don’t have one already):

usethis::edit_r_profile()

Finally you can put the line of code below in the file (message() is so that it appears in orange in the console). Then just restart R (Ctrl+Shift+F10 in RStudio) and you’ll have a quote in your console!

if (interactive() & require("centralperk", quietly = TRUE)) { message(centralperk()) }

This is a method I learned via #rstats Twitter but… I can’t find the original tweet, sorry! You could also add a bit of color to the output with the {crayon} package as well.

From making this package and reading a lot of code from other API R packages out in the wild I learned quite a lot. At work I was mainly working from the API side of things rather than the client side. So creating an R client for an API naturally meant that I had to get used to using the {httr} package. From there it’s dealing with the outputs which mainly come in the form of lists which made me revisit some of my favorite {purrr} functions like map() and pluck(). I found out later that you can also pass URLs to the jsonlite::fromJSON() function which returns a data.frame but I didn’t end up using it as staying within {httr} felt more natural as there are a lot of built-in features that you can use to handle various API responses compared to converting from the JSON content directly.

Going through the code of {goodshirt} I saw how Adam created S3 classes and methods which was something I learned about going through Advanced R last year but not something I got to practice because I never needed it at work or any personal projects. However, for quote generation having specific classes and methods are a big help because you can specify how the quote strings appear for the user. For a package like a quote generator you want to present the quotes in a nice way, with new lines, separate line for the quoted character (and other meta info), and maybe some indentation.

A limitation of {centralperk} is that the API its calling only has 18 quotes, and only one each for Monica and Chandler. My learning goals for this year are to learn more about APIs with R and web dev stuff (doing Javascript right now), so for this package my intermediate/long term goal is to create my own Friends Quotes API using {plumber} or Javascript (…or both for practice)!

The time consuming part is probably going to be the actual data collection part as I’m going to be downloading subtitle transcripts and then re-watching the show to find good quotes to choose from. I’ve been doing this with another show that I want to do stuff with (plumber APIs, shiny apps, ggplots, websites, the whole shabang) and well… yeah all of this is just an excuse on my part to re-watch TV shows under the guise of “this is useful for my programming projects!”.

I can’t really put a timeline on when any of this stuff will come out since there are tons of new shows/movies coming out recently for me to watch but stay tuned!