All Projects → dyatlov → go-opengraph

dyatlov / go-opengraph

Licence: MIT license
Golang package for parsing OpenGraph data from HTML into regular structures

Programming Languages

go
31211 projects - #10 most used programming language

Projects that are alternatives of or similar to go-opengraph

Micro Open Graph
A tiny Node.js microservice to scrape open graph data with joy.
Stars: ✭ 371 (+462.12%)
Mutual labels:  opengraph
Wordpress Seo
Yoast SEO for WordPress
Stars: ✭ 1,301 (+1871.21%)
Mutual labels:  opengraph
Ngmeta
Dynamic meta tags in your AngularJS single page application
Stars: ✭ 152 (+130.3%)
Mutual labels:  opengraph
Essence
Extracts information about web pages, like youtube videos, twitter statuses or blog articles.
Stars: ✭ 734 (+1012.12%)
Mutual labels:  opengraph
Yoast Seo For Typo3
Yoast SEO plugin for TYPO3
Stars: ✭ 43 (-34.85%)
Mutual labels:  opengraph
Opengraph
A Swift wrapper for the Open Graph protocol (OGP).
Stars: ✭ 97 (+46.97%)
Mutual labels:  opengraph
All In One Seo Pack
All in One SEO Pack plugin for WordPress SEO
Stars: ✭ 281 (+325.76%)
Mutual labels:  opengraph
Laravelmetatags
The most powerful and extendable tools for managing SEO Meta Tags in your Laravel project
Stars: ✭ 226 (+242.42%)
Mutual labels:  opengraph
Page Renderer
Clojure PWA generator. Offline-ready web apps with service workers, social meta and async stylesheets.
Stars: ✭ 76 (+15.15%)
Mutual labels:  opengraph
Embed
Get info from any web service or page
Stars: ✭ 1,808 (+2639.39%)
Mutual labels:  opengraph
Ultimate Metatags
A large snippet for your page's <head> that includes all the meta tags you'll need for OPTIMAL sharing and SEO. Extensive work has been put into ensuring you have the optimal images for the most important social media platforms.
Stars: ✭ 24 (-63.64%)
Mutual labels:  opengraph
Gauguin
🎨 High performances Golang server for generating open graph images dynamically.
Stars: ✭ 36 (-45.45%)
Mutual labels:  opengraph
Open Graph
Library that assists in building Open Graph meta tags
Stars: ✭ 112 (+69.7%)
Mutual labels:  opengraph
Extruct
Extract embedded metadata from HTML markup
Stars: ✭ 573 (+768.18%)
Mutual labels:  opengraph
Seotools
SEO Tools for Laravel
Stars: ✭ 2,406 (+3545.45%)
Mutual labels:  opengraph
The Seo Framework
The SEO Framework WordPress plugin.
Stars: ✭ 329 (+398.48%)
Mutual labels:  opengraph
Social Links
Simple library to count shares and generate share buttons
Stars: ✭ 91 (+37.88%)
Mutual labels:  opengraph
SeoTags
SeoTags create all SEO tags you need such as meta, link, twitter card (twitter:), open graph (og:), and JSON-LD schema (structred data).
Stars: ✭ 113 (+71.21%)
Mutual labels:  opengraph
Meta Tags
Search Engine Optimization (SEO) for Ruby on Rails applications.
Stars: ✭ 2,464 (+3633.33%)
Mutual labels:  opengraph
Puppeteer Social Image
Create dynamic social share images using HTML + CSS via puppeteer 🎁
Stars: ✭ 141 (+113.64%)
Mutual labels:  opengraph

Go OpenGraph

Parses given html data into Facebook OpenGraph structure.

To download and install this package run:

go get github.com/dyatlov/go-opengraph/opengraph

NOTE: if you need to grab as much info from a page as possible consider using dyatlov/go-htmlinfo

The package supports the whole set of OpenGraph properties from The Open Graph protocol.

Command line tool

You can also use opengraph from CLI. You can download latest version of opengraph for your OS from Releases.

You can query website endpoints using the tool directly or use it with other tools for your own workflows.

Example usages:

# download and parse html page
./opengraph https://www.youtube.com/watch\?v\=yhoI42bdwU4
# parse piped html
curl https://www.youtube.com/watch\?v\=yhoI42bdwU4 | ./opengraph
# get video image
./opengraph https://www.youtube.com/watch\?v\=yhoI42bdwU4 | jq '.images[0].url'

Package Methods

  • NewOpenGraph() - create a new OpenGraph instance
  • ProcessHTML(buffer io.Reader) error - process given html into underlying data structure
  • ProcessMeta(metaAttrs map[string]string) - add data to the structure based on meta attributes
  • ToJSON() (string, error) - return JSON representation of data or error
  • String() string - return JSON representation of structure

Source docs: http://godoc.org/github.com/dyatlov/go-opengraph/opengraph

If you just need to parse an OpenGraph data from HTML then method ProcessHTML is your needed one.

Example:

package main

import (
  "fmt"
  "strings"

  "github.com/dyatlov/go-opengraph/opengraph"
)

func main() {
  html := `<html><head><meta property="og:type" content="article" />
  <meta property="og:title" content="WordPress 4.3 &quot;Billie&quot;" />
  <meta property="og:url" content="https://wordpress.org/news/2015/08/billie/" /></head><body></body></html>`

  og := opengraph.NewOpenGraph()
  err := og.ProcessHTML(strings.NewReader(html))

  if err != nil {
    fmt.Println(err)
    return
  }

  fmt.Printf("Type: %s\n", og.Type)
  fmt.Printf("Title: %s\n", og.Title)
  fmt.Printf("URL: %s\n", og.URL)
  fmt.Printf("String/JSON Representation: %s\n", og)
}

If you have your own parsing engine and just need an intelligent OpenGraph parsing, then ProcessMeta is the method you need. While using this method you don't need to reparse your parsed html again, just feed it with meta atributes as they appear and OpenGraph will be built based on the data.

Example:

package main

import (
	"fmt"
	"strings"

	"github.com/dyatlov/go-opengraph/opengraph"
	"golang.org/x/net/html"
)

func main() {
	h := `<html><head><meta property="og:type" content="article" />
  <meta property="og:title" content="WordPress 4.3 &quot;Billie&quot;" />
  <meta property="og:url" content="https://wordpress.org/news/2015/08/billie/" /></head><body></body></html>`

	og := opengraph.NewOpenGraph()

	doc, err := html.Parse(strings.NewReader(h))
	if err != nil {
		fmt.Println(err)
		return
	}

	var parseHead func(*html.Node)
	parseHead = func(n *html.Node) {
		for c := n.FirstChild; c != nil; c = c.NextSibling {
			if c.Type == html.ElementNode && c.Data == "meta" {
				m := make(map[string]string)
				for _, a := range c.Attr {
					m[a.Key] = a.Val
				}

				og.ProcessMeta(m)
			}
		}
	}

	var f func(*html.Node)
	f = func(n *html.Node) {
		for c := n.FirstChild; c != nil; c = c.NextSibling {
			if c.Type == html.ElementNode {
				if c.Data == "head" {
					parseHead(c)
					continue
				} else if c.Data == "body" { // OpenGraph is only in head, so we don't need body
					break
				}
			}
			f(c)
		}
	}
	f(doc)

	fmt.Printf("Type: %s\n", og.Type)
	fmt.Printf("Title: %s\n", og.Title)
	fmt.Printf("URL: %s\n", og.URL)
	fmt.Printf("String/JSON Representation: %s\n", og)
}
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].