Browse Source

made some return values nicer; cleaned up stream docs; improved README; added rate limit info to feedly_profile()

master
boB Rudis 5 years ago
parent
commit
c0b2647bac
No known key found for this signature in database GPG Key ID: 1D7529BE14E2BBA9
  1. 2
      NAMESPACE
  2. 2
      R/feedly-collections.R
  3. 16
      R/feedly-profile.R
  4. 6
      R/feedly-search-contents.R
  5. 6
      R/feedly-search-title.R
  6. 149
      R/feedly-stream.R
  7. 51
      README.Rmd
  8. 146
      README.md
  9. BIN
      README_cache/gfm/collections_1b6d7a9c0cfd62ba66884d07d9371ee1.RData
  10. BIN
      README_cache/gfm/collections_1b6d7a9c0cfd62ba66884d07d9371ee1.rdb
  11. BIN
      README_cache/gfm/collections_1b6d7a9c0cfd62ba66884d07d9371ee1.rdx
  12. BIN
      README_cache/gfm/contents_search_e7723aca6e8e4b011e9ba6392e2a9298.RData
  13. BIN
      README_cache/gfm/contents_search_e7723aca6e8e4b011e9ba6392e2a9298.rdb
  14. BIN
      README_cache/gfm/contents_search_e7723aca6e8e4b011e9ba6392e2a9298.rdx
  15. BIN
      README_cache/gfm/feed_metadata_157ac5f43e6d6e89d2e3ab63e73e25f5.RData
  16. 0
      README_cache/gfm/feed_metadata_157ac5f43e6d6e89d2e3ab63e73e25f5.rdb
  17. BIN
      README_cache/gfm/feed_metadata_157ac5f43e6d6e89d2e3ab63e73e25f5.rdx
  18. BIN
      README_cache/gfm/opml_retrieval_7c8ec57f7d5f07f120e17f8931e9faaf.RData
  19. 0
      README_cache/gfm/opml_retrieval_7c8ec57f7d5f07f120e17f8931e9faaf.rdb
  20. BIN
      README_cache/gfm/opml_retrieval_7c8ec57f7d5f07f120e17f8931e9faaf.rdx
  21. BIN
      README_cache/gfm/rate_limit_a3cc01d4e97b6560ed17d087a47ec011.RData
  22. BIN
      README_cache/gfm/rate_limit_a3cc01d4e97b6560ed17d087a47ec011.rdb
  23. BIN
      README_cache/gfm/rate_limit_a3cc01d4e97b6560ed17d087a47ec011.rdx
  24. BIN
      README_cache/gfm/streams_d6e30de5779ca0ebf81a7cec2268a93c.RData
  25. BIN
      README_cache/gfm/streams_d6e30de5779ca0ebf81a7cec2268a93c.rdb
  26. BIN
      README_cache/gfm/streams_d6e30de5779ca0ebf81a7cec2268a93c.rdx
  27. BIN
      README_cache/gfm/title_search_7cc0ad7ef3929c891b56aff802b65a2d.RData
  28. BIN
      README_cache/gfm/title_search_7cc0ad7ef3929c891b56aff802b65a2d.rdb
  29. BIN
      README_cache/gfm/title_search_7cc0ad7ef3929c891b56aff802b65a2d.rdx
  30. 6
      man/feedly_collections.Rd
  31. 3
      man/feedly_profile.Rd
  32. 124
      man/feedly_stream.Rd

2
NAMESPACE

@ -2,7 +2,7 @@
export("%>%")
export(feedly_access_token)
export(feedly_connections)
export(feedly_collections)
export(feedly_feed_meta)
export(feedly_opml)
export(feedly_profile)

2
R/feedly-collections.R

@ -6,7 +6,7 @@
#' @references (<https://developer.feedly.com/v3/collections//>)
#' @export
#' @return a data frame of all non-empty collections
feedly_connections <- function(with_stats=FALSE,
feedly_collections <- function(with_stats=FALSE,
feedly_token = feedly_access_token()) {
httr::GET(

16
R/feedly-profile.R

@ -1,5 +1,8 @@
#' Retrieve Your Feedly Profile
#'
#' This function also returns information about current API rate limits
#' associated with your account.
#'
#' @md
#' @param feedly_token Your Feedly Developer Access Token (see [feedly_access_token()])
#' @references (<https://developer.feedly.com/v3/opml/>)
@ -19,6 +22,19 @@ feedly_profile <- function(feedly_token = feedly_access_token()) {
out <- jsonlite::fromJSON(out)
ln <- names(out)
if ("productExpiration" %in% ln)
out$productExpiration <- as.POSIXct(out$productExpiration/1000, origin = "1970-01-01")
if ("subscriptionRenewalDate" %in% ln)
out$subscriptionRenewalDate <- as.POSIXct(out$subscriptionRenewalDate/1000, origin = "1970-01-01")
if ("upgradeDate" %in% ln)
out$upgradeDate <- as.POSIXct(out$upgradeDate/1000, origin = "1970-01-01")
out$x_rate_limit_limit <- unlist(res$headers["x-ratelimit-limit"], use.names = FALSE)
out$x_rate_limit_count <- unlist(res$headers["x-ratelimit-count"], use.names = FALSE)
out$x_rate_limit_reset <- unlist(res$headers["x-ratelimit-reset"], use.names = FALSE)
out
}

6
R/feedly-search-contents.R

@ -81,6 +81,12 @@ feedly_search_contents <- function(query,
out <- jsonlite::fromJSON(out)
if (length(out$results) > 0) {
if (nrow(out$results) > 0) {
class(out$results) <- c("tbl_df", "tbl", "data.frame")
}
}
out
}

6
R/feedly-search-title.R

@ -41,6 +41,12 @@ feedly_search_title <- function(query, count=20L, locale=NULL, feedly_token = fe
out <- jsonlite::fromJSON(out)
if (length(out$results) > 0) {
if (nrow(out$results) > 0) {
class(out$results) <- c("tbl_df", "tbl", "data.frame")
}
}
out
}

149
R/feedly-stream.R

@ -7,68 +7,72 @@
#'
#' @return
#' This endpoint returns a `list` with the following entries:
#'- `id`:
#' string the stream id, repeated.
#'- `updated`:
#' Optional timestamp the timestamp, in ms, of the most recent entry for this stream (regardless of continuation, newerThan, etc).
#'- `continuation`:
#' Optional string the continuation id to pass to the next stream call, for pagination. This id guarantees that no entry will be duplicated in a stream (meaning, there is no need to de-duplicate entries returned by this call). If this value is not returned, it means the end of the stream has been reached.
#'- `title`:
#' Optional string for single feeds only, the feed title.
#'- `direction`:
#' Optional string for single feeds only, the feed direction ("ltr" or "rtl").
#'- `alternate`:
#' Optional link object for single feeds only, the feed website URL and type.
#'- `items`:
#' entry array See the entries API for a description of the fields.
#' - `id`: string the stream id, repeated.
#' - `updated`: Optional timestamp the timestamp, in ms, of the most recent entry
#' for this stream (regardless of continuation, newerThan, etc).
#' - `continuation`: Optional string the continuation id to pass to the next
#' stream call, for pagination. This id guarantees that no entry will be
#' duplicated in a stream (meaning, there is no need to de-duplicate entries
#' returned by this call). If this value is not returned, it means the end of
#' the stream has been reached.
#' - `title`: Optional string for single feeds only, the feed title.
#' - `direction`: Optional string for single feeds only, the feed direction ("ltr" or "rtl").
#' - `alternate`: Optional link object for single feeds only, the feed website URL and type.
#' - `items`: entry data frame (tibble); see below.
#'
#' The `items` component is a data frame Entries roughly follow the
#' Atom format. Here is a list of fields you can expect to receive:
#' The `items` component is a data frame of "entries" that roughly follow the
#' Atom format. Here is a list of fields you can expect to receive (NOTE!
#' the number of fields returned is variable (said variable entries will have
#' and _"optional"_ in the description below) so _you_ need to test for
#' the presence of a column before using it in your code):
#'
#' - `id`:
#' string the unique, immutable ID for this particular article.
#' - `title`:
#' Optional string the article’s title. This string does not contain any HTML markup.
#' - `content`:
#' Optional content object the article content. This object typically has two values: “content” for the content itself, and “direction” (“ltr” for left-to-right, “rtl” for right-to-left). The content itself contains sanitized HTML markup.
#' - `summary`:
#' Optional content object the article summary. See the content object above.
#' - `author`:
#' Optional string the author’s name
#' - `crawled`:
#' timestamp the immutable timestamp, in ms, when this article was processed by the feedly Cloud servers.
#' - `recrawled`:
#' Optional timestamp the timestamp, in ms, when this article was re-processed and updated by the feedly Cloud servers.
#' - `published`:
#' timestamp the timestamp, in ms, when this article was published, as reported by the RSS feed (often inaccurate).
#' - `updated`:
#' Optional timestamp the timestamp, in ms, when this article was updated, as reported by the RSS feed
#' - `alternate`:
#' Optional link object array a list of alternate links for this article. Each link object contains a media type and a URL. Typically, a single object is present, with a link to the original web page.
#' - `origin`:
#' Optional origin object the feed from which this article was crawled. If present, “streamId” will contain the feed id, “title” will contain the feed title, and “htmlUrl” will contain the feed’s website.
#' - `keywords`:
#' Optional string array a list of keyword strings extracted from the RSS entry.
#' - `visual`:
#' Optional visual object an image URL for this entry. If present, “url” will contain the image URL, “width” and “height” its dimension, and “contentType” its MIME type.
#' - `unread`:
#' boolean was this entry read by the user? If an Authorization header is not provided, this will always return false. If an Authorization header is provided, it will reflect if the user has read this entry or not.
#' - `tags`:
#' Optional tag object array a list of tag objects (“id” and “label”) that the user added to this entry. This value is only returned if an Authorization header is provided, and at least one tag has been added. If the entry has been explicitly marked as read (not the feed itself), the “global.read” tag will be present.
#' - `categories`:
#' category object array a list of category objects (“id” and “label”) that the user associated with the feed of this entry. This value is only returned if an Authorization header is provided.
#' - `engagement`:
#' Optional integer an indicator of how popular this entry is. The higher the number, the more readers have read, saved or shared this particular entry.
#' - `actionTimestamp`:
#' Optional timestamp for tagged articles, contains the timestamp when the article was tagged by the user. This will only be returned when the entry is returned through the streams API.
#' - `enclosure`:
#' Optional link object array a list of media links (videos, images, sound etc) provided by the feed. Some entries do not have a summary or content, only a collection of media links.
#' - `fingerprint`:
#' string the article fingerprint. This value might change if the article is updated.
#' - `originId`:
#' string the unique id of this post in the RSS feed (not necessarily a URL!)
#' - `sid`:
#' Optional string an internal search id.
#' - `id`: string the unique, immutable ID for this particular article.
#' - `title`: Optional string the article’s title. This string does not contain any HTML markup.
#' - `content`: Optional content object the article content. This object typically
#' has two values: “content” for the content itself, and “direction”
#' (“ltr” for left-to-right, “rtl” for right-to-left). The content itself
#' contains sanitized HTML markup.
#' - `summary`: Optional content object the article summary. See the content object above.
#' - `author`: Optional string the author’s name
#' - `crawled`: timestamp the immutable timestamp, in ms, when this article was
#' processed by the feedly Cloud servers.
#' - `recrawled`: Optional timestamp the timestamp, in ms, when this article was
#' re-processed and updated by the feedly Cloud servers.
#' - `published`: timestamp the timestamp, in ms, when this article was published,
#' as reported by the RSS feed (often inaccurate).
#' - `updated`: Optional timestamp the timestamp, in ms, when this article was
#' updated, as reported by the RSS feed
#' - `alternate`: Optional link object array a list of alternate links for this
#' article. Each link object contains a media type and a URL. Typically, a
#' single object is present, with a link to the original web page.
#' - `origin`: Optional origin object the feed from which this article was crawled.
#' If present, “streamId” will contain the feed id, “title” will contain the
#' feed title, and “htmlUrl” will contain the feed’s website.
#' - `keywords`: Optional string array a list of keyword strings extracted from the RSS entry.
#' - `visual`: Optional visual object an image URL for this entry. If present,
#' “url” will contain the image URL, “width” and “height” its dimension, and
#' “contentType” its MIME type.
#' - `unread`: boolean was this entry read by the user? If an Authorization header
#' is not provided, this will always return false. If an Authorization header
#' is provided, it will reflect if the user has read this entry or not.
#' - `tags`: Optional tag object array a list of tag objects (“id” and “label”)
#' that the user added to this entry. This value is only returned if an Authorization header is provided, and at least one tag has been added. If the entry has been explicitly marked as read (not the feed itself), the “global.read” tag will be present.
#' - `categories`: category object array a list of category objects (“id” and
#' “label”) that the user associated with the feed of this entry. This value
#' is only returned if an Authorization header is provided.
#' - `engagement`: Optional integer an indicator of how popular this entry is.
#' The higher the number, the more readers have read, saved or shared this
#' particular entry.
#' - `actionTimestamp`: Optional timestamp for tagged articles, contains the
#' timestamp when the article was tagged by the user. This will only be
#' returned when the entry is returned through the streams API.
#' - `enclosure`: Optional link object array a list of media links (videos,
#' images, sound etc) provided by the feed. Some entries do not have a summary
#' or content, only a collection of media links.
#' - `fingerprint`: string the article fingerprint. This value might change if
#' the article is updated.
#' - `originId`: string the unique id of this post in the RSS feed (not necessarily a URL!)
#' - `sid`: Optional string an internal search id.
#'
#' @md
#' @param stream_id the id of the stream
@ -127,6 +131,31 @@ feedly_stream <- function(stream_id,
res <- httr::content(res, as="text")
res <- jsonlite::fromJSON(res)
if (length(res$items) > 0) {
if (nrow(res$items) > 0) {
cn <- colnames(res$items)
if ("updated" %in% cn) res$items$updated <- as.POSIXct(res$items$updated/1000, origin = "1970-01-01")
if ("crawled" %in% cn) res$items$crawled <- as.POSIXct(res$items$crawled/1000, origin = "1970-01-01")
if ("published" %in% cn) res$items$published <- as.POSIXct(res$items$published/1000, origin = "1970-01-01")
if ("actionTimestamp" %in% cn) res$items$actionTimestamp <- as.POSIXct(res$items$actionTimestamp/1000, origin = "1970-01-01")
# column bind all the data frame columns so we can make res$items a tbl
isdf <- sapply(res$items, class)
df_cols <- names(isdf[isdf == "data.frame"])
for (cname in df_cols) {
cn <- cn[cn != cname]
res$items <- cbind.data.frame(res$items[,cn], res$items[,cname])
}
class(res$items) <- c("tbl_df", "tbl", "data.frame")
}
}
res
}

51
README.Rmd

@ -1,6 +1,12 @@
---
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)
@ -17,7 +23,7 @@ Tools to Work with the 'Feedly' 'API'
The following functions are implemented:
- `feedly_access_token`: Retrieve the Feedly Developer Token
- `feedly_connections`: Retrieve Feedly Connections
- `feedly_collections`: Retrieve Feedly Connections
- `feedly_feed_meta`: Retrieve Metadata for a Feed
- `feedly_opml`: Retrieve Your Feedly OPML File
- `feedly_profile`: Retrieve Your Feedly Profile
@ -59,35 +65,64 @@ packageVersion("seymour")
```
### Basic Usage
### Collections
```{r cache=TRUE}
coll <- feedly_connections()
```{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",
) -> items
) -> rbloggers
str(items, 2)
glimpse(rbloggers$items)
rbloggers$items
```
### Feed Metadata
```{r feed_metadata, cache=TRUE}
feedly_feed_meta("https://feeds.feedburner.com/rweeklylive") %>%
glimpse()
```
feedly_opml()
### 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))]
```
## Package Code Metrics
```{r}
```{r pkg_metrics}
cloc::cloc_pkg_md()
```

146
README.md

File diff suppressed because one or more lines are too long

BIN
README_cache/gfm/collections_1b6d7a9c0cfd62ba66884d07d9371ee1.RData

Binary file not shown.

BIN
README_cache/gfm/collections_1b6d7a9c0cfd62ba66884d07d9371ee1.rdb

Binary file not shown.

BIN
README_cache/gfm/collections_1b6d7a9c0cfd62ba66884d07d9371ee1.rdx

Binary file not shown.

BIN
README_cache/gfm/contents_search_e7723aca6e8e4b011e9ba6392e2a9298.RData

Binary file not shown.

BIN
README_cache/gfm/contents_search_e7723aca6e8e4b011e9ba6392e2a9298.rdb

Binary file not shown.

BIN
README_cache/gfm/contents_search_e7723aca6e8e4b011e9ba6392e2a9298.rdx

Binary file not shown.

BIN
README_cache/gfm/feed_metadata_157ac5f43e6d6e89d2e3ab63e73e25f5.RData

Binary file not shown.

0
README_cache/gfm/feed_metadata_157ac5f43e6d6e89d2e3ab63e73e25f5.rdb

BIN
README_cache/gfm/feed_metadata_157ac5f43e6d6e89d2e3ab63e73e25f5.rdx

Binary file not shown.

BIN
README_cache/gfm/opml_retrieval_7c8ec57f7d5f07f120e17f8931e9faaf.RData

Binary file not shown.

0
README_cache/gfm/opml_retrieval_7c8ec57f7d5f07f120e17f8931e9faaf.rdb

BIN
README_cache/gfm/opml_retrieval_7c8ec57f7d5f07f120e17f8931e9faaf.rdx

Binary file not shown.

BIN
README_cache/gfm/rate_limit_a3cc01d4e97b6560ed17d087a47ec011.RData

Binary file not shown.

BIN
README_cache/gfm/rate_limit_a3cc01d4e97b6560ed17d087a47ec011.rdb

Binary file not shown.

BIN
README_cache/gfm/rate_limit_a3cc01d4e97b6560ed17d087a47ec011.rdx

Binary file not shown.

BIN
README_cache/gfm/streams_d6e30de5779ca0ebf81a7cec2268a93c.RData

Binary file not shown.

BIN
README_cache/gfm/streams_d6e30de5779ca0ebf81a7cec2268a93c.rdb

Binary file not shown.

BIN
README_cache/gfm/streams_d6e30de5779ca0ebf81a7cec2268a93c.rdx

Binary file not shown.

BIN
README_cache/gfm/title_search_7cc0ad7ef3929c891b56aff802b65a2d.RData

Binary file not shown.

BIN
README_cache/gfm/title_search_7cc0ad7ef3929c891b56aff802b65a2d.rdb

Binary file not shown.

BIN
README_cache/gfm/title_search_7cc0ad7ef3929c891b56aff802b65a2d.rdx

Binary file not shown.

6
man/feedly_connections.Rd → man/feedly_collections.Rd

@ -1,10 +1,10 @@
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/feedly-collections.R
\name{feedly_connections}
\alias{feedly_connections}
\name{feedly_collections}
\alias{feedly_collections}
\title{Retrieve Feedly Connections}
\usage{
feedly_connections(with_stats = FALSE,
feedly_collections(with_stats = FALSE,
feedly_token = feedly_access_token())
}
\arguments{

3
man/feedly_profile.Rd

@ -10,7 +10,8 @@ feedly_profile(feedly_token = feedly_access_token())
\item{feedly_token}{Your Feedly Developer Access Token (see \code{\link[=feedly_access_token]{feedly_access_token()}})}
}
\description{
Retrieve Your Feedly Profile
This function also returns information about current API rate limits
associated with your account.
}
\references{
(\url{https://developer.feedly.com/v3/opml/})

124
man/feedly_stream.Rd

@ -28,69 +28,73 @@ internally if this is the case)}
\value{
This endpoint returns a \code{list} with the following entries:
\itemize{
\item \code{id}:
string the stream id, repeated.
\item \code{updated}:
Optional timestamp the timestamp, in ms, of the most recent entry for this stream (regardless of continuation, newerThan, etc).
\item \code{continuation}:
Optional string the continuation id to pass to the next stream call, for pagination. This id guarantees that no entry will be duplicated in a stream (meaning, there is no need to de-duplicate entries returned by this call). If this value is not returned, it means the end of the stream has been reached.
\item \code{title}:
Optional string for single feeds only, the feed title.
\item \code{direction}:
Optional string for single feeds only, the feed direction ("ltr" or "rtl").
\item \code{alternate}:
Optional link object for single feeds only, the feed website URL and type.
\item \code{items}:
entry array See the entries API for a description of the fields.
\item \code{id}: string the stream id, repeated.
\item \code{updated}: Optional timestamp the timestamp, in ms, of the most recent entry
for this stream (regardless of continuation, newerThan, etc).
\item \code{continuation}: Optional string the continuation id to pass to the next
stream call, for pagination. This id guarantees that no entry will be
duplicated in a stream (meaning, there is no need to de-duplicate entries
returned by this call). If this value is not returned, it means the end of
the stream has been reached.
\item \code{title}: Optional string for single feeds only, the feed title.
\item \code{direction}: Optional string for single feeds only, the feed direction ("ltr" or "rtl").
\item \code{alternate}: Optional link object for single feeds only, the feed website URL and type.
\item \code{items}: entry data frame (tibble); see below.
}
The \code{items} component is a data frame Entries roughly follow the
Atom format. Here is a list of fields you can expect to receive:
The \code{items} component is a data frame of "entries" that roughly follow the
Atom format. Here is a list of fields you can expect to receive (NOTE!
the number of fields returned is variable (said variable entries will have
and \emph{"optional"} in the description below) so \emph{you} need to test for
the presence of a column before using it in your code):
\itemize{
\item \code{id}:
string the unique, immutable ID for this particular article.
\item \code{title}:
Optional string the article’s title. This string does not contain any HTML markup.
\item \code{content}:
Optional content object the article content. This object typically has two values: “content” for the content itself, and “direction” (“ltr” for left-to-right, “rtl” for right-to-left). The content itself contains sanitized HTML markup.
\item \code{summary}:
Optional content object the article summary. See the content object above.
\item \code{author}:
Optional string the author’s name
\item \code{crawled}:
timestamp the immutable timestamp, in ms, when this article was processed by the feedly Cloud servers.
\item \code{recrawled}:
Optional timestamp the timestamp, in ms, when this article was re-processed and updated by the feedly Cloud servers.
\item \code{published}:
timestamp the timestamp, in ms, when this article was published, as reported by the RSS feed (often inaccurate).
\item \code{updated}:
Optional timestamp the timestamp, in ms, when this article was updated, as reported by the RSS feed
\item \code{alternate}:
Optional link object array a list of alternate links for this article. Each link object contains a media type and a URL. Typically, a single object is present, with a link to the original web page.
\item \code{origin}:
Optional origin object the feed from which this article was crawled. If present, “streamId” will contain the feed id, “title” will contain the feed title, and “htmlUrl” will contain the feed’s website.
\item \code{keywords}:
Optional string array a list of keyword strings extracted from the RSS entry.
\item \code{visual}:
Optional visual object an image URL for this entry. If present, “url” will contain the image URL, “width” and “height” its dimension, and “contentType” its MIME type.
\item \code{unread}:
boolean was this entry read by the user? If an Authorization header is not provided, this will always return false. If an Authorization header is provided, it will reflect if the user has read this entry or not.
\item \code{tags}:
Optional tag object array a list of tag objects (“id” and “label”) that the user added to this entry. This value is only returned if an Authorization header is provided, and at least one tag has been added. If the entry has been explicitly marked as read (not the feed itself), the “global.read” tag will be present.
\item \code{categories}:
category object array a list of category objects (“id” and “label”) that the user associated with the feed of this entry. This value is only returned if an Authorization header is provided.
\item \code{engagement}:
Optional integer an indicator of how popular this entry is. The higher the number, the more readers have read, saved or shared this particular entry.
\item \code{actionTimestamp}:
Optional timestamp for tagged articles, contains the timestamp when the article was tagged by the user. This will only be returned when the entry is returned through the streams API.
\item \code{enclosure}:
Optional link object array a list of media links (videos, images, sound etc) provided by the feed. Some entries do not have a summary or content, only a collection of media links.
\item \code{fingerprint}:
string the article fingerprint. This value might change if the article is updated.
\item \code{originId}:
string the unique id of this post in the RSS feed (not necessarily a URL!)
\item \code{sid}:
Optional string an internal search id.
\item \code{id}: string the unique, immutable ID for this particular article.
\item \code{title}: Optional string the article’s title. This string does not contain any HTML markup.
\item \code{content}: Optional content object the article content. This object typically
has two values: “content” for the content itself, and “direction”
(“ltr” for left-to-right, “rtl” for right-to-left). The content itself
contains sanitized HTML markup.
\item \code{summary}: Optional content object the article summary. See the content object above.
\item \code{author}: Optional string the author’s name
\item \code{crawled}: timestamp the immutable timestamp, in ms, when this article was
processed by the feedly Cloud servers.
\item \code{recrawled}: Optional timestamp the timestamp, in ms, when this article was
re-processed and updated by the feedly Cloud servers.
\item \code{published}: timestamp the timestamp, in ms, when this article was published,
as reported by the RSS feed (often inaccurate).
\item \code{updated}: Optional timestamp the timestamp, in ms, when this article was
updated, as reported by the RSS feed
\item \code{alternate}: Optional link object array a list of alternate links for this
article. Each link object contains a media type and a URL. Typically, a
single object is present, with a link to the original web page.
\item \code{origin}: Optional origin object the feed from which this article was crawled.
If present, “streamId” will contain the feed id, “title” will contain the
feed title, and “htmlUrl” will contain the feed’s website.
\item \code{keywords}: Optional string array a list of keyword strings extracted from the RSS entry.
\item \code{visual}: Optional visual object an image URL for this entry. If present,
“url” will contain the image URL, “width” and “height” its dimension, and
“contentType” its MIME type.
\item \code{unread}: boolean was this entry read by the user? If an Authorization header
is not provided, this will always return false. If an Authorization header
is provided, it will reflect if the user has read this entry or not.
\item \code{tags}: Optional tag object array a list of tag objects (“id” and “label”)
that the user added to this entry. This value is only returned if an Authorization header is provided, and at least one tag has been added. If the entry has been explicitly marked as read (not the feed itself), the “global.read” tag will be present.
\item \code{categories}: category object array a list of category objects (“id” and
“label”) that the user associated with the feed of this entry. This value
is only returned if an Authorization header is provided.
\item \code{engagement}: Optional integer an indicator of how popular this entry is.
The higher the number, the more readers have read, saved or shared this
particular entry.
\item \code{actionTimestamp}: Optional timestamp for tagged articles, contains the
timestamp when the article was tagged by the user. This will only be
returned when the entry is returned through the streams API.
\item \code{enclosure}: Optional link object array a list of media links (videos,
images, sound etc) provided by the feed. Some entries do not have a summary
or content, only a collection of media links.
\item \code{fingerprint}: string the article fingerprint. This value might change if
the article is updated.
\item \code{originId}: string the unique id of this post in the RSS feed (not necessarily a URL!)
\item \code{sid}: Optional string an internal search id.
}
}
\description{

Loading…
Cancel
Save