From e17fa34a36835930a0ec1678e086f450cb9aa620 Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Sun, 27 Oct 2024 11:57:34 +0200 Subject: jo --- internal/platforms/linkedin/preview.go | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/internal/platforms/linkedin/preview.go b/internal/platforms/linkedin/preview.go index 3d2b556..1c0e5a7 100644 --- a/internal/platforms/linkedin/preview.go +++ b/internal/platforms/linkedin/preview.go @@ -2,12 +2,16 @@ package linkedin import ( "context" + "errors" "fmt" + "log" "net/http" "golang.org/x/net/html" ) +var errNoTitleElementFound = errors.New("no title element found") + type preview struct { title, url string } @@ -16,8 +20,9 @@ func NewPreview(ctx context.Context, urls []string) (preview, error) { if len(urls) == 0 { return preview{}, nil } - title, err := fetchTitle(ctx, urls[0]) - if err == nil && title == "" { + title, err := fetchHTMLTitle(ctx, urls[0]) + if errors.Is(err, errNoTitleElementFound) || (err == nil && title == "") { + log.Println("Setting title to", urls[0]) title = urls[0] } return preview{title: title, url: urls[0]}, err @@ -31,16 +36,15 @@ func (p preview) Empty() bool { return p.url == "" } -// fetchTitle fetches the HTML page at the given URL and returns the content of the tag. -func fetchTitle(ctx context.Context, url string) (string, error) { +func fetchHTMLTitle(ctx context.Context, url string) (string, error) { req, err := http.NewRequestWithContext(ctx, http.MethodGet, url, nil) if err != nil { - return "", fmt.Errorf("failed to create request: %v", err) + return "", fmt.Errorf("failed to create request: %w", err) } resp, err := http.DefaultClient.Do(req) if err != nil { - return "", fmt.Errorf("failed to get URL: %v", err) + return "", fmt.Errorf("failed to get URL: %w", err) } defer resp.Body.Close() @@ -48,10 +52,9 @@ func fetchTitle(ctx context.Context, url string) (string, error) { return "", fmt.Errorf("failed to get a successful response: %v", resp.StatusCode) } - // Parse the HTML document doc, err := html.Parse(resp.Body) if err != nil { - return "", fmt.Errorf("failed to parse HTML: %v", err) + return "", fmt.Errorf("failed to parse HTML: %w", err) } // Traverse the document and find the <title> tag @@ -73,8 +76,7 @@ func fetchTitle(ctx context.Context, url string) (string, error) { f(doc) if title == "" { - return "", fmt.Errorf("no title element found") + return "", errNoTitleElementFound } - return title, nil } -- cgit v1.2.3