Function feedfinder::detect_feeds[][src]

pub fn detect_feeds(
    base_url: &Url,
    html: &str
) -> Result<Vec<Feed>, FeedFinderError>

Find feeds in the supplied content.

The detect_feeds function will look for feeds:

  • Linked via the <link> tag in the HTML
  • Linked via <a> tag in the HTML
  • By guessing from the software used to generate the page:
    • Tumblr
    • WordPress
    • Hugo
    • Jekyll
    • Ghost
  • From YouTube:
    • channels
    • playlists
    • users

Parameters

detect_feeds takes a String of HTML content and the URL that content was retrieved from. The function will not fetch the URL itself. This needs to be done by the caller using a library like reqwest or hyper.

Return value

detect_feeds does not access the network so the returned list of feed candidates should be tested to see:

  • If they actually exist.
  • If they look like they are a feed (by checking for an XML or JSON MIME type).

The return value is wrapped in a Result, errors can occur if a candidate URL is invalid or there is a problem parsing or traversing the HTML content.

Example

extern crate feedfinder;
extern crate url;

use feedfinder::detect_feeds;
use url::Url;

fn main() {
    let url = Url::parse("https://example.com/example").expect("unable to parse url");
    let html = r#"
        <html>
            <head>
                <title>Example</title>
                <link rel="alternate" href="/posts.rss" type="application/rss+xml" />
            </head>
            <body>
                My fun page with a feed.
            </body>
        </html>"#;

    match detect_feeds(&url, html) {
        Ok(feeds) => {
            println!("Possible feeds for {}", url);
            for feed in feeds {
                println!("{:?}", feed);
            }
        }
        Err(err) => println!("Unable to find feeds due to error: {}", err),
    }
}