README

Miniflux API Client

PkgGoDev

Client library for Miniflux REST API.

Installation

go get -u miniflux.app/client

Example

package main

import (
	"fmt"
	"os"

	miniflux "miniflux.app/client"
)

func main() {
    // Authentication with username/password:
    client := miniflux.New("https://api.example.org", "admin", "secret")

    // Authentication with an API Key:
    client := miniflux.New("https://api.example.org", "my-secret-token")

    // Fetch all feeds.
    feeds, err := client.Feeds()
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(feeds)

    // Backup your feeds to an OPML file.
    opml, err := client.Export()
    if err != nil {
        fmt.Println(err)
        return
    }

    err = os.WriteFile("opml.xml", opml, 0644)
    if err != nil {
        fmt.Println(err)
        return
    }
}

Documentation

Overview

Package client implements a client library for the Miniflux REST API.

Examples

This code snippet fetch the list of users:

import (
	miniflux "miniflux.app/client"
)

client := miniflux.New("https://api.example.org", "admin", "secret")
users, err := client.Users()
if err != nil {
	fmt.Println(err)
	return
}
fmt.Println(users, err)

This one discover subscriptions on a website:

subscriptions, err := client.Discover("https://example.org/")
if err != nil {
	fmt.Println(err)
	return
}
fmt.Println(subscriptions)

Index

Constants

View Source
const (
	EntryStatusUnread  = "unread"
	EntryStatusRead    = "read"
	EntryStatusRemoved = "removed"
)

Entry statuses.

Variables

View Source
var (
	ErrNotAuthorized = errors.New("miniflux: unauthorized (bad credentials)")
	ErrForbidden     = errors.New("miniflux: access forbidden")
	ErrServerError   = errors.New("miniflux: internal server error")
	ErrNotFound      = errors.New("miniflux: resource not found")
)

List of exposed errors.

Functions

This section is empty.

Types

type Categories

type Categories []*Category

Categories represents a list of categories.

type Category

type Category struct {
	ID     int64  `json:"id,omitempty"`
	Title  string `json:"title,omitempty"`
	UserID int64  `json:"user_id,omitempty"`
}

Category represents a feed category.

func (Category) String

func (c Category) String() string

type Client

type Client struct {
	// contains filtered or unexported fields
}

Client holds API procedure calls.

func New

func New(endpoint string, credentials ...string) *Client

New returns a new Miniflux client.

func (*Client) Categories

func (c *Client) Categories() (Categories, error)

Categories gets the list of categories.

func (*Client) CategoryEntries

func (c *Client) CategoryEntries(categoryID int64, filter *Filter) (*EntryResultSet, error)

CategoryEntries fetch entries of a category.

func (*Client) CategoryEntry

func (c *Client) CategoryEntry(categoryID, entryID int64) (*Entry, error)

CategoryEntry gets a single category entry.

func (*Client) CategoryFeeds

func (c *Client) CategoryFeeds(categoryID int64) (Feeds, error)

CategoryFeeds gets feeds of a category.

func (*Client) CreateCategory

func (c *Client) CreateCategory(title string) (*Category, error)

CreateCategory creates a new category.

func (*Client) CreateFeed

func (c *Client) CreateFeed(feedCreationRequest *FeedCreationRequest) (int64, error)

CreateFeed creates a new feed.

func (*Client) CreateUser

func (c *Client) CreateUser(username, password string, isAdmin bool) (*User, error)

CreateUser creates a new user in the system.

func (*Client) DeleteCategory

func (c *Client) DeleteCategory(categoryID int64) error

DeleteCategory removes a category.

func (*Client) DeleteFeed

func (c *Client) DeleteFeed(feedID int64) error

DeleteFeed removes a feed.

func (*Client) DeleteUser

func (c *Client) DeleteUser(userID int64) error

DeleteUser removes a user from the system.

func (*Client) Discover

func (c *Client) Discover(url string) (Subscriptions, error)

Discover try to find subscriptions from a website.

func (*Client) Entries

func (c *Client) Entries(filter *Filter) (*EntryResultSet, error)

Entries fetch entries.

func (*Client) Entry

func (c *Client) Entry(entryID int64) (*Entry, error)

Entry gets a single entry.

func (*Client) Export

func (c *Client) Export() ([]byte, error)

Export creates OPML file.

func (*Client) Feed

func (c *Client) Feed(feedID int64) (*Feed, error)

Feed gets a feed.

func (*Client) FeedEntries

func (c *Client) FeedEntries(feedID int64, filter *Filter) (*EntryResultSet, error)

FeedEntries fetch feed entries.

func (*Client) FeedEntry

func (c *Client) FeedEntry(feedID, entryID int64) (*Entry, error)

FeedEntry gets a single feed entry.

func (*Client) FeedIcon

func (c *Client) FeedIcon(feedID int64) (*FeedIcon, error)

FeedIcon gets a feed icon.

func (*Client) Feeds

func (c *Client) Feeds() (Feeds, error)

Feeds gets all feeds.

func (*Client) Import

func (c *Client) Import(f io.ReadCloser) error

Import imports an OPML file.

func (*Client) MarkAllAsRead

func (c *Client) MarkAllAsRead(userID int64) error

MarkAllAsRead marks all unread entries as read for a given user.

func (*Client) MarkCategoryAsRead

func (c *Client) MarkCategoryAsRead(categoryID int64) error

MarkCategoryAsRead marks all unread entries in a category as read.

func (*Client) MarkFeedAsRead

func (c *Client) MarkFeedAsRead(feedID int64) error

MarkFeedAsRead marks all unread entries of the feed as read.

func (*Client) Me

func (c *Client) Me() (*User, error)

Me returns the logged user information.

func (*Client) RefreshAllFeeds

func (c *Client) RefreshAllFeeds() error

RefreshAllFeeds refreshes all feeds.

func (*Client) RefreshFeed

func (c *Client) RefreshFeed(feedID int64) error

RefreshFeed refreshes a feed.

func (*Client) ToggleBookmark

func (c *Client) ToggleBookmark(entryID int64) error

ToggleBookmark toggles entry bookmark value.

func (*Client) UpdateCategory

func (c *Client) UpdateCategory(categoryID int64, title string) (*Category, error)

UpdateCategory updates a category.

func (*Client) UpdateEntries

func (c *Client) UpdateEntries(entryIDs []int64, status string) error

UpdateEntries updates the status of a list of entries.

func (*Client) UpdateFeed

func (c *Client) UpdateFeed(feedID int64, feedChanges *FeedModificationRequest) (*Feed, error)

UpdateFeed updates a feed.

func (*Client) UpdateUser

func (c *Client) UpdateUser(userID int64, userChanges *UserModificationRequest) (*User, error)

UpdateUser updates a user in the system.

func (*Client) UserByID

func (c *Client) UserByID(userID int64) (*User, error)

UserByID returns a single user.

func (*Client) UserByUsername

func (c *Client) UserByUsername(username string) (*User, error)

UserByUsername returns a single user.

func (*Client) Users

func (c *Client) Users() (Users, error)

Users returns all users.

type Enclosure

type Enclosure struct {
	ID       int64  `json:"id"`
	UserID   int64  `json:"user_id"`
	EntryID  int64  `json:"entry_id"`
	URL      string `json:"url"`
	MimeType string `json:"mime_type"`
	Size     int    `json:"size"`
}

Enclosure represents an attachment.

type Enclosures

type Enclosures []*Enclosure

Enclosures represents a list of attachments.

type Entries

type Entries []*Entry

Entries represents a list of entries.

type Entry

type Entry struct {
	ID          int64      `json:"id"`
	UserID      int64      `json:"user_id"`
	FeedID      int64      `json:"feed_id"`
	Status      string     `json:"status"`
	Hash        string     `json:"hash"`
	Title       string     `json:"title"`
	URL         string     `json:"url"`
	CommentsURL string     `json:"comments_url"`
	Date        time.Time  `json:"published_at"`
	CreatedAt   time.Time  `json:"created_at"`
	ChangedAt   time.Time  `json:"changed_at"`
	Content     string     `json:"content"`
	Author      string     `json:"author"`
	ShareCode   string     `json:"share_code"`
	Starred     bool       `json:"starred"`
	ReadingTime int        `json:"reading_time"`
	Enclosures  Enclosures `json:"enclosures,omitempty"`
	Feed        *Feed      `json:"feed,omitempty"`
}

Entry represents a subscription item in the system.

type EntryResultSet

type EntryResultSet struct {
	Total   int     `json:"total"`
	Entries Entries `json:"entries"`
}

EntryResultSet represents the response when fetching entries.

type Feed

type Feed struct {
	ID                          int64     `json:"id"`
	UserID                      int64     `json:"user_id"`
	FeedURL                     string    `json:"feed_url"`
	SiteURL                     string    `json:"site_url"`
	Title                       string    `json:"title"`
	CheckedAt                   time.Time `json:"checked_at,omitempty"`
	EtagHeader                  string    `json:"etag_header,omitempty"`
	LastModifiedHeader          string    `json:"last_modified_header,omitempty"`
	ParsingErrorMsg             string    `json:"parsing_error_message,omitempty"`
	ParsingErrorCount           int       `json:"parsing_error_count,omitempty"`
	Disabled                    bool      `json:"disabled"`
	IgnoreHTTPCache             bool      `json:"ignore_http_cache"`
	AllowSelfSignedCertificates bool      `json:"allow_self_signed_certificates"`
	FetchViaProxy               bool      `json:"fetch_via_proxy"`
	ScraperRules                string    `json:"scraper_rules"`
	RewriteRules                string    `json:"rewrite_rules"`
	BlocklistRules              string    `json:"blocklist_rules"`
	KeeplistRules               string    `json:"keeplist_rules"`
	Crawler                     bool      `json:"crawler"`
	UserAgent                   string    `json:"user_agent"`
	Cookie                      string    `json:"cookie"`
	Username                    string    `json:"username"`
	Password                    string    `json:"password"`
	Category                    *Category `json:"category,omitempty"`
}

Feed represents a Miniflux feed.

type FeedCreationRequest

type FeedCreationRequest struct {
	FeedURL                     string `json:"feed_url"`
	CategoryID                  int64  `json:"category_id"`
	UserAgent                   string `json:"user_agent"`
	Cookie                      string `json:"cookie"`
	Username                    string `json:"username"`
	Password                    string `json:"password"`
	Crawler                     bool   `json:"crawler"`
	Disabled                    bool   `json:"disabled"`
	IgnoreHTTPCache             bool   `json:"ignore_http_cache"`
	AllowSelfSignedCertificates bool   `json:"allow_self_signed_certificates"`
	FetchViaProxy               bool   `json:"fetch_via_proxy"`
	ScraperRules                string `json:"scraper_rules"`
	RewriteRules                string `json:"rewrite_rules"`
	BlocklistRules              string `json:"blocklist_rules"`
	KeeplistRules               string `json:"keeplist_rules"`
}

FeedCreationRequest represents the request to create a feed.

type FeedIcon

type FeedIcon struct {
	ID       int64  `json:"id"`
	MimeType string `json:"mime_type"`
	Data     string `json:"data"`
}

FeedIcon represents the feed icon.

type FeedModificationRequest

type FeedModificationRequest struct {
	FeedURL                     *string `json:"feed_url"`
	SiteURL                     *string `json:"site_url"`
	Title                       *string `json:"title"`
	ScraperRules                *string `json:"scraper_rules"`
	RewriteRules                *string `json:"rewrite_rules"`
	BlocklistRules              *string `json:"blocklist_rules"`
	KeeplistRules               *string `json:"keeplist_rules"`
	Crawler                     *bool   `json:"crawler"`
	UserAgent                   *string `json:"user_agent"`
	Cookie                      *string `json:"cookie"`
	Username                    *string `json:"username"`
	Password                    *string `json:"password"`
	CategoryID                  *int64  `json:"category_id"`
	Disabled                    *bool   `json:"disabled"`
	IgnoreHTTPCache             *bool   `json:"ignore_http_cache"`
	AllowSelfSignedCertificates *bool   `json:"allow_self_signed_certificates"`
	FetchViaProxy               *bool   `json:"fetch_via_proxy"`
}

FeedModificationRequest represents the request to update a feed.

type Feeds

type Feeds []*Feed

Feeds represents a list of feeds.

type Filter

type Filter struct {
	Status        string
	Offset        int
	Limit         int
	Order         string
	Direction     string
	Starred       bool
	Before        int64
	After         int64
	BeforeEntryID int64
	AfterEntryID  int64
	Search        string
	CategoryID    int64
	FeedID        int64
	Statuses      []string
}

Filter is used to filter entries.

type Subscription

type Subscription struct {
	Title string `json:"title"`
	URL   string `json:"url"`
	Type  string `json:"type"`
}

Subscription represents a feed subscription.

func (Subscription) String

func (s Subscription) String() string

type Subscriptions

type Subscriptions []*Subscription

Subscriptions represents a list of subscriptions.

type User

type User struct {
	ID                int64      `json:"id"`
	Username          string     `json:"username"`
	Password          string     `json:"password,omitempty"`
	IsAdmin           bool       `json:"is_admin"`
	Theme             string     `json:"theme"`
	Language          string     `json:"language"`
	Timezone          string     `json:"timezone"`
	EntryDirection    string     `json:"entry_sorting_direction"`
	Stylesheet        string     `json:"stylesheet"`
	GoogleID          string     `json:"google_id"`
	OpenIDConnectID   string     `json:"openid_connect_id"`
	EntriesPerPage    int        `json:"entries_per_page"`
	KeyboardShortcuts bool       `json:"keyboard_shortcuts"`
	ShowReadingTime   bool       `json:"show_reading_time"`
	EntrySwipe        bool       `json:"entry_swipe"`
	LastLoginAt       *time.Time `json:"last_login_at"`
	DisplayMode       string     `json:"display_mode"`
}

User represents a user in the system.

func (User) String

func (u User) String() string

type UserCreationRequest

type UserCreationRequest struct {
	Username        string `json:"username"`
	Password        string `json:"password"`
	IsAdmin         bool   `json:"is_admin"`
	GoogleID        string `json:"google_id"`
	OpenIDConnectID string `json:"openid_connect_id"`
}

UserCreationRequest represents the request to create a user.

type UserModificationRequest

type UserModificationRequest struct {
	Username          *string `json:"username"`
	Password          *string `json:"password"`
	IsAdmin           *bool   `json:"is_admin"`
	Theme             *string `json:"theme"`
	Language          *string `json:"language"`
	Timezone          *string `json:"timezone"`
	EntryDirection    *string `json:"entry_sorting_direction"`
	Stylesheet        *string `json:"stylesheet"`
	GoogleID          *string `json:"google_id"`
	OpenIDConnectID   *string `json:"openid_connect_id"`
	EntriesPerPage    *int    `json:"entries_per_page"`
	KeyboardShortcuts *bool   `json:"keyboard_shortcuts"`
	ShowReadingTime   *bool   `json:"show_reading_time"`
	EntrySwipe        *bool   `json:"entry_swipe"`
	DisplayMode       *string `json:"display_mode"`
}

UserModificationRequest represents the request to update a user.

type Users

type Users []User

Users represents a list of users.