Logo by Zane Dax @StarTrek_Lt
Meetup has deprecated the REST API that’s used in this package. We are working to add support for their new API but unfortnately that means that the package is not currently functional. If you’d like to help with this transition in any way (we could use help with testing and documentation in particular), please comment on the this issue.
R interface to the Meetup API (v3)
To install the development version from GitHub:
# install.packages("remotes")
remotes::install_github("rladies/meetupr")
A released version will be on CRAN soon.
As of August 15, 2019, Meetup.com switched from an API key based authentication system to OAuth 2.0, so we added support for OAuth.
Meetup API and this package recommend using OAuth for authentication. We’ve abstracted part of the difficulty but it’s still a bit more complex than storing a simple API key as secret.
With OAuth you need
-
an OAuth app. There’s one shipped in with the package! If you prefer you can bring your own app by setting the
meetupr.consumer_key
andmeetupr.consumer_secret
options. -
an access token. It’s an httr object and it can be saved to disk. It expires but can be refreshed. It contains secrets so it’s a sensitive file! For creating one you will be prompted to log into your meetup.com account in the browser. But then if you cache the token to disk, you won’t need to do that again. This means you can create a token on your computer locally and use it on a server (if the server is public, encrypting the token).
Let’s go through workflows and ways to control how your token is created and cached.
If you don’t tweak anything, the first time you run a meetupr function,
you’ll be prompted to go into your browser and a token will be created.
It will be saved to disk in an app directory as determined by
rappdirs::user_data_dir("meetupr", "meetupr")
And all the times you use meetupr again, this token will be used, and refreshed and re-saved as needed.
This is, we hope, a sensible default.
Now if you want to have a different behavior you either tweak options
(in your .Rprofile so for all sessions in the future, or just in the
current session), or call the meetup_auth()
function directly.
- Don’t want to cache the token to disk? Use the
cache
argument, to be set toFALSE
. - Don’t want to use an app dir? Use the
use_appdir
argument, to be set toFALSE
. If it is false, the token will be cached to.httr-oauth
(unlesscache
is FALSE too, of course) - Want to save the token to somewhere you choose? No way to use an
option. Use the
token_path
argument ofmeetup_auth()
. - Want to use a token that was created elsewhere? Save it to disk,
keep it secret, and refer to it via the
token
argument ofmeetup_auth()
that can be either a token or the path to a token.
See the pkgdown reference.
For example, the following code will get all upcoming events for the R-Ladies San Francisco meetup.
library(meetupr)
urlname <- "rladies-san-francisco"
events <- get_events(urlname)
dplyr::arrange(events, desc(time))
#> # A tibble: 63 × 18
#> id title link status durat…¹ going waiting descr…² venue…³ venue…⁴
#> <chr> <chr> <chr> <chr> <chr> <int> <int> <chr> <chr> <dbl>
#> 1 280404371 Data St… http… PAST PT1H30M 61 0 "=====… 269060… -8.52
#> 2 277757076 Buildin… http… PAST PT2H 70 0 "Build… 269060… -8.52
#> 3 273036282 A conve… http… PAST PT2H 30 0 "Fires… 269060… -8.52
#> 4 272407729 Tangibl… http… PAST PT1H30M 45 0 "Tangi… 269060… -8.52
#> 5 267967077 R-Ladie… http… PAST PT2H 95 0 "Just … 260586… 37.8
#> 6 266395328 Decembe… http… PAST PT2H30M 98 0 "Join … 261907… 37.8
#> 7 265100301 Worksho… http… PAST PT2H 40 0 "\"Tra… 266458… 37.8
#> 8 263230714 August … http… PAST PT2H 58 0 "1. Bu… 265200… 37.6
#> 9 262717409 R-Ladie… http… PAST PT3H 18 0 "Come … 260979… 37.8
#> 10 262662040 Bayesia… http… PAST PT2H 57 0 "MAIN … 260597… 37.8
#> # … with 53 more rows, 8 more variables: venue_lon <dbl>, venue_name <chr>,
#> # venue_address <chr>, venue_city <chr>, venue_state <chr>, venue_zip <chr>,
#> # venue_country <chr>, time <dttm>, and abbreviated variable names ¹duration,
#> # ²description, ³venue_id, ⁴venue_lat
#> # ℹ Use `print(n = ...)` to see more rows, and `colnames()` to see all variable names
We can also search for groups with free text.
groups <- find_groups("R-Ladies")
dplyr::arrange(groups, desc(created))
#> # A tibble: 189 × 17
#> id name urlname latit…¹ longi…² city state membe…³ members
#> <chr> <chr> <chr> <dbl> <dbl> <chr> <chr> <chr> <int>
#> 1 36221103 R-Ladies Honolu… rladie… 21.3 -158. Hono… "HI" LEADER 11
#> 2 36221061 R-Ladies Rabat rladie… 34.0 -6.83 Rabat "" LEADER 145
#> 3 36155475 R-Ladies Morelia rladie… 19.7 -101. More… "" LEADER 97
#> 4 36155463 R-Ladies Ciudad… rladie… 27.5 -110. Ciud… "" LEADER 2
#> 5 36128420 R-Ladies Rome rladie… 41.9 12.5 Roma "RM" LEADER 25
#> 6 36128390 R-Ladies Oxford… rladie… 34.4 -89.5 Oxfo… "MS" LEADER 3
#> 7 35897820 R-Ladies Gaboro… rladie… -24.6 25.9 Gabo… "" LEADER 490
#> 8 35897809 R-Ladies Cologne rladie… 50.9 6.96 Colo… "" LEADER 178
#> 9 35897790 R-Ladies West L… rladie… 40.5 -87.0 West… "IN" LEADER 9
#> 10 35897779 R-Ladies Villah… rladie… 18.0 -92.9 Vill… "" LEADER 116
#> # … with 179 more rows, 8 more variables: created <dttm>, timezone <chr>,
#> # join_mode <chr>, who <chr>, isPrivate <lgl>, category_id <chr>,
#> # category_name <chr>, country <chr>, and abbreviated variable names
#> # ¹latitude, ²longitude, ³membershipMetadata.status
#> # ℹ Use `print(n = ...)` to see more rows, and `colnames()` to see all variable names
We are looking for new people to join the list of contributors! Please take a look at the open issues, file a new issue, contribute tests, or improve the documentation. We are also looking to expand the set of functions to include more endpoints from the Meetup API. Lastly, we’d also love to hear about any applications of the meetupr package, so we can compile a list of demos!
Please note that the this project is released with a Contributor Code of Conduct. By contributing to this project, you agree to abide by its terms.