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
更多关于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应用中。