

{"id":9442,"date":"2018-04-04T07:18:23","date_gmt":"2018-04-04T12:18:23","guid":{"rendered":"https:\/\/rud.is\/b\/?p=9442"},"modified":"2018-04-16T14:24:38","modified_gmt":"2018-04-16T19:24:38","slug":"exploring-r-bloggers-posts-with-the-feedly-api","status":"publish","type":"post","link":"https:\/\/rud.is\/b\/2018\/04\/04\/exploring-r-bloggers-posts-with-the-feedly-api\/","title":{"rendered":"Exploring R-Bloggers Posts with the Feedly API"},"content":{"rendered":"<p>There&#8217;s a <em>yuge<\/em> chance you&#8217;re reading this post (at least initially) on R-Bloggers right now (though you should also check out <a href=\"https:\/\/rweekly.org\/\">R Weekly<\/a> and add their live feed to your RSS reader pronto!). It&#8217;s a central &#8220;watering hole&#8221; for R folks and is read by many (IIRC over 20,000 Feedly users have it in their OPML).<\/p>\n<p>I&#8217;m <em>addicted<\/em> to <a href=\"https:\/\/feedly.com\">Feedly<\/a> and waited <em>years<\/em> for them to publish their API. <a href=\"https:\/\/developer.feedly.com\/\">They have<\/a> and there will eventually be a package for it (go for it if you want to get&#8217;er done before me since I won&#8217;t have time to do it justice for a while). As just parenthetically noted, I&#8217;ve started work on one and have scaffolded <em>just enough<\/em> to give R folks a present: almost 5 years of R-Bloggers data \u2014 posts, engagement rates, authors, etc). <em>But<\/em>, you&#8217;ll have to put up with some expository, first.<\/p>\n<h3>Digging In<\/h3>\n<p>We&#8217;ll need some packages to help this expository and extraction. Plus, you&#8217;ll need to go to <a href=\"https:\/\/developer.feedly.com\/\">https:\/\/developer.feedly.com\/<\/a> to get your developer token (NOTE: this requires a &#8220;Pro&#8221; account <em>or<\/em> a regular account and you manually doing the OAuth dance to get an access token; any final &#8220;Feedly package&#8221; by myself or others will likely use OAuth) and store it in your <code>~\/.Renviron<\/code> in <code>FEEDLY_ACCESS_TOKEN<\/code>.<\/p>\n<p>I&#8217;ve sliced and diced bits from the (non-published) fledgling package to give a peek behind the API covers. There&#8217;s <em>plenty<\/em> of exposition in the following code block comment header to describe what it does:<\/p>\n<pre id=\"rbfeed01\"><code class=\"language-r\">#&#039; Simplifying some example package setup for this non-pkg example\r\n.pkgenv &lt;- new.env(parent=emptyenv())\r\n.pkgenv$token &lt;- Sys.getenv(&quot;FEEDLY_ACCESS_TOKEN&quot;)\r\n\r\n#&#039; In reality, this is more complex since the non-toy example has to\r\n#&#039; refresh tokens when they expire.\r\n.feedly_token &lt;- function() {\r\n  return(.pkgenv$token)\r\n}\r\n\r\n#&#039; Get a chunk of a Feedly &quot;stream&quot;\r\n#&#039;\r\n#&#039; For the purposes of this short example, consider a\r\n#&#039; &quot;stream&quot; to be all the historical items in a feed.\r\n#&#039; (Note: the definition is more complex than that)\r\n#&#039;\r\n#&#039; Max &quot;page size&quot; (mad numbner of items returned in a single call)\r\n#&#039; is 1,000. For example simplicity, there&#039;s a blanket assumption\r\n#&#039; that if `continuation` is actually present, the caller is\r\n#&#039; savvy and asked for a large number of items (e.g. 10,000).\r\n#&#039; Therefore, assume we&#039;re paging by the thousands.\r\n#&#039;\r\n#&#039; @md\r\n#&#039; @param feed_id the id of the stream (for this examplea feed id)\r\n#&#039; @param ct numnber of items to retrieve (API will only return 1,000\r\n#&#039;        items for a single response and populate `continuation`\r\n#&#039;        with a value that should be passed to subsequent calls\r\n#&#039;        to page through the results; `ct` will be reset to 1,000\r\n#&#039;        internally if this is the case)\r\n#&#039; @param continuation see `ct`\r\n#&#039; @references &lt;https:\/\/developer.feedly.com\/v3\/streams\/&gt;\r\n#&#039; @return for this example, an ugly `list`\r\nfeedly_stream &lt;- function(stream_id, ct=100L, continuation=NULL) {\r\n\r\n  ct &lt;- as.integer(ct)\r\n\r\n  if (!is.null(continuation)) ct &lt;- 1000L\r\n\r\n  httr::GET(\r\n    url = &quot;https:\/\/cloud.feedly.com\/v3\/streams\/contents&quot;,\r\n    httr::add_headers(\r\n      `Authorization` = sprintf(&quot;OAuth %s&quot;, .feedly_token())\r\n    ),\r\n    query = list(\r\n      streamId = stream_id,\r\n      count = ct,\r\n      continuation = continuation\r\n    )\r\n  ) -&gt; res\r\n\r\n  httr::stop_for_status(res)\r\n\r\n  res &lt;- httr::content(res, as=&quot;text&quot;)\r\n  res &lt;- jsonlite::fromJSON(res)\r\n\r\n  res\r\n\r\n}<\/code><\/pre>\n<p>We&#8217;ll grab 10,000 Feedly entries for the R-Bloggers feed stream:<\/p>\n<pre id=\"rbfeed02\"><code class=\"language-r\">r_bloggers_feed_id &lt;- &quot;feed\/http:\/\/feeds.feedburner.com\/RBloggers&quot;\r\n\r\nrb_stream &lt;- feedly_stream(r_bloggers_feed_id, 10000L)\r\n\r\n# preallocate space\r\nstreams &lt;- vector(&quot;list&quot;, 10)\r\nstreams[1L] &lt;- list(rb_stream)\r\n\r\n# gotta catch&#039;em all!\r\nidx &lt;- 2L\r\nwhile(length(rb_stream$continuation) &gt; 0) {\r\n  cat(&quot;.&quot;, sep=&quot;&quot;) # poor dude&#039;s progress par\r\n  feedly_stream(\r\n    stream_id = r_bloggers_feed_id,\r\n    ct = 1000L,\r\n    continuation = rb_stream$continuation\r\n  ) -&gt; rb_stream\r\n  streams[idx] &lt;- list(rb_stream)\r\n  idx &lt;- idx + 1L\r\n}\r\ncat(&quot;\\n&quot;)<\/code><\/pre>\n<p>For those who aren&#8217;t used to piecing together bits from API&#8217;s like this (and for those who do not have a Pro account, those who didn&#8217;t want to write OAuth code or those who don&#8217;t use Feedly and cannot reproduce the post example), here&#8217;s some dissection:<\/p>\n<pre id=\"rbfeed03\"><code class=\"language-r\">str(streams, 1)\r\n## List of 12\r\n##  $ :List of 7\r\n##  $ :List of 7\r\n##  $ :List of 7\r\n##  $ :List of 7\r\n##  $ :List of 7\r\n##  $ :List of 7\r\n##  $ :List of 7\r\n##  $ :List of 7\r\n##  $ :List of 7\r\n##  $ :List of 7\r\n##  $ :List of 7\r\n##  $ :List of 6 # No &quot;continuation&quot; in this one\r\n\r\nstr(streams[[1]], 1)\r\n## List of 7\r\n##  $ id          : chr &quot;feed\/http:\/\/feeds.feedburner.com\/RBloggers&quot;\r\n##  $ title       : chr &quot;R-bloggers&quot;\r\n##  $ direction   : chr &quot;ltr&quot;\r\n##  $ updated     : num 1.52e+12\r\n##  $ alternate   :&#039;data.frame&#039;:\t1 obs. of  2 variables:\r\n##  $ continuation: chr &quot;15f457e2b66:160d6e:8cbd7d4f&quot;\r\n##  $ items       :&#039;data.frame&#039;:\t1000 obs. of  22 variables:\r\n\r\nglimpse(streams[[1]]$items)\r\n## Observations: 1,000\r\n## Variables: 22\r\n## $ id             &lt;chr&gt; &quot;XGq6cYRY3hH9\/vdZr0WOJiPdAe0u6dQ2ddUFEsTqP10=_1628f55fc26:7feb...\r\n## $ keywords       &lt;list&gt; [&quot;R bloggers&quot;, &quot;R bloggers&quot;, &quot;R bloggers&quot;, &quot;R bloggers&quot;, &quot;R b...\r\n## $ originId       &lt;chr&gt; &quot;https:\/\/tjmahr.github.io\/ridgelines-in-bayesplot-1-5-0-releas...\r\n## $ fingerprint    &lt;chr&gt; &quot;f96c93f7&quot;, &quot;9b2344db&quot;, &quot;ca3762c8&quot;, &quot;980635d0&quot;, &quot;fbd60fac&quot;, &quot;6...\r\n## $ content        &lt;data.frame&gt; c(&quot;&lt;p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div data-show-faces=\\&quot;false\\&quot; dat...\r\n## $ title          &lt;chr&gt; &quot;Ridgelines in bayesplot 1.5.0&quot;, &quot;Mathematical art in R&quot;, &quot;R a...\r\n## $ published      &lt;dbl&gt; 1.522732e+12, 1.522796e+12, 1.522714e+12, 1.522714e+12, 1.5227...\r\n## $ crawled        &lt;dbl&gt; 1.522823e+12, 1.522809e+12, 1.522794e+12, 1.522793e+12, 1.5227...\r\n## $ canonical      &lt;list&gt; [&lt;https:\/\/www.r-bloggers.com\/ridgelines-in-bayesplot-1-5-0\/, ...\r\n## $ origin         &lt;data.frame&gt; c(&quot;feed\/http:\/\/feeds.feedburner.com\/RBloggers&quot;, &quot;feed\/h...\r\n## $ author         &lt;chr&gt; &quot;Higher Order Functions&quot;, &quot;David Smith&quot;, &quot;R Views&quot;, &quot;rOpenSci ...\r\n## $ alternate      &lt;list&gt; [&lt;http:\/\/feedproxy.google.com\/~r\/RBloggers\/~3\/O5DIWloFJO8\/, t...\r\n## $ summary        &lt;data.frame&gt; c(&quot;At the end of March, Jonah Gabry and I released\\nbay...\r\n## $ visual         &lt;data.frame&gt; c(&quot;feedly-nikon-v3.1&quot;, &quot;feedly-nikon-v3.1&quot;, &quot;feedly-nik...\r\n## $ unread         &lt;lgl&gt; TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, F...\r\n## $ categories     &lt;list&gt; [&lt;user\/c45e5b02-5a96-464c-bf77-4eea75409c3d\/category\/big data...\r\n## $ engagement     &lt;int&gt; 9, 37, 52, 15, 78, 35, 31, 9, 28, 2, 21, 8, 25, 11, 21, 29, 12...\r\n## $ engagementRate &lt;dbl&gt; 0.41, 1.37, 1.58, 0.45, 2.23, 0.97, 0.84, 0.23, 0.72, 0.05, 0....\r\n## $ recrawled      &lt;dbl&gt; NA, NA, NA, NA, NA, NA, NA, NA, 1.522807e+12, NA, NA, NA, NA, ...\r\n## $ tags           &lt;list&gt; [NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, ...\r\n## $ decorations    &lt;data.frame&gt; c(&quot;NA&quot;, &quot;NA&quot;, &quot;NA&quot;, &quot;NA&quot;, &quot;NA&quot;, &quot;NA&quot;, &quot;NA&quot;, &quot;NA&quot;, &quot;NA&quot;,...\r\n## $ enclosure      &lt;list&gt; [NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, ...<\/code><\/pre>\n<p>That <code>entries<\/code> structure is defined <a href=\"https:\/\/developer.feedly.com\/v3\/entries\/\">in the Feedly API docs<\/a>.<\/p>\n<p>We&#8217;ll extract the bits we want to use for the rest of the post and clean it up a bit:<\/p>\n<pre id=\"rbfeed04\"><code class=\"language-r\">map_df(streams, ~{\r\n  select(.x$items, title, author, published, engagement) %&gt;%\r\n    mutate(published = anytime::anydate(published \/ 1000)) %&gt;% # overly-high-resolution timestamp\r\n    tbl_df()\r\n}) -&gt; xdf\r\n\r\nglimpse(xdf)\r\n## Observations: 11,421\r\n## Variables: 4\r\n## $ title      &lt;chr&gt; &quot;Ridgelines in bayesplot 1.5.0&quot;, &quot;Mathematical art in R&quot;, &quot;R and T...\r\n## $ author     &lt;chr&gt; &quot;Higher Order Functions&quot;, &quot;David Smith&quot;, &quot;R Views&quot;, &quot;rOpenSci - op...\r\n## $ published  &lt;date&gt; 2018-04-03, 2018-04-03, 2018-04-02, 2018-04-02, 2018-04-03, 2018-...\r\n## $ engagement &lt;int&gt; 9, 37, 52, 15, 78, 35, 31, 9, 28, 2, 21, 8, 25, 11, 21, 29, 12, 11...<\/code><\/pre>\n<p>Using an arbitrary &#8220;10,000&#8221; extract didn&#8217;t give us full months:<\/p>\n<pre id=\"rbfeed05\"><code class=\"language-r\">range(xdf$published)\r\n## [1] &quot;2013-05-31&quot; &quot;2018-04-03&quot;<\/code><\/pre>\n<p>so we&#8217;ll filter out the incomplete bits and add in some additional temporal metadata:<\/p>\n<pre id=\"rbfeed06\"><code class=\"language-r\">xdf %&gt;%\r\n  filter(\r\n    published &gt; as.Date(&quot;2013-05-31&quot;),  # complete months\r\n    published &lt; as.Date(&quot;2018-04-01&quot;)\r\n  ) %&gt;%\r\n  mutate(\r\n    year = as.integer(lubridate::year(published)),\r\n    month = lubridate::month(published, label=TRUE, abbr=TRUE),\r\n    wday = lubridate::wday(published, label=TRUE, abbr=TRUE),\r\n    ym = as.Date(format(published, &quot;%Y-%m-01&quot;))\r\n  ) -&gt; xdf<\/code><\/pre>\n<p>I&#8217;m only going to do some light analysis work with <code>engagement<\/code> data (how &#8220;popular&#8221; a post was) but the <em>full post summary and body content<\/em> is available in the data dump you&#8217;re going to get at the end (this is reminding me of the Sesame Street &#8220;<a href=\"https:\/\/en.wikipedia.org\/wiki\/The_Monster_at_the_End_of_This_Book%3A_Starring_Lovable%2C_Furry_Old_Grover\">Monster at the End of This Book<\/a>&#8221; story). That means enterprising folk can do some <a href=\"https:\/\/www.tidytextmining.com\/\">tidy text mining<\/a> to cluster away some additional insights.<\/p>\n<p>Thankfully, there&#8217;s not a ton of missing <code>engagement<\/code> data:<\/p>\n<pre id=\"rbfeed07\"><code class=\"language-r\">sum(is.na(xdf$engagement)) \/ nrow(xdf)\r\n## [1] 0.06506849\r\n\r\nbroom::tidy((summary(xdf$engagement)))\r\n##   minimum q1 median     mean q3 maximum  na\r\n## 1       0  5     20 69.27219 75    4785 741<\/code><\/pre>\n<p>Let&#8217;s look at post count over time, first:<\/p>\n<pre id=\"rbfeed08\"><code class=\"language-r\">count(xdf, ym) %&gt;%\r\n  arrange(ym) %&gt;%\r\n  ggplot(aes(ym, n)) +\r\n  ggforce::geom_bspline0(color=&quot;lightslategray&quot;) +\r\n  scale_x_date(expand=c(0,0.5)) +\r\n  labs(\r\n    x=NULL, y=&quot;Post count&quot;,\r\n    title=&quot;R-Bloggers Post Count&quot;,\r\n    subtitle=&quot;June 2013 \u2014 March 2018&quot;\r\n  ) +\r\n  theme_ipsum_ps(grid=&quot;XY&quot;)<\/code><\/pre>\n<p><a href=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2018\/04\/rb-post-count.png?ssl=1\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"9459\" data-permalink=\"https:\/\/rud.is\/b\/2018\/04\/04\/exploring-r-bloggers-posts-with-the-feedly-api\/rb-post-count\/\" data-orig-file=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2018\/04\/rb-post-count.png?fit=1896%2C898&amp;ssl=1\" data-orig-size=\"1896,898\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"rb-post-count\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2018\/04\/rb-post-count.png?fit=300%2C142&amp;ssl=1\" data-large-file=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2018\/04\/rb-post-count.png?fit=510%2C242&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2018\/04\/rb-post-count.png?resize=510%2C242&#038;ssl=1\" alt=\"\" width=\"510\" height=\"242\" class=\"aligncenter size-full wp-image-9459\" \/><\/a><\/p>\n<p>It&#8217;ll be interesting to watch that over this year and compare 2017 to 2018 given how &#8220;hot&#8221; 2017 seems to have been. To turn a Mythbuster phrase: a neat &#8220;try this at home&#8221; exercise would be to tease out some &#8220;whys&#8221; for various spikes (which likely means some post content spelunking).<\/p>\n<p>Let&#8217;s see if any days are more popular than others:<\/p>\n<pre id=\"rbfeed09\"><code class=\"language-r\">count(xdf, wday) %&gt;%\r\n  ggplot(aes(wday, n)) +\r\n  geom_col(fill=&quot;lightslategray&quot;, width=0.65) +\r\n  scale_y_comma() +\r\n  labs(\r\n    x=NULL, y=&quot;Post count&quot;,\r\n    title=&quot;R-Bloggers Aggregate Post Count By Day of Week&quot;\r\n  ) +\r\n  theme_ipsum_ps(grid=&quot;Y&quot;)<\/code><\/pre>\n<p><a href=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2018\/04\/rb-post-count-dow.png?ssl=1\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"9458\" data-permalink=\"https:\/\/rud.is\/b\/2018\/04\/04\/exploring-r-bloggers-posts-with-the-feedly-api\/rb-post-count-dow\/\" data-orig-file=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2018\/04\/rb-post-count-dow.png?fit=1896%2C898&amp;ssl=1\" data-orig-size=\"1896,898\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"rb-post-count-dow\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2018\/04\/rb-post-count-dow.png?fit=300%2C142&amp;ssl=1\" data-large-file=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2018\/04\/rb-post-count-dow.png?fit=510%2C242&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2018\/04\/rb-post-count-dow.png?resize=510%2C242&#038;ssl=1\" alt=\"\" width=\"510\" height=\"242\" class=\"aligncenter size-full wp-image-9458\" \/><\/a><\/p>\n<p>Weekends are sleepy and there are some &#8220;go-getters&#8221; at the beginning of the week. More &#8220;try this at home&#8221; would be to see if any individuals have &#8220;patterns&#8221; by day of week (or even time of day, since that&#8217;s also available in the published time stamp).<\/p>\n<p>The <code>summary()<\/code> above told us we have a pretty skewed <code>engagement<\/code> distribution, but it&#8217;s always nice to visualise just how bad it is:<\/p>\n<pre id=\"rbfeed10\"><code class=\"language-r\">ggplot(xdf, aes(engagement)) +\r\n  geom_density(aes(y=calc(count)), fill=&quot;lightslategray&quot;, alpha=2\/3) +\r\n  scale_x_comma() +\r\n  scale_y_comma() +\r\n  labs(\r\n    x=NULL, y=&quot;Engagement&quot;,\r\n    title = &quot;R-Bloggers Post Engagement Distribution&quot;,\r\n    subtitle = &quot;June 2013 \u2014 March 2018&quot;\r\n  ) +\r\n  theme_ipsum_ps(grid=&quot;XY&quot;)<\/code><\/pre>\n<p><a href=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2018\/04\/rb-engagement.png?ssl=1\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"9457\" data-permalink=\"https:\/\/rud.is\/b\/2018\/04\/04\/exploring-r-bloggers-posts-with-the-feedly-api\/rb-engagement\/\" data-orig-file=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2018\/04\/rb-engagement.png?fit=1896%2C898&amp;ssl=1\" data-orig-size=\"1896,898\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"rb-engagement\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2018\/04\/rb-engagement.png?fit=300%2C142&amp;ssl=1\" data-large-file=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2018\/04\/rb-engagement.png?fit=510%2C242&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2018\/04\/rb-engagement.png?resize=510%2C242&#038;ssl=1\" alt=\"\" width=\"510\" height=\"242\" class=\"aligncenter size-full wp-image-9457\" \/><\/a><\/p>\n<p>That graph is the story of my daily life dealing with internet data. Couldn&#8217;t even get a break when trying to have some fun. #sigh<\/p>\n<p>We&#8217;ll close with the &#8220;all time top 10&#8221; based on total engagement:<\/p>\n<pre id=\"rbfeed11\"><code class=\"language-r\">count(xdf, author, wt=engagement, sort=TRUE)\r\n## # A tibble: 1,065 x 2\r\n##    author               n\r\n##  1 David Smith      87381\r\n##  2 Tal Galili       29302\r\n##  3 Joseph Rickert   16846\r\n##  4 DataCamp Blog    14402\r\n##  5 DataCamp         14208\r\n##  6 John Mount       13274\r\n##  7 Francis Smart     8506\r\n##  8 hadleywickham     8129\r\n##  9 hrbrmstr          7855\r\n## 10 Sharp Sight Labs  7620\r\n## # ... with 1,055 more rows<\/code><\/pre>\n<p>@revodavid is a blogging <em>machine<\/em>, and that top-spot is well-deserved given the plethora of interesting, useful and fun content he shares. And, it looks like <em>someone<\/em> only needs to blog a <em>bit more<\/em> this year to overtake @hadley (<em>I&#8217;m comin&#8217; fer ya, Hadley!<\/em>).<\/p>\n<h3>FIN<\/h3>\n<p>As promised, you can get the data in a ~30MB RDS file via <a href=\"https:\/\/rud.is\/dl\/r-bloggers-feedly-streams.rds\">https:\/\/rud.is\/dl\/r-bloggers-feedly-streams.rds<\/a> and can then use the extraction-to-data-frame example from above to work with the bits you care about.<\/p>\n<p>Hopefully folks will have some fun with this and share their results!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>There&#8217;s a yuge chance you&#8217;re reading this post (at least initially) on R-Bloggers right now (though you should also check out R Weekly and add their live feed to your RSS reader pronto!). It&#8217;s a central &#8220;watering hole&#8221; for R folks and is read by many (IIRC over 20,000 Feedly users have it in their [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":9459,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"activitypub_content_warning":"","activitypub_content_visibility":"","activitypub_max_image_attachments":3,"activitypub_interaction_policy_quote":"anyone","activitypub_status":"","footnotes":""},"categories":[91],"tags":[815],"class_list":["post-9442","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-r","tag-feedly"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Exploring R-Bloggers Posts with the Feedly API - rud.is<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/rud.is\/b\/2018\/04\/04\/exploring-r-bloggers-posts-with-the-feedly-api\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Exploring R-Bloggers Posts with the Feedly API - rud.is\" \/>\n<meta property=\"og:description\" content=\"There&#8217;s a yuge chance you&#8217;re reading this post (at least initially) on R-Bloggers right now (though you should also check out R Weekly and add their live feed to your RSS reader pronto!). It&#8217;s a central &#8220;watering hole&#8221; for R folks and is read by many (IIRC over 20,000 Feedly users have it in their [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/rud.is\/b\/2018\/04\/04\/exploring-r-bloggers-posts-with-the-feedly-api\/\" \/>\n<meta property=\"og:site_name\" content=\"rud.is\" \/>\n<meta property=\"article:published_time\" content=\"2018-04-04T12:18:23+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2018-04-16T19:24:38+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2018\/04\/rb-post-count.png?fit=1896%2C898&ssl=1\" \/>\n\t<meta property=\"og:image:width\" content=\"1896\" \/>\n\t<meta property=\"og:image:height\" content=\"898\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"hrbrmstr\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"hrbrmstr\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/rud.is\/b\/2018\/04\/04\/exploring-r-bloggers-posts-with-the-feedly-api\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/rud.is\/b\/2018\/04\/04\/exploring-r-bloggers-posts-with-the-feedly-api\/\"},\"author\":{\"name\":\"hrbrmstr\",\"@id\":\"https:\/\/rud.is\/b\/#\/schema\/person\/d7cb7487ab0527447f7fda5c423ff886\"},\"headline\":\"Exploring R-Bloggers Posts with the Feedly API\",\"datePublished\":\"2018-04-04T12:18:23+00:00\",\"dateModified\":\"2018-04-16T19:24:38+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/rud.is\/b\/2018\/04\/04\/exploring-r-bloggers-posts-with-the-feedly-api\/\"},\"wordCount\":782,\"commentCount\":18,\"publisher\":{\"@id\":\"https:\/\/rud.is\/b\/#\/schema\/person\/d7cb7487ab0527447f7fda5c423ff886\"},\"image\":{\"@id\":\"https:\/\/rud.is\/b\/2018\/04\/04\/exploring-r-bloggers-posts-with-the-feedly-api\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2018\/04\/rb-post-count.png?fit=1896%2C898&ssl=1\",\"keywords\":[\"feedly\"],\"articleSection\":[\"R\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/rud.is\/b\/2018\/04\/04\/exploring-r-bloggers-posts-with-the-feedly-api\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/rud.is\/b\/2018\/04\/04\/exploring-r-bloggers-posts-with-the-feedly-api\/\",\"url\":\"https:\/\/rud.is\/b\/2018\/04\/04\/exploring-r-bloggers-posts-with-the-feedly-api\/\",\"name\":\"Exploring R-Bloggers Posts with the Feedly API - rud.is\",\"isPartOf\":{\"@id\":\"https:\/\/rud.is\/b\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/rud.is\/b\/2018\/04\/04\/exploring-r-bloggers-posts-with-the-feedly-api\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/rud.is\/b\/2018\/04\/04\/exploring-r-bloggers-posts-with-the-feedly-api\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2018\/04\/rb-post-count.png?fit=1896%2C898&ssl=1\",\"datePublished\":\"2018-04-04T12:18:23+00:00\",\"dateModified\":\"2018-04-16T19:24:38+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/rud.is\/b\/2018\/04\/04\/exploring-r-bloggers-posts-with-the-feedly-api\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/rud.is\/b\/2018\/04\/04\/exploring-r-bloggers-posts-with-the-feedly-api\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/rud.is\/b\/2018\/04\/04\/exploring-r-bloggers-posts-with-the-feedly-api\/#primaryimage\",\"url\":\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2018\/04\/rb-post-count.png?fit=1896%2C898&ssl=1\",\"contentUrl\":\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2018\/04\/rb-post-count.png?fit=1896%2C898&ssl=1\",\"width\":\"1896\",\"height\":\"898\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/rud.is\/b\/2018\/04\/04\/exploring-r-bloggers-posts-with-the-feedly-api\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/rud.is\/b\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Exploring R-Bloggers Posts with the Feedly API\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/rud.is\/b\/#website\",\"url\":\"https:\/\/rud.is\/b\/\",\"name\":\"rud.is\",\"description\":\"&quot;In God we trust. All others must bring data&quot;\",\"publisher\":{\"@id\":\"https:\/\/rud.is\/b\/#\/schema\/person\/d7cb7487ab0527447f7fda5c423ff886\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/rud.is\/b\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/rud.is\/b\/#\/schema\/person\/d7cb7487ab0527447f7fda5c423ff886\",\"name\":\"hrbrmstr\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2023\/10\/ukr-shield.png?fit=460%2C460&ssl=1\",\"url\":\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2023\/10\/ukr-shield.png?fit=460%2C460&ssl=1\",\"contentUrl\":\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2023\/10\/ukr-shield.png?fit=460%2C460&ssl=1\",\"width\":460,\"height\":460,\"caption\":\"hrbrmstr\"},\"logo\":{\"@id\":\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2023\/10\/ukr-shield.png?fit=460%2C460&ssl=1\"},\"description\":\"Don't look at me\u2026I do what he does \u2014 just slower. #rstats avuncular \u2022 ?Resistance Fighter \u2022 Cook \u2022 Christian \u2022 [Master] Chef des Donn\u00e9es de S\u00e9curit\u00e9 @ @rapid7\",\"sameAs\":[\"http:\/\/rud.is\"],\"url\":\"https:\/\/rud.is\/b\/author\/hrbrmstr\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Exploring R-Bloggers Posts with the Feedly API - rud.is","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/rud.is\/b\/2018\/04\/04\/exploring-r-bloggers-posts-with-the-feedly-api\/","og_locale":"en_US","og_type":"article","og_title":"Exploring R-Bloggers Posts with the Feedly API - rud.is","og_description":"There&#8217;s a yuge chance you&#8217;re reading this post (at least initially) on R-Bloggers right now (though you should also check out R Weekly and add their live feed to your RSS reader pronto!). It&#8217;s a central &#8220;watering hole&#8221; for R folks and is read by many (IIRC over 20,000 Feedly users have it in their [&hellip;]","og_url":"https:\/\/rud.is\/b\/2018\/04\/04\/exploring-r-bloggers-posts-with-the-feedly-api\/","og_site_name":"rud.is","article_published_time":"2018-04-04T12:18:23+00:00","article_modified_time":"2018-04-16T19:24:38+00:00","og_image":[{"width":1896,"height":898,"url":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2018\/04\/rb-post-count.png?fit=1896%2C898&ssl=1","type":"image\/png"}],"author":"hrbrmstr","twitter_card":"summary_large_image","twitter_misc":{"Written by":"hrbrmstr","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/rud.is\/b\/2018\/04\/04\/exploring-r-bloggers-posts-with-the-feedly-api\/#article","isPartOf":{"@id":"https:\/\/rud.is\/b\/2018\/04\/04\/exploring-r-bloggers-posts-with-the-feedly-api\/"},"author":{"name":"hrbrmstr","@id":"https:\/\/rud.is\/b\/#\/schema\/person\/d7cb7487ab0527447f7fda5c423ff886"},"headline":"Exploring R-Bloggers Posts with the Feedly API","datePublished":"2018-04-04T12:18:23+00:00","dateModified":"2018-04-16T19:24:38+00:00","mainEntityOfPage":{"@id":"https:\/\/rud.is\/b\/2018\/04\/04\/exploring-r-bloggers-posts-with-the-feedly-api\/"},"wordCount":782,"commentCount":18,"publisher":{"@id":"https:\/\/rud.is\/b\/#\/schema\/person\/d7cb7487ab0527447f7fda5c423ff886"},"image":{"@id":"https:\/\/rud.is\/b\/2018\/04\/04\/exploring-r-bloggers-posts-with-the-feedly-api\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2018\/04\/rb-post-count.png?fit=1896%2C898&ssl=1","keywords":["feedly"],"articleSection":["R"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/rud.is\/b\/2018\/04\/04\/exploring-r-bloggers-posts-with-the-feedly-api\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/rud.is\/b\/2018\/04\/04\/exploring-r-bloggers-posts-with-the-feedly-api\/","url":"https:\/\/rud.is\/b\/2018\/04\/04\/exploring-r-bloggers-posts-with-the-feedly-api\/","name":"Exploring R-Bloggers Posts with the Feedly API - rud.is","isPartOf":{"@id":"https:\/\/rud.is\/b\/#website"},"primaryImageOfPage":{"@id":"https:\/\/rud.is\/b\/2018\/04\/04\/exploring-r-bloggers-posts-with-the-feedly-api\/#primaryimage"},"image":{"@id":"https:\/\/rud.is\/b\/2018\/04\/04\/exploring-r-bloggers-posts-with-the-feedly-api\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2018\/04\/rb-post-count.png?fit=1896%2C898&ssl=1","datePublished":"2018-04-04T12:18:23+00:00","dateModified":"2018-04-16T19:24:38+00:00","breadcrumb":{"@id":"https:\/\/rud.is\/b\/2018\/04\/04\/exploring-r-bloggers-posts-with-the-feedly-api\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/rud.is\/b\/2018\/04\/04\/exploring-r-bloggers-posts-with-the-feedly-api\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/rud.is\/b\/2018\/04\/04\/exploring-r-bloggers-posts-with-the-feedly-api\/#primaryimage","url":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2018\/04\/rb-post-count.png?fit=1896%2C898&ssl=1","contentUrl":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2018\/04\/rb-post-count.png?fit=1896%2C898&ssl=1","width":"1896","height":"898"},{"@type":"BreadcrumbList","@id":"https:\/\/rud.is\/b\/2018\/04\/04\/exploring-r-bloggers-posts-with-the-feedly-api\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/rud.is\/b\/"},{"@type":"ListItem","position":2,"name":"Exploring R-Bloggers Posts with the Feedly API"}]},{"@type":"WebSite","@id":"https:\/\/rud.is\/b\/#website","url":"https:\/\/rud.is\/b\/","name":"rud.is","description":"&quot;In God we trust. All others must bring data&quot;","publisher":{"@id":"https:\/\/rud.is\/b\/#\/schema\/person\/d7cb7487ab0527447f7fda5c423ff886"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/rud.is\/b\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/rud.is\/b\/#\/schema\/person\/d7cb7487ab0527447f7fda5c423ff886","name":"hrbrmstr","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2023\/10\/ukr-shield.png?fit=460%2C460&ssl=1","url":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2023\/10\/ukr-shield.png?fit=460%2C460&ssl=1","contentUrl":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2023\/10\/ukr-shield.png?fit=460%2C460&ssl=1","width":460,"height":460,"caption":"hrbrmstr"},"logo":{"@id":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2023\/10\/ukr-shield.png?fit=460%2C460&ssl=1"},"description":"Don't look at me\u2026I do what he does \u2014 just slower. #rstats avuncular \u2022 ?Resistance Fighter \u2022 Cook \u2022 Christian \u2022 [Master] Chef des Donn\u00e9es de S\u00e9curit\u00e9 @ @rapid7","sameAs":["http:\/\/rud.is"],"url":"https:\/\/rud.is\/b\/author\/hrbrmstr\/"}]}},"jetpack_featured_media_url":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2018\/04\/rb-post-count.png?fit=1896%2C898&ssl=1","jetpack_shortlink":"https:\/\/wp.me\/p23idr-2si","jetpack_likes_enabled":true,"jetpack-related-posts":[{"id":7359,"url":"https:\/\/rud.is\/b\/2017\/12\/01\/a-public-apology-to-tal-r-bloggers-the-trouble-with-tibbles\/","url_meta":{"origin":9442,"position":0},"title":"A Public Apology to Tal\/R-Bloggers + The Trouble With Tibbles","author":"hrbrmstr","date":"2017-12-01","format":false,"excerpt":"Over the past few weeks, I had been noticing that some posts in the R-bloggers feed were getting truncated in Feedly. I don't remember when I noticed that since I usually click through immediately from the headline entry to the R-bloggers page vs read in Feedly since ultimately I want\u2026","rel":"","context":"In &quot;R&quot;","block_context":{"text":"R","link":"https:\/\/rud.is\/b\/category\/r\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":10104,"url":"https:\/\/rud.is\/b\/2018\/04\/18\/access-your-saved-for-later-feedly-items-by-hooking-up-dropbox-to-feedly\/","url_meta":{"origin":9442,"position":1},"title":"Access Your &#8220;Saved for Later&#8221; Feedly Items By Hooking Up Dropbox to Feedly","author":"hrbrmstr","date":"2018-04-18","format":false,"excerpt":"If you come here often you've noticed that I've been writing a semi-frequent series on using the Feedly API with R. A recent post was created to help someone use the API. It worked for them but \u2014 as you can see in the comment \u2014 an assertion was made\u2026","rel":"","context":"In &quot;data wrangling&quot;","block_context":{"text":"data wrangling","link":"https:\/\/rud.is\/b\/category\/data-wrangling\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":11694,"url":"https:\/\/rud.is\/b\/2018\/12\/31\/exploring-2018-r-bloggers-r-weekly-posts-with-feedly-the-seymour-package\/","url_meta":{"origin":9442,"position":2},"title":"Exploring 2018 R-bloggers &#038; R Weekly Posts with Feedly &#038; the &#8216;seymour&#8217; package","author":"hrbrmstr","date":"2018-12-31","format":false,"excerpt":"Well, 2018 has flown by and today seems like an appropriate time to take a look at the landscape of R bloggerdom as seen through the eyes of readers of R-bloggers and R Weekly. We'll do this via a new package designed to make it easier to treat Feedly as\u2026","rel":"","context":"In &quot;Feedly&quot;","block_context":{"text":"Feedly","link":"https:\/\/rud.is\/b\/category\/feedly\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2018\/12\/author-month-1.png?fit=960%2C864&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2018\/12\/author-month-1.png?fit=960%2C864&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2018\/12\/author-month-1.png?fit=960%2C864&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2018\/12\/author-month-1.png?fit=960%2C864&ssl=1&resize=700%2C400 2x"},"classes":[]},{"id":10100,"url":"https:\/\/rud.is\/b\/2018\/04\/16\/by-request-retrieving-your-feedly-saved-for-later-entries\/","url_meta":{"origin":9442,"position":3},"title":"By Request: Retrieving Your Feedly &#8220;Saved for Later&#8221; Entries","author":"hrbrmstr","date":"2018-04-16","format":false,"excerpt":"@mkjcktzn asked if one can access Feedly \"Saved for Later\" items via the API. The answer is \"Yes!\", and it builds off of that previous post. You'll need to read it and get your authentication key (still no package ?) before continuing. We'll use most (I think \"all\") of the\u2026","rel":"","context":"In &quot;R&quot;","block_context":{"text":"R","link":"https:\/\/rud.is\/b\/category\/r\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":11837,"url":"https:\/\/rud.is\/b\/2019\/01\/30\/quick-hit-using-seymour-to-subscribe-to-your-gitlahub-repo-issues-in-feedly\/","url_meta":{"origin":9442,"position":4},"title":"Quick Hit: Using seymour to Subscribe to your Git[la|hu]b Repo Issues in Feedly","author":"hrbrmstr","date":"2019-01-30","format":false,"excerpt":"The seymour? Feedly API package has been updated to support subscribing to RSS\/Atom feeds. Previously the package was intended to just treat your Feedly as a data source, but there was a compelling use case for enabling subscription support: subscribing to code repository issues. Sure, there's already email notice integration\u2026","rel":"","context":"In &quot;R&quot;","block_context":{"text":"R","link":"https:\/\/rud.is\/b\/category\/r\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":13066,"url":"https:\/\/rud.is\/b\/2021\/05\/09\/feedly-mini-extension-removed-from-chrome-store-due-to-malware\/","url_meta":{"origin":9442,"position":5},"title":"Feedly Mini Extension Removed From Chrome Store Due To &#8220;Malware&#8221;","author":"hrbrmstr","date":"2021-05-09","format":false,"excerpt":"On or about Friday evening (May 7, 2021) Edge notified me that the Feedly Mini extension (one of the only extensions I use as extensions are dangerous things) was remove from the store due to \"malware\". Feedly is used by many newshounds, and with 2021 being a very bad year\u2026","rel":"","context":"In &quot;Cybersecurity&quot;","block_context":{"text":"Cybersecurity","link":"https:\/\/rud.is\/b\/category\/cybersecurity\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/posts\/9442","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/comments?post=9442"}],"version-history":[{"count":0,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/posts\/9442\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/media\/9459"}],"wp:attachment":[{"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/media?parent=9442"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/categories?post=9442"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/tags?post=9442"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}