summaryrefslogtreecommitdiff
path: root/internal/platforms
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2024-10-27 11:57:34 +0200
committerPaul Buetow <paul@buetow.org>2024-10-27 11:57:34 +0200
commite17fa34a36835930a0ec1678e086f450cb9aa620 (patch)
tree0c67433f00574cd674b44e244fb580d9f2ba97b9 /internal/platforms
parent42f41d6def543e596a68b2ac1d9836913b51f86f (diff)
jo
Diffstat (limited to 'internal/platforms')
-rw-r--r--internal/platforms/linkedin/preview.go22
1 files 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 <title> 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
}