diff options
| author | Paul Buetow <paul@buetow.org> | 2024-10-27 11:57:34 +0200 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2024-10-27 11:57:34 +0200 |
| commit | e17fa34a36835930a0ec1678e086f450cb9aa620 (patch) | |
| tree | 0c67433f00574cd674b44e244fb580d9f2ba97b9 /internal/platforms | |
| parent | 42f41d6def543e596a68b2ac1d9836913b51f86f (diff) | |
jo
Diffstat (limited to 'internal/platforms')
| -rw-r--r-- | internal/platforms/linkedin/preview.go | 22 |
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 } |
