{"id":14067903,"url":"https://github.com/hrbrmstr/seymour","last_synced_at":"2025-10-29T01:30:45.286Z","repository":{"id":141238808,"uuid":"163406888","full_name":"hrbrmstr/seymour","owner":"hrbrmstr","description":"🧰 📰 Tools to Work with the 'Feedly' 'API'","archived":false,"fork":false,"pushed_at":"2020-01-22T10:01:18.000Z","size":17387,"stargazers_count":19,"open_issues_count":0,"forks_count":4,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-02-01T20:51:12.513Z","etag":null,"topics":["feedly","r","rss","rstats"],"latest_commit_sha":null,"homepage":"https://rud.is/b/2018/12/31/exploring-2018-r-bloggers-r-weekly-posts-with-feedly-the-seymour-package/","language":"R","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hrbrmstr.png","metadata":{"files":{"readme":"README.Rmd","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2018-12-28T12:14:39.000Z","updated_at":"2024-01-25T19:23:54.000Z","dependencies_parsed_at":"2024-02-19T19:16:44.882Z","dependency_job_id":"901280cf-cb05-4d66-bc2a-d8d945208e2b","html_url":"https://github.com/hrbrmstr/seymour","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hrbrmstr%2Fseymour","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hrbrmstr%2Fseymour/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hrbrmstr%2Fseymour/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hrbrmstr%2Fseymour/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hrbrmstr","download_url":"https://codeload.github.com/hrbrmstr/seymour/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":238752275,"owners_count":19524733,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["feedly","r","rss","rstats"],"created_at":"2024-08-13T07:05:50.273Z","updated_at":"2025-10-29T01:30:39.907Z","avatar_url":"https://github.com/hrbrmstr.png","language":"R","funding_links":[],"categories":["R"],"sub_categories":[],"readme":"---\noutput: rmarkdown::github_document\neditor_options: \n  chunk_output_type: console\n---\n```{r setup, include=FALSE}\nknitr::opts_chunk$set(message=FALSE, warning=FALSE)\noptions(width=120)\n```\n\n![](man/figures/venus-fly-trap.jpg)\n\n# seymour\n\nTools to Work with the 'Feedly' 'API'\n\n## Description\n\n'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.\n\n## What's Inside The Tin\n\nThe following API functions are implemented:\n\n- `feedly_access_token`:\tRetrieve the Feedly Developer Token\n- `feedly_collections`:\tRetrieve Feedly Connections\n- `feedly_categories`:  Show Feedly Categories\n- `feedly_entry`:  Get a single entry by id\n- `feedly_enterprise_profile`:\tRetrieve Your Feedly Enterprise Profile\n- `feedly_feed_meta`:\tRetrieve Metadata for a Feed\n- `feedly_opml`:\tRetrieve Your Feedly OPML File\n- `feedly_profile`:\tRetrieve Your Feedly Profile\n- `feedly_refresh_token`:\tGenerate a Feedly Refresh Token\n- `feedly_search_contents`:\tSearch content of a stream\n- `feedly_search_title`:\tFind feeds based on title, url or '#topic'\n- `feedly_stream`:\tRetrieve contents of a Feedly \"stream\"\n- `feedly_subscribe`:\tSubscribe to an RSS feed\n- `feedly_subscriptions`: Retrieve Feedly Subscriptions\n- `feedly_tags`:\tRetrieve List of Tags\n\nThe following helper functions are available:\n\n- `feedly_continue`: Helper function to iterate through a `feedly_stream()` result set\n- `render_stream`:  Render a Feedly Stream Data Frame to R Markdown\n\nThe following helper references are available:\n\n- `global_resource_ids`:\tGlobal Resource Ids Helper Reference\n\n## Authentication (README)\n\nYou need a developer token to access most of the API endpoints. You can do that via links provdied by (\u003chttps://developer.feedly.com/v3/auth/\u003e). There are no plans to support OAuth or token refreshing unless there is sufficient demand via Git[la|hu]b issues \u0026 issue votes.\n\n### NOT ALL ENDPOINTS REQUIRE AUTHENTICATION\n\nNeither `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`).\n\n## Installation\n\n```{r eval=FALSE}\ndevtools::install_github(\"hrbrmstr/seymour\")\n```\n\n```{r message=FALSE, warning=FALSE, error=FALSE, include=FALSE}\noptions(width=120)\n```\n\n## Usage\n\n```{r message=FALSE, warning=FALSE, error=FALSE}\nlibrary(seymour)\nlibrary(tidyverse) # mostly for printing\n\n# current verison\npackageVersion(\"seymour\")\n\n```\n\n### Collections\n\n```{r collections, cache=TRUE}\ncoll \u003c- feedly_collections()\n\nfilter(coll, title == \"R-bloggers\") %\u003e% \n  glimpse()\n```\n\n### Streams\n\n```{r streams, cache=TRUE}\nfeedly_stream(\n  stream_id = \"feed/http://feeds.feedburner.com/RBloggers\",\n) -\u003e rbloggers\n\nglimpse(rbloggers$items)\n\nrbloggers$items\n```\n\n### Feed Metadata\n\n```{r feed_metadata, cache=TRUE}\nfeedly_feed_meta(\"https://feeds.feedburner.com/rweeklylive\") %\u003e% \n  glimpse()\n```\n\n### OPML Retrieval\n\n```{r opml_retrieval, cache=TRUE}\nfeedly_opml(as = \"parsed\")\n```\n\n### Title Search\n\n```{r title_search, cache=TRUE}\nrst \u003c- feedly_search_title(\"data science\")\nglimpse(rst$results)\n```\n\n### Contents Search\n\n```{r contents_search, cache=TRUE}\nrsc \u003c- feedly_search_contents(\"data science\")\nglimpse(rsc$results)\n```\n\n### API Usage Rate Limit Info\n\n```{r rate_limit, cache=TRUE}\nfp \u003c- feedly_profile()\nfp[grepl(\"rate_limit\", names(fp))]\n```\n\n### Sample Stream Report\n\n```{r sample_stream_report, eval=FALSE}\nfp \u003c- feedly_profile() # get profile to get my id\n\n# use the id to get my \"security\" category feed\nfs \u003c- feedly_stream(sprintf(\"user/%s/category/security\", fp$id))\n\n# get the top 10 items with engagement \u003e= third quartile of all posts\n# and don't include duplicates in the report\nmutate(fs$items, published = as.Date(published)) %\u003e% \n  filter(published \u003e= as.Date(\"2018-12-01\")) %\u003e%\n  filter(engagement \u003e fivenum(engagement)[4]) %\u003e% \n  filter(!is.na(summary_content)) %\u003e% \n  mutate(alt_url = map_chr(alternate, ~.x[[1]])) %\u003e% \n  distinct(alt_url, .keep_all = TRUE) %\u003e% \n  slice(1:10) -\u003e for_report\n\n# render the report\nrender_stream(\n  feedly_stream = for_report, \n  title = \"Cybersecurity News\", \n  include_visual = TRUE,\n  browse = TRUE\n)\n```\n\nClick 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:\n\n\u003ccenter\u003e\u003ca href=\"sample-report.jpg\"\u003e\u003cimg src=\"report-thumb.png\"/\u003e\u003c/a\u003e\u003c/center\u003e\n\n## Package Code Metrics\n\n```{r pkg_metrics}\ncloc::cloc_pkg_md()\n```\n\n## Code of Conduct\n \nPlease 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.\n\n## Image Credit\n\u003c!-- HTML Credit Code for Can Stock Photo --\u003e\n\u003ca href=\"https://www.canstockphoto.com\"\u003e(c) Can Stock Photo / lineartestpilot\u003c/a\u003e","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhrbrmstr%2Fseymour","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhrbrmstr%2Fseymour","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhrbrmstr%2Fseymour/lists"}