| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- // Copyright 2018 Frédéric Guillot. All rights reserved.
- // Use of this source code is governed by the Apache 2.0
- // license that can be found in the LICENSE file.
- package parser // import "miniflux.app/reader/parser"
- import (
- "encoding/xml"
- "strings"
- rxml "miniflux.app/reader/xml"
- )
- // List of feed formats.
- const (
- FormatRDF = "rdf"
- FormatRSS = "rss"
- FormatAtom = "atom"
- FormatJSON = "json"
- FormatUnknown = "unknown"
- )
- // DetectFeedFormat tries to guess the feed format from input data.
- func DetectFeedFormat(data string) string {
- if strings.HasPrefix(strings.TrimSpace(data), "{") {
- return FormatJSON
- }
- decoder := rxml.NewDecoder(strings.NewReader(data))
- for {
- token, _ := decoder.Token()
- if token == nil {
- break
- }
- if element, ok := token.(xml.StartElement); ok {
- switch element.Name.Local {
- case "rss":
- return FormatRSS
- case "feed":
- return FormatAtom
- case "RDF":
- return FormatRDF
- }
- }
- }
- return FormatUnknown
- }
|