Skip to content

akitenkrad/rs-rss

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

41 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

rsrss

CircleCI

How to add new site

1. Create site directory

mkdir src/sites/<<TARGET SITE>>
touch src/sites/<<TARGET SITE>>/mod.rs
touch src/sites/<<TARGET SITE>>/tests.rs

mod.rs template

use crate::sites::{Category, Html, Text, Site, WebArticle};
use chrono::DateTime;
use feed_parser::parsers;
pub struct Gigazin {}

#[cfg(test)]
mod tests;

impl Site for Gigazin {
    async fn get_articles(&self) -> Result<Vec<WebArticle>, String> {
        let body = reqwest::get("https://gigazine.net/news/rss_2.0/")
            .await
            .unwrap()
            .text()
            .await
            .unwrap();
        let feeds = if let Ok(r) = parsers::rss2::parse(&body) {
            r
        } else {
            return Err("Failed to parse RSS".to_string());
        };
        let mut articles = Vec::new();
        for feed in feeds {
            articles.push(WebArticle {
                site: self.name(),
title: feed.title,
                url: feed.link,
                text: feed.description.unwrap_or("".to_string()),
                timestamp: DateTime::parse_from_rfc2822(&feed.publish_date.unwrap())
                    .unwrap()
                    .into(),
            });
        }
        return articles;
    }
}

tests.rs template

use super::*;

#[test]
fn test_codezin() {
    let site = Gigazin {};
    let articles = site.get_articles().await;
    assert!(articles.len() > 0);
}

2. Edit src/sites/mod.rs

use chrono::{DateTime, Local};
use futures::Future;

mod codezin;
mod gigazin;
mod stockmarknews;
mod stockmarktechblog;
mod <<TARGET SITE>>

3. Implement get_articles()

4. Run test

cargo test

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages