1
0
Fork 0
Fetch, filter and store arbitrary data using struct types and tags
Go to file
Alex Palaistras f90c734d05 farsight_test: Simplify subdoc test case 2016-06-02 12:46:07 +01:00
parser parser.go: Fix comment on Parse method for golint 2016-06-02 12:41:53 +01:00
source Rename interface types and methods for clarity 2016-05-30 22:50:25 +01:00
.editorconfig Add Travis, EditorConfig and README badges 2016-05-27 09:47:08 +01:00
.travis.yml Add Travis, EditorConfig and README badges 2016-05-27 09:47:08 +01:00
LICENSE Add MIT license file and file declarations 2016-05-26 01:54:52 +01:00
README.md README: Add Travis build badge 2016-05-27 09:54:04 +01:00
farsight.go Rename interface types and methods for clarity 2016-05-30 22:50:25 +01:00
farsight_test.go farsight_test: Simplify subdoc test case 2016-06-02 12:46:07 +01:00

README.md

Farsight - Fetch, filter, and store arbitrary data

API Documentation MIT License Build Status

Farsight facilitates the fetching and transformation of data from arbitrary sources into pre-defined structures, which can be further processed and serialised into other formats (such as JSON, YAML etc.).

A large amount of inspiration comes from the GoStruct project.

Usage

Farsight is very simple to use, and only exposes a single public method, Fetch. For example, this is the full package for a single-page HTML scraper:

package main

import (
	"fmt"
	"github.com/deuill/farsight"
)

var url = "https://deuill.org"

type Post struct {
	Title string `farsight:"h2"`
	Text  string `farsight:".post-text"`
}

type Data struct {
	Intro string `farsight:".post-text:first-of-type"`
	Posts []Post `farsight:".post-summary"`
}

func main() {
	data := &Data{}
	if err := farsight.Fetch(url, data, "html"); err != nil {
		panic("Failed to fetch URL")
	}

	fmt.Println(data.Posts[0].Title) // Returns the first post's title.
}

Calling the Fetch method on the Data type fills each eligible field with the correct data, as matched by the specified CSS selectors.

Overview

Data sourcing is handled via generic source types, that correspond to URIs passed to farsight.Fetch and allow for transparent use of different types of sources (such as local files, HTTP endpoints etc.).

Data transformation is handled via parser types, that rely on specific struct tag fields in order to fill the destination structures with the correct data. Thus, there is a direct relationship between the type of data the user expects to query against, and the parser type used.

License

Farsight is licensed under the MIT license, the terms of which can be found in the included LICENSE file.