feeder

package module
v1.1.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 30, 2021 License: BSD-2-Clause Imports: 12 Imported by: 0

README

feeder is the RSS, Atom and JSON feed generator from multiple RSS, Atom, and any entries you want.

Getting started

Install

go get -u github.com/p1ass/feeder

Examples

package main

import (
	"github.com/p1ass/feeder"
	"time"
)

func crawl(){
	rss1 := feeder.NewRSSCrawler("https://example.com/rss1")
	rss2 := feeder.NewRSSCrawler("https://example.com/rss2")

	items, err := feeder.Crawl(rss1, rss2)

	feed := &feeder.Feed{
		Title:       "My feeds",
		Link:        &feeder.Link{Href: "https://example.com/feed"},
		Description: "My feeds.",
		Author:      &feeder.Author{
			Name: "p1ass",
			Email: "p1ass@example.com"},
		Created:     time.Now(),
		Items:       items,
	}

	json, err := feed.ToJSON() // json is  string
	rss, err := feed.ToRSS() // rss is string
	atom, err := feed.ToAtom() // atom is string

	jsonReader, err := feed.ToJSONReader() // jsonReader is a io.Reader
	rssReader, err := feed.ToRSSReader() // jsonReader is a io.Reader
	atomReader, err := feed.ToAtomReader() // jsonReader is a io.Reader

}

Advanced usages

Implement original Crawler

You can create a original crawler by implementing feeder.Crawler.

type Crawler interface {
	Crawl() ([]*Item, error)
}

This is an example of Qiita API(GET /api/v2/users/:user_id/items).

Qiita API v2 documentation - Qiita:Developer


type qiitaResponse struct {
	CreatedAt *time.Time `json:"created_at"`
	Title     string     `json:"title"`
	URL       string     `json:"url"`
	Body      string     `json:"body"`
	ID        string     `json:"id"`
	User      *qiitaUser `json:"user"`
}

type qiitaUser struct {
	ID string `json:"id"`
}

type qiitaCrawler struct {
	URL string
}

func (crawler *qiitaCrawler) Fetch() ([]*feeder.Item, error) {
	resp, err := http.Get(crawler.URL)
	if err != nil {
		return nil, errors.Wrap(err, "failed to get response from qiita.")
	}

	var qiita []*qiitaResponse
	err = json.NewDecoder(resp.Body).Decode(&qiita)
	if err != nil {
		return nil, errors.Wrap(err, "failed to decode response body.")
	}

	items := []*feeder.Item{}
	for _, i := range qiita {
		items = append(items, convertQiitaToItem(i))
	}
	return items, nil
}

func convertQiitaToItem(q *qiitaResponse) *feeder.Item {

	i := &feeder.Item{
		Title:       q.Title,
		Link:        &feeder.Link{Href: q.URL},
		Created:     q.CreatedAt,
		Id:          q.ID,
		Description: q.Body,
	}

	if q.User != nil {
		i.Author = &feeder.Author{
			Name: q.User.ID,
		}
	}
	return i
}

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Author

type Author struct {
	Name, Email string
}

Author represents entry author

type Crawler

type Crawler interface {
	Crawl() ([]*Item, error)
}

Crawler is interface for crawling

func NewAtomCrawler

func NewAtomCrawler(url string) Crawler

NewAtomCrawler returns atomCrawler

func NewRSSCrawler

func NewRSSCrawler(url string) Crawler

NewRSSCrawler returns rSSCrawler

type Enclosure

type Enclosure struct {
	URL, Length, Type string
}

Enclosure represents og link

type Feed

type Feed struct {
	Title       string
	Link        *Link
	Description string
	Author      *Author
	Updated     time.Time
	Created     time.Time
	Id          string
	Subtitle    string
	Items       []*Item
	Copyright   string
	Image       *Image
}

Feed represents rss feed or atom feed

func (*Feed) ToAtom

func (f *Feed) ToAtom() (string, error)

ToAtom generates Atom feed

func (*Feed) ToAtomReader added in v1.1.0

func (f *Feed) ToAtomReader() (io.Reader, error)

ToAtomReader generates Atom feed and return io.Reader.

func (*Feed) ToJSON

func (f *Feed) ToJSON() (string, error)

ToJSON generates JSON feed

func (*Feed) ToJSONReader added in v1.1.0

func (f *Feed) ToJSONReader() (io.Reader, error)

ToJSONReader generates JSON feed and return io.Reader.

func (*Feed) ToRSS

func (f *Feed) ToRSS() (string, error)

ToRSS generates RSS feed

func (*Feed) ToRSSReader added in v1.1.0

func (f *Feed) ToRSSReader() (io.Reader, error)

ToRSSReader generates RSS feed and return io.Reader.

type Image

type Image struct {
	URL, Title, Link string
	Width, Height    int
}

Image represents image

type Item

type Item struct {
	Title       string
	Link        *Link
	Source      *Link
	Author      *Author
	Description string

	ID        string
	Updated   *time.Time
	Created   *time.Time
	Enclosure *Enclosure
	Content   string
}

Item represents a entry

func Crawl

func Crawl(crawlers ...Crawler) ([]*Item, error)

Crawl is function that crawls all site using goroutine. func Crawl(crawlers ...Fetcher) *Items is deprecated

type Link struct {
	Href, Rel, Type, Length string
}

Link represents http link

Directories

Path Synopsis
examples

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL