forked from ukamnya/microdata_mirror
		
	Compare commits
	
		
			No commits in common. "master" and "master" have entirely different histories.
		
	
	
		
	
		
							
								
								
									
										2
									
								
								go.mod
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								go.mod
									
									
									
									
									
								
							@ -1,4 +1,4 @@
 | 
			
		||||
module git.ukamnya.ru/ukamnya/microdata
 | 
			
		||||
module github.com/iand/microdata
 | 
			
		||||
 | 
			
		||||
go 1.21.4
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										40
									
								
								microdata.go
									
									
									
									
									
								
							
							
						
						
									
										40
									
								
								microdata.go
									
									
									
									
									
								
							@ -31,7 +31,7 @@ type Item struct {
 | 
			
		||||
// NewItem creates a new microdata item
 | 
			
		||||
func NewItem() *Item {
 | 
			
		||||
	return &Item{
 | 
			
		||||
		Properties: make(propertyMap),
 | 
			
		||||
		Properties: make(propertyMap, 0),
 | 
			
		||||
		Types:      make([]string, 0),
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@ -104,7 +104,7 @@ func (p *Parser) Parse() (*Microdata, error) {
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	topLevelItemNodes := make([]*html.Node, 0)
 | 
			
		||||
	p.identifiedNodes = make(map[string]*html.Node)
 | 
			
		||||
	p.identifiedNodes = make(map[string]*html.Node, 0)
 | 
			
		||||
 | 
			
		||||
	walk(tree, func(n *html.Node) {
 | 
			
		||||
		if n.Type == html.ElementNode {
 | 
			
		||||
@ -171,47 +171,39 @@ func (p *Parser) readItem(item *Item, node *html.Node) *Item {
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		} else {
 | 
			
		||||
			var propertyValue *string
 | 
			
		||||
			var propertyValue string
 | 
			
		||||
 | 
			
		||||
			switch node.DataAtom {
 | 
			
		||||
			case atom.Meta:
 | 
			
		||||
				if val, exists := getAttr("content", node); exists {
 | 
			
		||||
					propertyValue = &val
 | 
			
		||||
					propertyValue = val
 | 
			
		||||
				}
 | 
			
		||||
			case atom.Audio, atom.Embed, atom.Iframe, atom.Img, atom.Source, atom.Track, atom.Video:
 | 
			
		||||
				if urlValue, exists := getAttr("src", node); exists {
 | 
			
		||||
					if parsedURL, err := p.base.Parse(urlValue); err == nil {
 | 
			
		||||
						parsedStr := parsedURL.String()
 | 
			
		||||
						propertyValue = &parsedStr
 | 
			
		||||
						propertyValue = parsedURL.String()
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			case atom.A, atom.Area, atom.Link:
 | 
			
		||||
				if urlValue, exists := getAttr("href", node); exists {
 | 
			
		||||
					if parsedURL, err := p.base.Parse(urlValue); err == nil {
 | 
			
		||||
						parsedStr := parsedURL.String()
 | 
			
		||||
						propertyValue = &parsedStr
 | 
			
		||||
						propertyValue = parsedURL.String()
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			case atom.Object:
 | 
			
		||||
				if urlValue, exists := getAttr("data", node); exists {
 | 
			
		||||
					propertyValue = &urlValue
 | 
			
		||||
					propertyValue = urlValue
 | 
			
		||||
				}
 | 
			
		||||
			case atom.Data, atom.Meter:
 | 
			
		||||
				if urlValue, exists := getAttr("value", node); exists {
 | 
			
		||||
					propertyValue = &urlValue
 | 
			
		||||
					propertyValue = urlValue
 | 
			
		||||
				}
 | 
			
		||||
			case atom.Time:
 | 
			
		||||
				if urlValue, exists := getAttr("datetime", node); exists {
 | 
			
		||||
					propertyValue = &urlValue
 | 
			
		||||
					propertyValue = urlValue
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
			default:
 | 
			
		||||
				// The "content" attribute can be found on other tags besides the meta tag.
 | 
			
		||||
				if val, ok := getAttr("content", node); ok {
 | 
			
		||||
					propertyValue = &val
 | 
			
		||||
					break
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				var text bytes.Buffer
 | 
			
		||||
				walk(node, func(n *html.Node) {
 | 
			
		||||
					if n.Type == html.TextNode {
 | 
			
		||||
@ -219,22 +211,14 @@ func (p *Parser) readItem(item *Item, node *html.Node) *Item {
 | 
			
		||||
					}
 | 
			
		||||
 | 
			
		||||
				})
 | 
			
		||||
 | 
			
		||||
				val := text.String()
 | 
			
		||||
				propertyValue = &val
 | 
			
		||||
				propertyValue = text.String()
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			if propertyValue == nil {
 | 
			
		||||
				if val, ok := getAttr("content", node); ok {
 | 
			
		||||
					propertyValue = &val
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			if propertyValue != nil {
 | 
			
		||||
			if len(propertyValue) > 0 {
 | 
			
		||||
				for _, propertyName := range strings.Split(strings.TrimSpace(itemprop), " ") {
 | 
			
		||||
					propertyName = strings.TrimSpace(propertyName)
 | 
			
		||||
					if propertyName != "" {
 | 
			
		||||
						item.AddString(propertyName, *propertyValue)
 | 
			
		||||
						item.AddString(propertyName, propertyValue)
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user