golang跨平台网页存档机器人插件wayback的使用

Golang跨平台网页存档机器人插件Wayback的使用

Wayback是一个网页存档和回放工具,允许用户捕获和保存网页内容。它提供了IM风格的界面用于接收和展示存档的网页内容,以及搜索和回放服务用于检索之前存档的页面。

功能特性

  • 免费且开源
  • 暴露Prometheus指标
  • 跨平台兼容性
  • 批量存档URL以提高效率
  • 内置CLI工具(wayback)方便使用
  • 可作为Tor隐藏服务或本地Web入口提供隐私和可访问性
  • 轻松存档到Internet Archive、archive.today、IPFS和Telegraph
  • 作为守护进程服务与IRC、Matrix、Telegram机器人、Discord机器人、Mastodon、Twitter和XMPP交互
  • 支持将存档结果发布到Telegram频道、Mastodon和GitHub Issues
  • 支持将存档文件存储到磁盘供离线使用
  • 下载流媒体(需要FFmpeg)

安装方法

从源码安装

go install github.com/wabarc/wayback/cmd/wayback@latest

从GitHub Releases安装

curl -fsSL https://get.wabarc.eu.org | sh

使用Snapcraft安装(仅限GNU/Linux)

sudo snap install wayback

使用APT安装

curl -fsSL https://repo.wabarc.eu.org/apt/gpg.key | sudo gpg --dearmor -o /usr/share/keyrings/packages.wabarc.gpg
echo "deb [arch=amd64,arm64,armhf signed-by=/usr/share/keyrings/packages.wabarc.gpg] https://repo.wabarc.eu.org/apt/ /" | sudo tee /etc/apt/sources.list.d/wayback.list
sudo apt update
sudo apt install wayback

使用Homebrew安装

brew tap wabarc/wayback
brew install wayback

使用示例

基本使用

存档一个或多个URL到Internet Archive和archive.today:

wayback https://www.wikipedia.org

wayback https://www.fsf.org https://www.eff.org

指定存档目标

# 仅存档到Internet Archive
wayback --ia https://www.fsf.org

# 仅存档到archive.today
wayback --is https://www.fsf.org

# 仅存档到IPFS
wayback --ip https://www.fsf.org

使用IPFS pinning服务

export WAYBACK_SLOT=pinata
export WAYBACK_APIKEY=YOUR-PINATA-APIKEY
export WAYBACK_SECRET=YOUR-PINATA-SECRET
wayback --ip https://www.fsf.org

使用Telegram机器人

wayback --ia --is --ip -d telegram -t your-telegram-bot-token

同时发布消息到Telegram频道:

wayback --ia --is --ip -d telegram -t your-telegram-bot-token --chatid your-telegram-channel-name

调试模式

wayback -d telegram -t YOUR-BOT-TOKEN --debug

同时运行Telegram和Tor隐藏服务

wayback -d telegram -t YOUT-BOT-TOKEN -d web

从文件读取URL

wayback url.txt

# 或使用管道
cat url.txt | wayback

Docker/Podman部署

docker pull wabarc/wayback
docker run -d wabarc/wayback wayback -d telegram -t YOUR-BOT-TOKEN # 不带Telegram频道
docker run -d wabarc/wayback wayback -d telegram -t YOUR-BOT-TOKEN -c YOUR-CHANNEL-USERNAME # 带Telegram频道

完整示例代码

以下是一个使用Wayback Go库的完整示例:

package main

import (
	"context"
	"fmt"
	"log"
	"time"

	"github.com/wabarc/wayback"
	"github.com/wabarc/wayback/config"
	"github.com/wabarc/wayback/pooling"
	"github.com/wabarc/wayback/service"
)

func main() {
	// 初始化配置
	opts := config.Options{
		EnabledSlots: []string{"ia", "is", "ip"}, // 启用Internet Archive, archive.today和IPFS
		Debug:        true,                       // 启用调试模式
	}

	// 创建Wayback实例
	cfg, err := config.New(opts)
	if err != nil {
		log.Fatalf("创建配置失败: %v", err)
	}

	ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
	defer cancel()

	// 初始化Wayback服务
	wayback := service.New(ctx, cfg)
	defer wayback.Stop()

	// 创建存档池
	pool := pooling.New(ctx, cfg)
	defer pool.Stop()

	// 要存档的URL列表
	urls := []string{
		"https://www.wikipedia.org",
		"https://www.fsf.org",
	}

	// 提交URL到存档池
	for _, u := range urls {
		pool.Submit(u)
	}

	// 等待存档完成
	time.Sleep(5 * time.Second)

	// 获取存档结果
	results := pool.Results()
	for orig, arcs := range results {
		fmt.Printf("原始URL: %s\n", orig)
		for slot, url := range arcs {
			fmt.Printf("存档位置[%s]: %s\n", slot, url)
		}
		fmt.Println()
	}
}

配置参数

完整的配置选项列表可以参考环境变量文档

贡献指南

我们鼓励所有贡献!可以提交issue或Pull Request。如果您有兴趣贡献Wayback本身,请阅读我们的贡献指南

注意: 所有交互都应遵守行为准则

许可证

本软件采用GNU通用公共许可证v3.0发布。详情请参阅LICENSE文件。


更多关于golang跨平台网页存档机器人插件wayback的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于golang跨平台网页存档机器人插件wayback的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


Golang跨平台网页存档机器人插件Wayback使用指南

Wayback是一个用于网页存档的Golang库,它可以方便地将网页保存到Internet Archive的Wayback Machine或其他存档服务中。下面我将介绍如何在Golang项目中使用这个插件。

安装

首先安装wayback库:

go get -u github.com/wabarc/wayback

基本使用

简单存档示例

package main

import (
	"fmt"
	"log"

	"github.com/wabarc/wayback"
)

func main() {
	// 创建wayback实例
	wb := wayback.New(nil)

	// 要存档的URL
	urls := []string{"https://example.com", "https://github.com"}

	// 执行存档
	results, err := wb.Wayback(urls)
	if err != nil {
		log.Fatal(err)
	}

	// 打印结果
	for url, result := range results {
		fmt.Printf("URL: %s\n", url)
		fmt.Printf("存档链接: %s\n", result.ArchivedURL)
		fmt.Printf("存档时间: %s\n", result.Timestamp)
		fmt.Println("------------------")
	}
}

配置选项

Wayback支持多种配置选项:

package main

import (
	"fmt"
	"log"
	"time"

	"github.com/wabarc/wayback"
	"github.com/wabarc/wayback/config"
)

func main() {
	// 配置选项
	opts := &config.Options{
		Timeout:   30 * time.Second,  // 超时时间
		UserAgent: "MyArchiveBot/1.0", // 自定义User-Agent
		PoolingSize: 3,               // 并发池大小
	}

	// 创建wayback实例
	wb := wayback.New(opts)

	// 存档操作...
}

高级功能

多存档服务支持

Wayback支持多种存档服务:

package main

import (
	"fmt"
	"log"

	"github.com/wabarc/wayback"
	"github.com/wabarc/wayback/config"
)

func main() {
	opts := &config.Options{
		EnableIA:   true,  // Internet Archive
		EnableIS:   true,  // archive.today
		EnableIPFS: false, // IPFS
	}

	wb := wayback.New(opts)

	urls := []string{"https://example.com"}
	results, err := wb.Wayback(urls)
	if err != nil {
		log.Fatal(err)
	}

	for url, result := range results {
		fmt.Printf("URL: %s\n", url)
		fmt.Printf("Internet Archive: %s\n", result.IA)
		fmt.Printf("archive.today: %s\n", result.IS)
	}
}

自定义存档服务

package main

import (
	"fmt"
	"log"

	"github.com/wabarc/wayback"
	"github.com/wabarc/wayback/config"
	"github.com/wabarc/wayback/service"
)

func main() {
	// 自定义存档服务
	customService := &service.Archiver{
		Name: "MyArchive",
		Wayback: func(url string) (string, error) {
			// 实现自定义存档逻辑
			return "https://my-archive.example.com/saved/" + url, nil
		},
	}

	opts := &config.Options{
		CustomServices: []*service.Archiver{customService},
	}

	wb := wayback.New(opts)

	urls := []string{"https://example.com"}
	results, err := wb.Wayback(urls)
	if err != nil {
		log.Fatal(err)
	}

	for url, result := range results {
		fmt.Printf("URL: %s\n", url)
		fmt.Printf("MyArchive: %s\n", result.Custom["MyArchive"])
	}
}

错误处理

package main

import (
	"fmt"
	"log"

	"github.com/wabarc/wayback"
)

func main() {
	wb := wayback.New(nil)

	urls := []string{"https://example.com", "invalid-url"}

	results, err := wb.Wayback(urls)
	if err != nil {
		// 检查是否是部分失败
		if wayback.IsPartialError(err) {
			partialErr := err.(*wayback.PartialError)
			for url, err := range partialErr.Errors {
				log.Printf("存档 %s 失败: %v", url, err)
			}
		} else {
			log.Fatal(err)
		}
	}

	// 处理成功的结果
	for url, result := range results {
		if result != nil {
			fmt.Printf("成功存档: %s -> %s\n", url, result.ArchivedURL)
		}
	}
}

实际应用示例

下面是一个完整的命令行工具示例,可以存档多个URL并输出结果:

package main

import (
	"flag"
	"fmt"
	"log"
	"os"
	"strings"

	"github.com/wabarc/wayback"
)

func main() {
	// 命令行参数
	urls := flag.String("urls", "", "要存档的URL列表,用逗号分隔")
	output := flag.String("output", "text", "输出格式 (text/json)")
	flag.Parse()

	if *urls == "" {
		fmt.Println("请使用 -urls 参数指定要存档的URL")
		os.Exit(1)
	}

	// 分割URL
	urlList := strings.Split(*urls, ",")

	// 创建wayback实例
	wb := wayback.New(nil)

	// 执行存档
	results, err := wb.Wayback(urlList)
	if err != nil {
		log.Fatal(err)
	}

	// 输出结果
	switch *output {
	case "json":
		// JSON输出
		fmt.Println(results.JSON())
	default:
		// 文本输出
		for url, result := range results {
			fmt.Printf("原始URL: %s\n", url)
			fmt.Printf("存档链接: %s\n", result.ArchivedURL)
			fmt.Printf("存档时间: %s\n", result.Timestamp)
			fmt.Println("------------------")
		}
	}
}

使用方式:

go run main.go -urls "https://example.com,https://github.com" -output json

总结

Wayback是一个功能强大且灵活的Golang网页存档库,主要特点包括:

  • 支持多种存档服务(Internet Archive、archive.today等)
  • 支持自定义存档服务
  • 并发处理多个URL
  • 丰富的配置选项
  • 详细的错误处理

通过上述示例,您可以轻松地将网页存档功能集成到您的Golang应用中。

回到顶部