feat(report): improve daily intelligence UX and price tracking
This commit is contained in:
@@ -101,6 +101,17 @@ func fetchSubscriptionPage(url string, fixture string, client *http.Client) (str
|
||||
return string(data), nil
|
||||
}
|
||||
|
||||
body, err := fetchSubscriptionPageWithRetry(url, client)
|
||||
if err == nil {
|
||||
return body, nil
|
||||
}
|
||||
if markdownURL, ok := markdownFallbackURL(url, err); ok {
|
||||
return fetchSubscriptionPageWithRetry(markdownURL, client)
|
||||
}
|
||||
return "", err
|
||||
}
|
||||
|
||||
func fetchSubscriptionPageWithRetry(url string, client *http.Client) (string, error) {
|
||||
var lastErr error
|
||||
for attempt := 1; attempt <= subscriptionFetchMaxAttempts; attempt++ {
|
||||
body, retryable, err := fetchSubscriptionPageOnce(url, client)
|
||||
@@ -116,6 +127,7 @@ func fetchSubscriptionPage(url string, fixture string, client *http.Client) (str
|
||||
return "", lastErr
|
||||
}
|
||||
|
||||
|
||||
func fetchSubscriptionPageOnce(url string, client *http.Client) (string, bool, error) {
|
||||
req, err := http.NewRequest(http.MethodGet, url, nil)
|
||||
if err != nil {
|
||||
@@ -146,6 +158,20 @@ func fetchSubscriptionPageOnce(url string, client *http.Client) (string, bool, e
|
||||
return normalizeSubscriptionPage(string(body)), false, nil
|
||||
}
|
||||
|
||||
func markdownFallbackURL(url string, err error) (string, bool) {
|
||||
if strings.TrimSpace(url) == "" || err == nil {
|
||||
return "", false
|
||||
}
|
||||
lower := strings.ToLower(err.Error())
|
||||
if !strings.Contains(lower, "status 403") && !strings.Contains(lower, "forbidden") {
|
||||
return "", false
|
||||
}
|
||||
if strings.HasSuffix(url, ".md") {
|
||||
return "", false
|
||||
}
|
||||
return strings.TrimRight(url, "/") + ".md", true
|
||||
}
|
||||
|
||||
func isRetriableSubscriptionFetchError(err error) bool {
|
||||
if err == nil {
|
||||
return false
|
||||
|
||||
Reference in New Issue
Block a user