opinions

package module
v1.3.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 1, 2023 License: MIT Imports: 10 Imported by: 0

README

opinions

Quality check status

Find opinions about given phrase (also URL) on social news websites:

It can be used for including discussions on static websites/blogs.

opinions is command-line replacement of discu.eu service. It directly calls search engines on underlying websites.

Application is developed with security-first approach:

  • functionality is limited by design
  • access to the OS is restricted by application-level sandboxing (with pledge and seccomp).

Usage

$ opinions 'https://grugbrain.dev'
Lemmy	https://lemmy.world/post/5189937	The Grug Brained Developer - A layman's guide to thinking like the self-aware smol brained	https://grugbrain.dev/
Lemmy	https://lemmy.world/post/750451	The Grug Brained Developer	https://grugbrain.dev/
Lemmy	https://lemmy.world/post/685510	The Grug Brained Developer	https://grugbrain.dev/
Hacker News	https://news.ycombinator.com/item?id=31840331	The Grug Brained Developer	https://grugbrain.dev/
Hacker News	https://news.ycombinator.com/item?id=38076886	The Grug Brained Developer (2022)	https://grugbrain.dev/
Lobsters	https://lobste.rs/s/ifaar4/grug_brained_developer	The Grug Brained Developer	https://grugbrain.dev/
Lobsters	https://lobste.rs/s/pmpc9v/grug_brained_developer	The Grug Brained Developer	http://grugbrain.dev

The result is printed to stdout as rows in format: <service_name><tab><URL><tab><title><tab><source_domain>.

Websites are queried with User-Agent: opinions/<version_number> (<os>; +https://github.com/macie/opinions).

Installation

Download latest stable release from GitHub .

You can also build it manually with commands: make && make build (or without sandboxing: make && make unsafe).

Development

Use make (GNU or BSD):

  • make - install dependencies
  • make test - runs test
  • make check - static code analysis
  • make build - compile binaries from latest commit for supported OSes (with proper version number)
  • make unsafe - compile binaries from latest commit without security sandbox
  • make release - mark latest commit with choosen version tag and compile binaries for supported OSes
  • make clean - removes compilation artifacts
  • make info - print system info (useful for debugging).

Bugs

Results depends on search engines of underlying social news websites. They may be different than expected.

TODO

License

MIT

Documentation

Overview

Package opinions helps finding links to discussions about given topics/URLs on social news websites.

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Discussion

type Discussion struct {
	Service  string
	URL      string
	Title    string
	Source   string
	Comments int
}

Discussion is a representation of discussion inside social media service.

func SearchHackerNews

func SearchHackerNews(ctx context.Context, client http.Client, query string) ([]Discussion, error)

SearchHackerNews query HN Search API for given prompt. It returns list of discussions sorted by relevance, then popularity, then number of comments.

See: https://hn.algolia.com/api

Example
client := http.Client{}
query := "grugbrain.dev"

opinions := ensure.MustReturn(SearchHackerNews(context.TODO(), client, query))

fmt.Println(opinions[0])
Output:
Hacker News	https://news.ycombinator.com/item?id=31840331	The Grug Brained Developer	https://grugbrain.dev/

func SearchLemmy added in v1.3.0

func SearchLemmy(ctx context.Context, client http.Client, query string) ([]Discussion, error)

SearchLemmy query Lemmy Search API for given prompt. It returns list of discussions sorted by rank based on the score and time of the latest comment, with decay over time.

See: https://join-lemmy.org/docs/users/03-votes-and-ranking.html

Example
client := http.Client{}
query := "https://grugbrain.dev/"

opinions := ensure.MustReturn(SearchLemmy(context.TODO(), client, query))

fmt.Println(opinions[0])
Output:
Lemmy	https://lemmy.world/post/7563451	The Grug Brained Developer (2022)	https://grugbrain.dev/

func SearchLobsters

func SearchLobsters(ctx context.Context, client http.Client, query string) ([]Discussion, error)

SearchLobsters query Lobsters search engine for given prompt. It returns list of discussions sorted by relevance.

Example
client := http.Client{}
query := "https://grugbrain.dev"

opinions := ensure.MustReturn(SearchLobsters(context.TODO(), client, query))

fmt.Println(opinions[0])
Output:
Lobsters	https://lobste.rs/s/ifaar4/grug_brained_developer	The Grug Brained Developer	https://grugbrain.dev/

func (Discussion) String

func (d Discussion) String() string

String returns string representation of discussion metadata.

type HackerNewsResponse

type HackerNewsResponse struct {
	Hits []struct {
		CreatedAt   time.Time `json:"created_at"`
		Title       string    `json:"title"`
		URL         string    `json:"url"`
		NumComments int       `json:"num_comments"`
		ObjectID    string    `json:"objectID"`
	} `json:"hits"`
}

HackerNewsResponse represents some interesting fields of response from HN Search API.

See: https://hn.algolia.com/api

type LemmyResponse added in v1.3.0

type LemmyResponse struct {
	Posts []struct {
		Post struct {
			ID   int    `json:"id"`
			Name string `json:"name"`
			URL  string `json:"url"`
		} `json:"post"`
		Counts struct {
			Comments int `json:"comments"`
		} `json:"counts"`
	} `json:"posts"`
}

LemmyResponse represents some interesting fields of response from Lemmy Search API.

See: https://join-lemmy.org/api/interfaces/SearchResponse.html

Directories

Path Synopsis
Package ensure contains helpers for testable examples.
Package ensure contains helpers for testable examples.
Package http implements cancellable REST requests with custom User-Agent.
Package http implements cancellable REST requests with custom User-Agent.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL