mirror of
https://github.com/crunchy-labs/crunchy-cli.git
synced 2026-01-21 12:12:00 -06:00
Move functions into their own, separate files & add docs
This commit is contained in:
parent
d1859b4c25
commit
ec872d8c86
12 changed files with 681 additions and 638 deletions
69
parse.go
Normal file
69
parse.go
Normal file
|
|
@ -0,0 +1,69 @@
|
|||
package crunchyroll
|
||||
|
||||
import (
|
||||
"regexp"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
// ParseBetaSeriesURL tries to extract the season id of the given crunchyroll beta url, pointing to a season.
|
||||
func ParseBetaSeriesURL(url string) (seasonId string, ok bool) {
|
||||
pattern := regexp.MustCompile(`(?m)^https?://(www\.)?beta\.crunchyroll\.com/(\w{2}/)?series/(?P<seasonId>\w+).*`)
|
||||
if urlMatch := pattern.FindAllStringSubmatch(url, -1); len(urlMatch) != 0 {
|
||||
groups := regexGroups(urlMatch, pattern.SubexpNames()...)
|
||||
seasonId = groups["seasonId"]
|
||||
ok = true
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// ParseBetaEpisodeURL tries to extract the episode id of the given crunchyroll beta url, pointing to an episode.
|
||||
func ParseBetaEpisodeURL(url string) (episodeId string, ok bool) {
|
||||
pattern := regexp.MustCompile(`(?m)^https?://(www\.)?beta\.crunchyroll\.com/(\w{2}/)?watch/(?P<episodeId>\w+).*`)
|
||||
if urlMatch := pattern.FindAllStringSubmatch(url, -1); len(urlMatch) != 0 {
|
||||
groups := regexGroups(urlMatch, pattern.SubexpNames()...)
|
||||
episodeId = groups["episodeId"]
|
||||
ok = true
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// ParseVideoURL tries to extract the crunchyroll series / movie name out of the given url.
|
||||
//
|
||||
// Deprecated: Crunchyroll classic urls are sometimes not safe to use, use ParseBetaSeriesURL
|
||||
// if possible since beta url are always safe to use.
|
||||
// The method will stay in the library until only beta urls are supported by crunchyroll itself.
|
||||
func ParseVideoURL(url string) (seriesName string, ok bool) {
|
||||
pattern := regexp.MustCompile(`(?m)^https?://(www\.)?crunchyroll\.com(/\w{2}(-\w{2})?)?/(?P<series>[^/]+)(/videos)?/?$`)
|
||||
if urlMatch := pattern.FindAllStringSubmatch(url, -1); len(urlMatch) != 0 {
|
||||
groups := regexGroups(urlMatch, pattern.SubexpNames()...)
|
||||
seriesName = groups["series"]
|
||||
|
||||
if seriesName != "" {
|
||||
ok = true
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// ParseEpisodeURL tries to extract the crunchyroll series name, title, episode number and web id out of the given crunchyroll url
|
||||
// Note that the episode number can be misleading. For example if an episode has the episode number 23.5 (slime isekai)
|
||||
// the episode number will be 235.
|
||||
//
|
||||
// Deprecated: Crunchyroll classic urls are sometimes not safe to use, use ParseBetaEpisodeURL
|
||||
// if possible since beta url are always safe to use.
|
||||
// The method will stay in the library until only beta urls are supported by crunchyroll itself.
|
||||
func ParseEpisodeURL(url string) (seriesName, title string, episodeNumber int, webId int, ok bool) {
|
||||
pattern := regexp.MustCompile(`(?m)^https?://(www\.)?crunchyroll\.com(/\w{2}(-\w{2})?)?/(?P<series>[^/]+)/episode-(?P<number>\d+)-(?P<title>.+)-(?P<webId>\d+).*`)
|
||||
if urlMatch := pattern.FindAllStringSubmatch(url, -1); len(urlMatch) != 0 {
|
||||
groups := regexGroups(urlMatch, pattern.SubexpNames()...)
|
||||
seriesName = groups["series"]
|
||||
episodeNumber, _ = strconv.Atoi(groups["number"])
|
||||
title = groups["title"]
|
||||
webId, _ = strconv.Atoi(groups["webId"])
|
||||
|
||||
if seriesName != "" && title != "" && webId != 0 {
|
||||
ok = true
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue