(release, bookIdentify string)
| 940 | } |
| 941 | |
| 942 | func (this *CommonController) handleReleaseV3(release, bookIdentify string) (htmlNodes interface{}, images []string, links []map[string]string) { |
| 943 | query, err := goquery.NewDocumentFromReader(bytes.NewBufferString(release)) |
| 944 | if err != nil { |
| 945 | beego.Error(err) |
| 946 | htmlNodes = release |
| 947 | return |
| 948 | } |
| 949 | // 处理svg |
| 950 | utils.HandleSVG(query, bookIdentify) |
| 951 | query.Find(".reference-link").Remove() |
| 952 | query.Find(".header-link").Remove() |
| 953 | medias := []string{"audio", "video"} |
| 954 | for _, tag := range medias { |
| 955 | query.Find(tag).Each(func(idx int, sel *goquery.Selection) { |
| 956 | src, ok := sel.Attr("src") |
| 957 | if ok && !(strings.HasPrefix(src, "https://") || strings.HasPrefix(src, "http://")) { |
| 958 | if utils.StoreType == utils.StoreOss { // OSS 云存储,则使用OSS签名,否则使用本地存储的链接签名 |
| 959 | if bucket, err := store.ModelStoreOss.GetBucket(); err == nil { |
| 960 | src = strings.TrimLeft(src, "/") |
| 961 | src, _ = bucket.SignURL(src, http.MethodGet, utils.MediaDuration) |
| 962 | if slice := strings.Split(src, "/"); len(slice) > 2 { |
| 963 | src = strings.Join(slice[3:], "/") |
| 964 | } |
| 965 | } |
| 966 | } else { |
| 967 | if sign, err := utils.GenerateMediaSign(src, time.Now().UnixNano(), time.Duration(utils.MediaDuration)); err == nil { |
| 968 | if strings.Contains(src, "?") { |
| 969 | src = src + "&sign=" + sign |
| 970 | } else { |
| 971 | src = src + "?sign=" + sign |
| 972 | } |
| 973 | } |
| 974 | } |
| 975 | } |
| 976 | sel.SetAttr("src", src) |
| 977 | }) |
| 978 | } |
| 979 | |
| 980 | query.Find("img").Each(func(idx int, sel *goquery.Selection) { |
| 981 | if src, ok := sel.Attr("src"); ok { |
| 982 | images = append(images, src) |
| 983 | } |
| 984 | }) |
| 985 | |
| 986 | prefix := "/read/" |
| 987 | query.Find("a").Each(func(idx int, sel *goquery.Selection) { |
| 988 | if href, ok := sel.Attr("href"); ok && strings.HasPrefix(href, prefix) { |
| 989 | if text := strings.TrimSpace(sel.Text()); text != "" { |
| 990 | href = strings.Split(strings.Split(strings.TrimPrefix(href, prefix), "?")[0], "#")[0] |
| 991 | links = append(links, map[string]string{"title": text, "href": href}) |
| 992 | } |
| 993 | } |
| 994 | }) |
| 995 | |
| 996 | release, _ = query.Html() |
| 997 | nodes, err := html2json.NewDefault().ParseByByteV2([]byte(release), models.GetAPIStaticDomain()) |
| 998 | if err != nil { |
| 999 | beego.Error(err) |
no test coverage detected