iawia002/lux · error
invalid url for yinyuetai
Error message
invalid url for yinyuetai
What it means
The YinYueTai extractor only accepts three URL shapes: v.yinyuetai.com/video/<id>, v.yinyuetai.com/video/h5/<id>, and m2.yinyuetai.com/video.html?id=<id>. If none of the three regexes matches, the video id cannot be extracted and this error is returned before any network call is made.
Source
Thrown at extractors/yinyuetai/yinyuetai.go:44
}
type extractor struct{}
// New returns a yinyuetai extractor.
func New() extractors.Extractor {
return &extractor{}
}
// Extract is the main function to extract the data.
func (e *extractor) Extract(url string, option extractors.Options) ([]*extractors.Data, error) {
vid := utils.MatchOneOf(
url,
`https?://v.yinyuetai.com/video/(\d+)(?:\?vid=\d+)?`,
`https?://v.yinyuetai.com/video/h5/(\d+)(?:\?vid=\d+)?`,
`https?://m2.yinyuetai.com/video.html\?id=(\d+)`,
)
if vid == nil || len(vid) < 2 {
return nil, errors.New("invalid url for yinyuetai")
}
params := fmt.Sprintf("videoId=%s", vid[1])
// generate api url
apiURL := genAPI(actionGetMvInfo, params)
var err error
html, err := request.Get(apiURL, url, nil)
if err != nil {
return nil, errors.WithStack(err)
}
// parse yinyuetai data
data := yinyuetaiMvData{}
if err = json.Unmarshal([]byte(html), &data); err != nil {
return nil, errors.WithStack(extractors.ErrURLParseFailed)
}
// handle api error
if data.Error {
return nil, errors.New(data.Message)
}View on GitHub (pinned to dd00f6d258)
Solutions
- Rewrite the URL to the canonical form https://v.yinyuetai.com/video/<id> before extracting
- Confirm the URL opens a video page in a browser
- If the domain layout changed permanently, add the new pattern to the MatchOneOf call in extractors/yinyuetai/yinyuetai.go
- Validate the URL against the three patterns on the caller side first
Example fix
// before
_, err := yinyuetai.Extract("https://www.yinyuetai.com/video/2515284", opts) // wrong host -> error
// after
_, err := yinyuetai.Extract("https://v.yinyuetai.com/video/2515284", opts) // matches first pattern Defensive patterns
Strategy: validation
Validate before calling
var yinyuetaiRe = regexp.MustCompile(`^https?://(v\.yinyuetai\.com/video/(h5/)?\d+(\?vid=\d+)?$|https?://m2\.yinyuetai\.com/video\.html\?id=\d+)`)
func isYinyuetaiVideoURL(raw string) bool {
return yinyuetaiRe.MatchString(raw)
} Try / catch
if !isYinyuetaiVideoURL(url) {
// rewrite to canonical https://v.yinyuetai.com/video/<id> or reject
}
_, err := yinyuetai.Extract(url, opts) Prevention
- Normalize every yinyuetai URL to the v.yinyuetai.com/video/<id> form before extracting
- Keep the accepted-pattern list in sync with the extractor when adding hosts
- Reject www.* and non-video page URLs early in batch pipelines
When it happens
Trigger: Passing a www.yinyuetai.com host, a fan/stage page, a URL with the id in an unexpected query param, or any post-rebrand domain layout that no longer matches the three patterns.
Common situations: YinYueTai rebranded/reorganized its site so canonical video permalinks changed; users paste search-result or playlist URLs; trailing fragments or encoded characters break the match.
Related errors
- Invalid video URL: Missing video ID parameter
- Could not extract media name from page
- unable to get video ID
- 暂不支持斗鱼直播
- ErrURLParseFailed
AI-assisted analysis of iawia002/lux@dd00f6d258 (2026-08-15).
Data as JSON: /api/errors/bc5c5be11ec1dacb.
Report an issue: GitHub.