Skip to main content

Go Client

A Go client library for the WaterCrawl API. This client provides a simple and intuitive way to interact with WaterCrawl's web crawling service.

Installation

go get github.com/watercrawl/watercrawl-go

Usage

Initialize the client

import "github.com/watercrawl/watercrawl-go"

client := watercrawl.NewClient("your-api-key", "") // Empty string uses default base URL

Create a crawl request

ctx := context.Background()
input := watercrawl.CreateCrawlRequestInput{
URL: "https://example.com",
Options: watercrawl.CrawlOptions{
SpiderOptions: map[string]interface{}{
"allowed_domains": []string{"example.com"},
},
PageOptions: map[string]interface{}{
"wait_x": "#content",
},
PluginOptions: map[string]interface{}{
},
},
}

result, err := client.CreateCrawlRequest(ctx, input)
if err != nil {
log.Fatal(err)
}

Monitor a crawl request

events, err := client.MonitorCrawlRequest(ctx, result.UUID, true)
if err != nil {
log.Fatal(err)
}

for event := range events {
switch event.Type {
case "progress":
fmt.Printf("Progress: %v\n", event.Data)
case "result":
fmt.Printf("Result: %v\n", event.Data)
}
}

Quick URL scraping

pageOptions := map[string]interface{}{
"wait_for": "#content",
}
pluginOptions := map[string]interface{}{
"extract_links": true,
}

// Synchronous scraping with automatic download
result, err := client.ScrapeURL(ctx, "https://example.com", pageOptions, pluginOptions, true, true)
if err != nil {
log.Fatal(err)
}
fmt.Printf("Scraped data: %v\n", result)

List crawl requests

list, err := client.GetCrawlRequests(ctx, 1, 10)  // Page 1, 10 items per page
if err != nil {
log.Fatal(err)
}

for _, request := range list.Results {
fmt.Printf("Request %s: %s\n", request.UUID, request.Status)
}

Get crawl request details

request, err := client.GetCrawlRequest(ctx, "request-uuid")
if err != nil {
log.Fatal(err)
}

Stop a crawl request

err := client.StopCrawlRequest(ctx, "request-uuid")
if err != nil {
log.Fatal(err)
}

Download crawl results

results, err := client.DownloadCrawlRequest(ctx, "request-uuid")
if err != nil {
log.Fatal(err)
}

Get crawl request results

results, err := client.GetCrawlRequestResults(ctx, "request-uuid", 1, 10)
if err != nil {
log.Fatal(err)
}

for _, result := range results.Results {
fmt.Printf("Result for URL %s: %v\n", result.URL, result.Data)
}

Error Handling

The SDK uses standard Go error handling patterns. All methods that can fail return an error as their last return value. You should always check these errors before using the returned values.

Contributing

Please see CONTRIBUTING.md for details on how to contribute to this project.

License

This project is licensed under the MIT License - see the LICENSE file for details.