summaly

package module
v0.0.2 Latest Latest
Warning

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

Go to latest
Published: Jul 14, 2024 License: MIT Imports: 15 Imported by: 0

README

summaly

Go Reference GitHub go.mod Go version GitHub Tag GitHub Release

fork of misskey-dev/summaly

  • Go版

Installation

go install github.com/yulog/go-summaly/cmd/summaly@latest

🚧 工事中 🚧

Usage

サーバーとして:

summaly
http://localhost:1323/?url=https://example.com

コンテナとして:

services:

  summaly:
    image: ghcr.io/yulog/go-summaly:latest
    ports:
      - "8080:1323"
    environment:
      - PORT=$PORT
      - TIMEOUT=$TIMEOUT
      - REQUIRE_NON_BOT_UA_FILE=$REQUIRE_NON_BOT_UA_FILE
    volumes:
      - type: bind
        source: "./nonbot.txt"
        target: "/nonbot.txt"
Options

See environments.md

Plugins

未対応

urls are WHATWG URL since v4.

Returns

A Promise of an Object that contains properties below:

※ Almost all values are nullable. player should not be null.

Root
Property Type Description
title string The title of the web page
icon string The url of the icon of the web page
description string The description of the web page
thumbnail string The url of the thumbnail of the web page
player Player The player of the web page
sitename string The name of the web site
sensitive boolean Whether the url is sensitive
url string The url of the web page
Player
Property Type Description
url string The url of the player
width number | null The width of the player
height number | null The height of the player
allow string[] The names of the allowed permissions for iframe

Currently the possible items in allow are:

  • autoplay
  • clipboard-write
  • fullscreen
  • encrypted-media
  • picture-in-picture
  • web-share

See Permissions Policy in MDN for details of them.

Example
package main

import (
	"encoding/json"
	"fmt"

	"github.com/yulog/go-summaly"
	"github.com/yulog/go-summaly/fetch"
)

var c = fetch.NewClient(fetch.ClientOpts{})

func main() {
	u, _ := url.Parse("https://www.youtube.com/watch?v=NMIEAhH_fTU")
	summary, _ := summaly.New(u, c).Do()

	v, _ := json.Marshal(summary)

	fmt.Println(string(v))
}

will be ... ↓

{
	"title": "【アイドルマスター】「Stage Bye Stage」(歌:島村卯月、渋谷凛、本田未央)",
	"icon": "https://www.gstatic.com/youtube/img/web/monochrome/logo_512x512.png",
	"description": "Website▶https://columbia.jp/idolmaster/Playlist▶https://www.youtube.com/playlist?list=PL83A2998CF3BBC86D2018年7月18日発売予定THE IDOLM@STER CINDERELLA GIRLS CG STAR...",
	"thumbnail": "https://i.ytimg.com/vi/NMIEAhH_fTU/maxresdefault.jpg",
	"player": {
		"url": "https://www.youtube.com/embed/NMIEAhH_fTU?feature=oembed",
		"width": 200,
		"height": 113,
		"allow": [
			"autoplay",
			"clipboard-write",
			"encrypted-media",
			"picture-in-picture",
			"web-share",
			"fullscreen"
		]
	},
	"sitename": "YouTube",
	"sensitive": false,
	"url": "https://www.youtube.com/watch?v=NMIEAhH_fTU"
}

Testing

go test

License

MIT

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func CleanupTitle

func CleanupTitle(title, siteName string) string

CleanupTitle は title から siteName を除去する

func Clip

func Clip(s string, max int) string

Clip は s を max で切り取る

func WithBotUA

func WithBotUA(ua string) func(*Summaly)

func WithLang

func WithLang(lang string) func(*Summaly)

func WithNonBotUA

func WithNonBotUA(ua string) func(*Summaly)

func WithRequireNonBot

func WithRequireNonBot(nonbot []string) func(*Summaly)

func WithUserAgent

func WithUserAgent(ua string) func(*Summaly)

Types

type General

type General struct{}

type Option

type Option func(*Summaly)

type Player

type Player struct {
	URL    string   `json:"url,omitempty"`
	Width  *any     `json:"width,omitempty"`
	Height *any     `json:"height,omitempty"`
	Allow  []string `json:"allow,omitempty"`
}

TODO: 不要な部分はomitemptyでも良い?nullにしないとダメ?

func GetOembedPlayer

func GetOembedPlayer(client *fetch.Client, doc *goquery.Document, ua string) (*Player, error)

type Summaly

type Summaly struct {
	URL             *url.URL
	Lang            string
	UserAgent       string
	BotUserAgent    string
	NonBotUserAgent string
	RequireNonBot   []string
	Body            []byte
	Node            *html.Node

	Client *fetch.Client
}

func New

func New(u *url.URL, c *fetch.Client, options ...Option) *Summaly

func (*Summaly) Do

func (s *Summaly) Do() (Summary, error)

func (*Summaly) ResolveUserAgent

func (s *Summaly) ResolveUserAgent() *Summaly

type Summarizer

type Summarizer interface {
	// contains filtered or unexported methods
}

type Summary

type Summary struct {
	Title       string  `json:"title"`
	Icon        string  `json:"icon"`
	Description string  `json:"description"`
	Thumbnail   string  `json:"thumbnail"`
	Player      *Player `json:"player,omitempty"`
	Sitename    string  `json:"sitename"`
	Sensitive   bool    `json:"sensitive"`
	URL         string  `json:"url"`
}

TODO: 不要な部分はomitemptyでも良い?nullにしないとダメ?

Directories

Path Synopsis
cmd

Jump to

Keyboard shortcuts

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