Files
Fabric/internal/tools/jina/jina.go
Kayvan Sylvan 7570e7930b feat: localize setup process and add funding configuration
- Add GitHub and Buy Me a Coffee funding configuration.
- Localize setup prompts and error messages across multiple languages.
- Implement helper for localized questions with static environment keys.
- Update environment variable builder to handle hyphenated plugin names.
- Replace hardcoded console output with localized i18n translation strings.
- Expand locale files with comprehensive pattern and strategy translations.
- Add new i18n keys for optional and required markers
- Remove hardcoded `[required]` markers from description strings
- Add custom patterns, Jina AI, YouTube, and language labels
- Switch plugin descriptions to use i18n translation keys
- Append markers dynamically to setup descriptions in Go code
- Remove trailing newlines from plugin question prompt strings
- Standardize all locale files with consistent formatting changes
2025-12-22 09:39:02 -08:00

73 lines
1.7 KiB
Go

package jina
// see https://jina.ai for more information
import (
"fmt"
"io"
"net/http"
"github.com/danielmiessler/fabric/internal/i18n"
"github.com/danielmiessler/fabric/internal/plugins"
)
type Client struct {
*plugins.PluginBase
ApiKey *plugins.SetupQuestion
}
func NewClient() (ret *Client) {
label := "Jina AI"
ret = &Client{
PluginBase: &plugins.PluginBase{
Name: i18n.T("jina_label"),
SetupDescription: i18n.T("jina_setup_description") + " " + i18n.T("optional_marker"),
EnvNamePrefix: plugins.BuildEnvVariablePrefix(label),
},
}
ret.ApiKey = ret.AddSetupQuestion("API Key", false)
return
}
// ScrapeURL return the main content of a webpage in clean, LLM-friendly text.
func (jc *Client) ScrapeURL(url string) (ret string, err error) {
return jc.request(fmt.Sprintf("https://r.jina.ai/%s", url))
}
func (jc *Client) ScrapeQuestion(question string) (ret string, err error) {
return jc.request(fmt.Sprintf("https://s.jina.ai/%s", question))
}
func (jc *Client) request(requestURL string) (ret string, err error) {
var req *http.Request
if req, err = http.NewRequest("GET", requestURL, nil); err != nil {
err = fmt.Errorf("error creating request: %w", err)
return
}
// if api keys exist, set the header
if jc.ApiKey.Value != "" {
req.Header.Set("Authorization", "Bearer "+jc.ApiKey.Value)
}
client := &http.Client{}
var resp *http.Response
if resp, err = client.Do(req); err != nil {
err = fmt.Errorf("error sending request: %w", err)
return
}
defer resp.Body.Close()
var body []byte
if body, err = io.ReadAll(resp.Body); err != nil {
err = fmt.Errorf("error reading response body: %w", err)
return
}
ret = string(body)
return
}