feat: support searching well-known urls in subdirectory
This commit is contained in:
parent
acc9186a59
commit
9a826bbe6f
2 changed files with 42 additions and 33 deletions
|
@ -143,46 +143,53 @@ func parseYoutubeVideoPage(websiteURL string) string {
|
|||
func tryWellKnownUrls(websiteURL, userAgent, cookie, username, password string) (Subscriptions, *errors.LocalizedError) {
|
||||
var subscriptions Subscriptions
|
||||
knownURLs := map[string]string{
|
||||
"/atom.xml": "atom",
|
||||
"/feed.xml": "atom",
|
||||
"/feed/": "atom",
|
||||
"/rss.xml": "rss",
|
||||
"/rss/": "rss",
|
||||
"atom.xml": "atom",
|
||||
"feed.xml": "atom",
|
||||
"feed/": "atom",
|
||||
"rss.xml": "rss",
|
||||
"rss/": "rss",
|
||||
}
|
||||
|
||||
lastCharacter := websiteURL[len(websiteURL)-1:]
|
||||
if lastCharacter == "/" {
|
||||
websiteURL = websiteURL[:len(websiteURL)-1]
|
||||
websiteURLRoot := url.RootURL(websiteURL)
|
||||
baseURLs := []string{
|
||||
// Look for knownURLs in the root.
|
||||
websiteURLRoot,
|
||||
}
|
||||
// Look for knownURLs in current subdirectory, such as 'example.com/blog/'.
|
||||
websiteURL, _ = url.AbsoluteURL(websiteURL, "./")
|
||||
if websiteURL != websiteURLRoot {
|
||||
baseURLs = append(baseURLs, websiteURL)
|
||||
}
|
||||
|
||||
for knownURL, kind := range knownURLs {
|
||||
fullURL, err := url.AbsoluteURL(websiteURL, knownURL)
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
for _, baseURL := range baseURLs {
|
||||
for knownURL, kind := range knownURLs {
|
||||
fullURL, err := url.AbsoluteURL(baseURL, knownURL)
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
clt := client.NewClientWithConfig(fullURL, config.Opts)
|
||||
clt.WithCredentials(username, password)
|
||||
clt.WithUserAgent(userAgent)
|
||||
clt.WithCookie(cookie)
|
||||
|
||||
clt := client.NewClientWithConfig(fullURL, config.Opts)
|
||||
clt.WithCredentials(username, password)
|
||||
clt.WithUserAgent(userAgent)
|
||||
clt.WithCookie(cookie)
|
||||
// Some websites redirects unknown URLs to the home page.
|
||||
// As result, the list of known URLs is returned to the subscription list.
|
||||
// We don't want the user to choose between invalid feed URLs.
|
||||
clt.WithoutRedirects()
|
||||
|
||||
// Some websites redirects unknown URLs to the home page.
|
||||
// As result, the list of known URLs is returned to the subscription list.
|
||||
// We don't want the user to choose between invalid feed URLs.
|
||||
clt.WithoutRedirects()
|
||||
response, err := clt.Get()
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
|
||||
response, err := clt.Get()
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
|
||||
if response != nil && response.StatusCode == 200 {
|
||||
subscription := new(Subscription)
|
||||
subscription.Type = kind
|
||||
subscription.Title = fullURL
|
||||
subscription.URL = fullURL
|
||||
if subscription.URL != "" {
|
||||
subscriptions = append(subscriptions, subscription)
|
||||
if response != nil && response.StatusCode == 200 {
|
||||
subscription := new(Subscription)
|
||||
subscription.Type = kind
|
||||
subscription.Title = fullURL
|
||||
subscription.URL = fullURL
|
||||
if subscription.URL != "" {
|
||||
subscriptions = append(subscriptions, subscription)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -25,6 +25,8 @@ func TestAbsoluteURL(t *testing.T) {
|
|||
scenarios := [][]string{
|
||||
{"https://example.org/path/file.ext", "https://example.org/folder/", "/path/file.ext"},
|
||||
{"https://example.org/folder/path/file.ext", "https://example.org/folder/", "path/file.ext"},
|
||||
{"https://example.org/", "https://example.org/path", "./"},
|
||||
{"https://example.org/folder/", "https://example.org/folder/", "./"},
|
||||
{"https://example.org/path/file.ext", "https://example.org/folder", "path/file.ext"},
|
||||
{"https://example.org/path/file.ext", "https://example.org/folder/", "https://example.org/path/file.ext"},
|
||||
{"https://static.example.org/path/file.ext", "https://www.example.org/", "//static.example.org/path/file.ext"},
|
||||
|
|
Loading…
Reference in a new issue