Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/hrbrmstr/seymour

🧰 📰 Tools to Work with the 'Feedly' 'API'
https://github.com/hrbrmstr/seymour

feedly r rss rstats

Last synced: 27 days ago
JSON representation

🧰 📰 Tools to Work with the 'Feedly' 'API'

Awesome Lists containing this project

README

        

---
output: rmarkdown::github_document
editor_options:
chunk_output_type: console
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(message=FALSE, warning=FALSE)
options(width=120)
```

![](man/figures/venus-fly-trap.jpg)

# seymour

Tools to Work with the 'Feedly' 'API'

## Description

'Feedly' is a news aggregator application for various web browsers and mobile devices running 'iOS' and 'Android', also available as a cloud-based service. It compiles news feeds from a variety of online sources for the user to customize and share with others. Methods are provided to retrieve information about and contents of 'Feedly' collections and streams.

## What's Inside The Tin

The following API functions are implemented:

- `feedly_access_token`: Retrieve the Feedly Developer Token
- `feedly_collections`: Retrieve Feedly Connections
- `feedly_categories`: Show Feedly Categories
- `feedly_entry`: Get a single entry by id
- `feedly_enterprise_profile`: Retrieve Your Feedly Enterprise Profile
- `feedly_feed_meta`: Retrieve Metadata for a Feed
- `feedly_opml`: Retrieve Your Feedly OPML File
- `feedly_profile`: Retrieve Your Feedly Profile
- `feedly_refresh_token`: Generate a Feedly Refresh Token
- `feedly_search_contents`: Search content of a stream
- `feedly_search_title`: Find feeds based on title, url or '#topic'
- `feedly_stream`: Retrieve contents of a Feedly "stream"
- `feedly_subscribe`: Subscribe to an RSS feed
- `feedly_subscriptions`: Retrieve Feedly Subscriptions
- `feedly_tags`: Retrieve List of Tags

The following helper functions are available:

- `feedly_continue`: Helper function to iterate through a `feedly_stream()` result set
- `render_stream`: Render a Feedly Stream Data Frame to R Markdown

The following helper references are available:

- `global_resource_ids`: Global Resource Ids Helper Reference

## Authentication (README)

You need a developer token to access most of the API endpoints. You can do that via links provdied by (). There are no plans to support OAuth or token refreshing unless there is sufficient demand via Git[la|hu]b issues & issue votes.

### NOT ALL ENDPOINTS REQUIRE AUTHENTICATION

Neither `feedly_search_title()` nor `feedly_stream()` require authentication (i.e. you do not need a developer token) to retrieve the contents of the API call. For `feedly_stream()` You _do_ need to know the Feedly-structured feed id which is (generally) `feed/FEED_URL` (e.g. `feed/http://feeds.feedburner.com/RBloggers`).

## Installation

```{r eval=FALSE}
devtools::install_github("hrbrmstr/seymour")
```

```{r message=FALSE, warning=FALSE, error=FALSE, include=FALSE}
options(width=120)
```

## Usage

```{r message=FALSE, warning=FALSE, error=FALSE}
library(seymour)
library(tidyverse) # mostly for printing

# current verison
packageVersion("seymour")

```

### Collections

```{r collections, cache=TRUE}
coll <- feedly_collections()

filter(coll, title == "R-bloggers") %>%
glimpse()
```

### Streams

```{r streams, cache=TRUE}
feedly_stream(
stream_id = "feed/http://feeds.feedburner.com/RBloggers",
) -> rbloggers

glimpse(rbloggers$items)

rbloggers$items
```

### Feed Metadata

```{r feed_metadata, cache=TRUE}
feedly_feed_meta("https://feeds.feedburner.com/rweeklylive") %>%
glimpse()
```

### OPML Retrieval

```{r opml_retrieval, cache=TRUE}
feedly_opml(as = "parsed")
```

### Title Search

```{r title_search, cache=TRUE}
rst <- feedly_search_title("data science")
glimpse(rst$results)
```

### Contents Search

```{r contents_search, cache=TRUE}
rsc <- feedly_search_contents("data science")
glimpse(rsc$results)
```

### API Usage Rate Limit Info

```{r rate_limit, cache=TRUE}
fp <- feedly_profile()
fp[grepl("rate_limit", names(fp))]
```

### Sample Stream Report

```{r sample_stream_report, eval=FALSE}
fp <- feedly_profile() # get profile to get my id

# use the id to get my "security" category feed
fs <- feedly_stream(sprintf("user/%s/category/security", fp$id))

# get the top 10 items with engagement >= third quartile of all posts
# and don't include duplicates in the report
mutate(fs$items, published = as.Date(published)) %>%
filter(published >= as.Date("2018-12-01")) %>%
filter(engagement > fivenum(engagement)[4]) %>%
filter(!is.na(summary_content)) %>%
mutate(alt_url = map_chr(alternate, ~.x[[1]])) %>%
distinct(alt_url, .keep_all = TRUE) %>%
slice(1:10) -> for_report

# render the report
render_stream(
feedly_stream = for_report,
title = "Cybersecurity News",
include_visual = TRUE,
browse = TRUE
)
```

Click on the following to see the complete render or view the [Rmd](https://rud.is/seymour/sample-report.Rmd) or [HTML](https://rud.is/seymour/sample-report.html) in your browser:

## Package Code Metrics

```{r pkg_metrics}
cloc::cloc_pkg_md()
```

## Code of Conduct

Please note that the [34m'seymour'[39m project is released with a [Contributor Code of Conduct](CODE_OF_CONDUCT.md). By contributing to this project, you agree to abide by its terms.

## Image Credit

(c) Can Stock Photo / lineartestpilot