gemercheung 1 éve
szülő
commit
49f16b23bd
7 módosított fájl, 689 hozzáadás és 358 törlés
  1. 14 2
      cmd/download.go
  2. 3 0
      go.mod
  3. 9 0
      go.sum
  4. 2 1
      utils/getScenes.go
  5. 25 14
      utils/localizeMainJson.go
  6. 288 341
      utils/somedataType.go
  7. 348 0
      utils/somedataType.go.bk

+ 14 - 2
cmd/download.go

@@ -58,13 +58,23 @@ func RunCmd(cmd *cobra.Command, args []string) {
 	if _, err := os.Stat(dest); os.IsNotExist(err) {
 		err = os.Mkdir(dest, 0644)
 	}
-
+	log.Info("start downloading")
 	err := utils.GetJson(mainJsonUrl, data)
+	if err != nil {
+		fmt.Println("Error1: ", err)
+		return
+
+	}
 	err = utils.DownloadMainXml(mainTourUrl, dest+"/tour/")
+	if err != nil {
+		fmt.Println("Error2: ", err)
+		return
+
+	}
 	err = utils.CovertJsonAndDownload(mainJsonUrl, dest, ossUrl)
 
 	if err != nil {
-		fmt.Println("Error: ", err)
+		fmt.Println("Error3: ", err)
 		return
 
 	}
@@ -77,6 +87,7 @@ func RunCmd(cmd *cobra.Command, args []string) {
 		for _, v := range data.Scenes {
 			if v.Type == "pano" {
 				// 主Tiles图
+				//log.Info("current", "bucket", fmt.Sprintf("%s", bucket))
 				if utils.IsCommandAvailable("ossutil") {
 					runMainTileDownload(v.SceneCode, dest, exclString, bucket)
 				}
@@ -139,6 +150,7 @@ func RunCmd(cmd *cobra.Command, args []string) {
 
 		}
 	}
+	log.Info("end downloading")
 
 }
 func runMainTileDownload(sceneCode string, dest string, exclString string, bucket string) {

+ 3 - 0
go.mod

@@ -13,12 +13,15 @@ require (
 	github.com/go-logfmt/logfmt v0.6.0 // indirect
 	github.com/hashicorp/hcl v1.0.0 // indirect
 	github.com/inconshreveable/mousetrap v1.1.0 // indirect
+	github.com/json-iterator/go v1.1.12 // indirect
 	github.com/lucasb-eyer/go-colorful v1.2.0 // indirect
 	github.com/magiconair/properties v1.8.7 // indirect
 	github.com/mattn/go-isatty v0.0.18 // indirect
 	github.com/mattn/go-runewidth v0.0.15 // indirect
 	github.com/mitchellh/go-homedir v1.1.0 // indirect
 	github.com/mitchellh/mapstructure v1.5.0 // indirect
+	github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
+	github.com/modern-go/reflect2 v1.0.2 // indirect
 	github.com/muesli/reflow v0.3.0 // indirect
 	github.com/muesli/termenv v0.15.2 // indirect
 	github.com/pelletier/go-toml/v2 v2.2.2 // indirect

+ 9 - 0
go.sum

@@ -13,10 +13,13 @@ github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nos
 github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM=
 github.com/go-logfmt/logfmt v0.6.0 h1:wGYYu3uicYdqXVgoYbvnkrPVXkuLM1p1ifugDMEdRi4=
 github.com/go-logfmt/logfmt v0.6.0/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs=
+github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
 github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
 github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
 github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
 github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
+github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
+github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
 github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY=
 github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0=
 github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY=
@@ -30,6 +33,11 @@ github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG
 github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
 github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
 github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
+github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
+github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
+github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
+github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
+github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
 github.com/muesli/reflow v0.3.0 h1:IFsN6K9NfGtjeggFP+68I4chLZV2yIKsXJFNZ+eWh6s=
 github.com/muesli/reflow v0.3.0/go.mod h1:pbwTDkVPibjO2kyvBQRBxTWEEGDGq0FlB1BIKtnHY/8=
 github.com/muesli/termenv v0.15.2 h1:GohcuySI0QmI3wN8Ok9PtKGkgkFIk7y6Vpb5PvrY+Wo=
@@ -62,6 +70,7 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+
 github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
 github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
 github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
+github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
 github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
 github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
 github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=

+ 2 - 1
utils/getScenes.go

@@ -1,10 +1,10 @@
 package utils
 
 import (
-	"encoding/json"
 	"encoding/xml"
 	"fmt"
 	"github.com/charmbracelet/log"
+	jsoniter "github.com/json-iterator/go"
 	"io"
 	"net/http"
 	"os"
@@ -25,6 +25,7 @@ func GetJson(url string, target interface{}) error {
 		return err
 	}
 	defer r.Body.Close()
+	var json = jsoniter.ConfigCompatibleWithStandardLibrary
 
 	return json.NewDecoder(r.Body).Decode(target)
 }

+ 25 - 14
utils/localizeMainJson.go

@@ -1,9 +1,10 @@
 package utils
 
 import (
-	"encoding/json"
 	"fmt"
 	"github.com/charmbracelet/log"
+	jsoniter "github.com/json-iterator/go"
+	"github.com/json-iterator/go/extra"
 	"io"
 	"net/http"
 	"os"
@@ -11,11 +12,15 @@ import (
 	"strings"
 )
 
-func CovertJsonAndDownload(path string, dest string, ossUrl string) (err error) {
+func init() {
+	// 在init中设置一次即可
+	extra.RegisterFuzzyDecoders()
+}
 
-	log.Info("CovertJsonAndDownload", "url", fmt.Sprintf("%s", path))
+func CovertJsonAndDownload(path string, dest string, ossUrl string) (err error) {
 
 	dataFile := dest + "/someData.json"
+	var json = jsoniter.ConfigCompatibleWithStandardLibrary
 
 	// Get the data
 	resp, err := http.Get(path)
@@ -28,10 +33,13 @@ func CovertJsonAndDownload(path string, dest string, ossUrl string) (err error)
 
 	content := string(bodyBytes)
 	//以字串过滤所有url到本地
-	if strings.Contains(content, ossUrl+"/720yun_fd_manage/") {
+	hasManage := ossUrl + "720yun_fd_manage/"
+	hasEditData := ossUrl + "scene_edit_data/"
+	if strings.Contains(content, hasManage) {
 		content = strings.ReplaceAll(content, "https://4dkk.4dage.com/720yun_fd_manage/", "data/")
+
 	}
-	if strings.Contains(content, ossUrl+"/scene_edit_data/") {
+	if strings.Contains(content, hasEditData) {
 		content = strings.ReplaceAll(content, "https://4dkk.4dage.com/", "data/")
 	}
 
@@ -44,27 +52,30 @@ func CovertJsonAndDownload(path string, dest string, ossUrl string) (err error)
 		return err
 	}
 	//补数据default
-	for _, Scenes := range target.Scenes {
+	for _, scene := range target.Scenes {
 
-		if Scenes.InitVisual.Vlookatmin == nil {
-			d := json.Number("-90")
-			Scenes.InitVisual.Vlookatmin = &d
+		if scene.InitVisual.Vlookatmin == nil {
+			scene.InitVisual.Vlookatmin = -90
 		}
-		if Scenes.InitVisual.Vlookatmax == nil {
-			m := json.Number("90")
-			Scenes.InitVisual.Vlookatmax = &m
+		if scene.InitVisual.Vlookatmax == nil {
+			scene.InitVisual.Vlookatmax = 90
 		}
-		//fmt.Println("InitVisual %s\n", Scenes.InitVisual)
+
+		//for _, hotspot := range scene.SomeData.Hotspots {
+		//
+		//}
+
 	}
 
 	file, err := json.Marshal(target)
+
 	if err != nil {
 		panic(err)
 	}
 
 	//log.Info("data json:", string(file))
-
 	// Writer the body to file
+
 	err = os.WriteFile(dataFile, file, 0644)
 
 	if err != nil {

+ 288 - 341
utils/somedataType.go

@@ -1,348 +1,295 @@
 package utils
 
-import "encoding/json"
+type ScenesDataType struct {
+	FirstScene             interface{}     `json:"firstScene"`
+	CoverPcLoc             string          `json:"coverPcLoc"`
+	CoverSelect            string          `json:"coverSelect"`
+	OssSomeData            string          `json:"ossSomeData"`
+	Icon                   string          `json:"icon"`
+	Description            string          `json:"description"`
+	Explanation            Explanation     `json:"explanation"`
+	IsLogo                 int             `json:"isLogo"`
+	BackgroundMusic        BackgroundMusic `json:"backgroundMusic"`
+	Password               string          `json:"password"`
+	AppIcon                string          `json:"appIcon"`
+	RemindTime             int             `json:"remindTime"`
+	QrCode                 string          `json:"qrCode"`
+	CoverMo                string          `json:"coverMo"`
+	IsAuto                 int             `json:"isAuto"`
+	Logo                   string          `json:"logo"`
+	Share                  string          `json:"share"`
+	ID                     string          `json:"id"`
+	IsShowOpeningAnimation bool            `json:"isShowOpeningAnimation"`
+	IsPassword             int             `json:"isPassword"`
+	UpdateTime             string          `json:"updateTime"`
+	CustomButton           []CustomButton  `json:"customButton"`
+	LogoChange             bool            `json:"logoChange"`
+	CoverPc                string          `json:"coverPc"`
+	SceneIndex             string          `json:"sceneIndex"`
+	CatalogRoot            []CatalogRoot   `json:"catalogRoot"`
+	UserID                 string          `json:"userId"`
+	OpeningAnimationType   int             `json:"openingAnimationType"`
+	CreateTime             string          `json:"createTime"`
+	Catalogs               []Catalogs      `json:"catalogs"`
+	IsRemind               int             `json:"isRemind"`
+	Name                   string          `json:"name"`
+	PcIcon                 string          `json:"pcIcon"`
+	Scenes                 []Scenes        `json:"scenes"`
+	CoverInfo              CoverInfo       `json:"coverInfo"`
+	LogoID                 int             `json:"logoId"`
+	Status                 int             `json:"status"`
+}
+type Explanation struct {
+	OpenByDefault bool        `json:"openByDefault"`
+	AudioURL      string      `json:"audioUrl"`
+	AudioName     string      `json:"audioName"`
+	AudioID       interface{} `json:"audioId,int"`
+	Repeat        bool        `json:"repeat"`
+}
+type BackgroundMusic struct {
+	Name    string `json:"name"`
+	ID      int    `json:"id"`
+	OssPath string `json:"ossPath"`
+}
+type CustomButton struct {
+	Name       string `json:"name"`
+	Type       string `json:"type"`
+	OpenMethod string `json:"openMethod"`
+	Value      string `json:"value"`
+	IsShow     bool   `json:"isShow"`
+}
+type CatalogRoot struct {
+	Children []any       `json:"children"`
+	Name     string      `json:"name"`
+	ID       interface{} `json:"id"`
+}
+type Catalogs struct {
+	Name string      `json:"name"`
+	ID   interface{} `json:"id"`
+}
+type InitVisual struct {
+	Hlookat    interface{} `json:"hlookat,float64,omitempty"`
+	Vlookat    interface{} `json:"vlookat,float64,omitempty"`
+	Vlookatmax interface{} `json:"vlookatmax,float64,omitempty"`
+	Vlookatmin interface{} `json:"vlookatmin,float64,omitempty"`
+}
+type ArticleInfo struct {
+	HTML string `json:"html"`
+}
 
-type FirstSceneType struct {
-	Category   interface{} `json:"category"`
-	CustomMask struct {
-		Earth struct {
-			Antidistorted bool   `json:"antidistorted"`
-			FodderID      string `json:"fodderId"`
-			Icon          string `json:"icon"`
-			IsShow        bool   `json:"isShow"`
-			Scale         int64  `json:"scale"`
-		} `json:"earth"`
-		Sky struct {
-			Antidistorted bool   `json:"antidistorted"`
-			FodderID      string `json:"fodderId"`
-			Icon          string `json:"icon"`
-			IsShow        bool   `json:"isShow"`
-			Scale         int64  `json:"scale"`
-		} `json:"sky"`
-	} `json:"customMask"`
-	Icon       string `json:"icon"`
-	ID         string `json:"id"`
-	InitVisual struct {
-		Hlookat json.Number `json:"hlookat"`
-		Vlookat json.Number `json:"vlookat"`
-	} `json:"initVisual"`
+type Sky struct {
+	FodderID      interface{} `json:"fodderId,int,omitempty"`
+	Icon          string      `json:"icon"`
+	Scale         float64     `json:"scale"`
+	Antidistorted bool        `json:"antidistorted"`
+	IsShow        bool        `json:"isShow"`
+}
+type Earth struct {
+	FodderID      interface{} `json:"fodderId,int,omitempty"`
+	Icon          string      `json:"icon"`
+	Scale         float64     `json:"scale"`
+	Antidistorted bool        `json:"antidistorted"`
+	IsShow        bool        `json:"isShow"`
+}
+type CustomMask struct {
+	Sky   Sky   `json:"sky"`
+	Earth Earth `json:"earth"`
+}
+type Secne struct {
+	InitVisual   InitVisual  `json:"initVisual"`
+	SomeData     SomeData    `json:"someData"`
+	SceneCode    string      `json:"sceneCode"`
+	MaterialType string      `json:"materialType"`
+	Icon         string      `json:"icon"`
+	CustomMask   CustomMask  `json:"customMask"`
+	ID           string      `json:"id"`
+	Category     string      `json:"category,int,omitempty"`
+	Type         string      `json:"type"`
+	Explanation  Explanation `json:"explanation"`
+	SceneTitle   string      `json:"sceneTitle"`
+}
+type PersonalizedTagInfo struct {
+	FillColor      string `json:"fillColor"`
+	TextDirection  string `json:"textDirection"`
+	BorderColor    string `json:"borderColor"`
+	IsTextWrap     bool   `json:"isTextWrap"`
+	IsShowLine     bool   `json:"isShowLine"`
+	TextColor      string `json:"textColor"`
+	TextNumPerLine int    `json:"textNumPerLine"`
+	LineDirection  string `json:"lineDirection"`
+}
+type PhoneInfo struct {
+	Phone string `json:"phone"`
+}
+type PdfInfo struct {
+	Name string `json:"name"`
+	URL  string `json:"url"`
+}
+type Audio struct {
+}
+type ImageTextInfo struct {
+	IsApplyToAll bool   `json:"isApplyToAll"`
+	Text         string `json:"text"`
+	Audio        Audio  `json:"audio"`
+	ImageList    []File `json:"imageList"`
+}
+type File struct {
+	Ancestors    string `json:"ancestors"`
+	CreateTime   string `json:"createTime"`
+	DirID        int64  `json:"dirId"`
+	DirName      string `json:"dirName"`
+	Dpi          string `json:"dpi"`
+	FileName     string `json:"fileName"`
+	FileSize     string `json:"fileSize"`
+	Icon         string `json:"icon"`
+	ID           int64  `json:"id"`
 	MaterialType string `json:"materialType"`
+	Name         string `json:"name"`
+	OssPath      string `json:"ossPath"`
+	PreviewIcon  string `json:"previewIcon"`
 	SceneCode    string `json:"sceneCode"`
-	SceneTitle   string `json:"sceneTitle"`
-	SomeData     struct {
-		Hotspots []*struct {
-			ArticleInfo struct {
-				HTML string `json:"html"`
-			} `json:"articleInfo"`
-			Ath            interface{} `json:"ath"`
-			Atv            interface{} `json:"atv"`
-			Audio          string      `json:"audio"`
-			CustomIconInfo struct {
-				Img string `json:"img"`
-			} `json:"customIconInfo"`
-			FodderID        []interface{} `json:"fodderId"`
-			FontSize        int64         `json:"fontSize"`
-			HotspotIconType string        `json:"hotspotIconType"`
-			HotspotTitle    string        `json:"hotspotTitle"`
-			HotspotType     string        `json:"hotspotType"`
-			Hyperlink       string        `json:"hyperlink"`
-			Icontype        string        `json:"icontype"`
-			Image           []interface{} `json:"image"`
-			ImageTextInfo   struct {
-				Audio        struct{}      `json:"audio"`
-				ImageList    []interface{} `json:"imageList"`
-				IsApplyToAll bool          `json:"isApplyToAll"`
-				Text         string        `json:"text"`
-			} `json:"imageTextInfo"`
-			Img     string `json:"img"`
-			Link    string `json:"link"`
-			Name    string `json:"name"`
-			PdfInfo struct {
-				Name string `json:"name"`
-				URL  string `json:"url"`
-			} `json:"pdfInfo"`
-			PersonalizedTagInfo struct {
-				BorderColor    string `json:"borderColor"`
-				FillColor      string `json:"fillColor"`
-				IsShowLine     bool   `json:"isShowLine"`
-				IsTextWrap     bool   `json:"isTextWrap"`
-				LineDirection  string `json:"lineDirection"`
-				TextColor      string `json:"textColor"`
-				TextDirection  string `json:"textDirection"`
-				TextNumPerLine int64  `json:"textNumPerLine"`
-			} `json:"personalizedTagInfo"`
-			PhoneInfo struct {
-				Phone string `json:"phone"`
-			} `json:"phoneInfo"`
-			Secne struct {
-				Category   interface{} `json:"category"`
-				CustomMask struct {
-					Earth struct {
-						Antidistorted bool   `json:"antidistorted"`
-						FodderID      string `json:"fodderId"`
-						Icon          string `json:"icon"`
-						IsShow        bool   `json:"isShow"`
-						Scale         int64  `json:"scale"`
-					} `json:"earth"`
-					Sky struct {
-						Antidistorted bool   `json:"antidistorted"`
-						FodderID      string `json:"fodderId"`
-						Icon          string `json:"icon"`
-						IsShow        bool   `json:"isShow"`
-						Scale         int64  `json:"scale"`
-					} `json:"sky"`
-				} `json:"customMask"`
-				Icon       string `json:"icon"`
-				ID         string `json:"id"`
-				InitVisual struct {
-					Hlookat    json.Number `json:"hlookat"`
-					Vlookat    json.Number `json:"vlookat"`
-					Vlookatmax json.Number `json:"vlookatmax"`
-					Vlookatmin json.Number `json:"vlookatmin"`
-				} `json:"initVisual"`
-				MaterialType string   `json:"materialType"`
-				SceneCode    string   `json:"sceneCode"`
-				SceneTitle   string   `json:"sceneTitle"`
-				SomeData     struct{} `json:"someData"`
-				Type         string   `json:"type"`
-				Version      string   `json:"version"`
-			} `json:"secne"`
-			SerialFrameInfo struct {
-				Duration    int64  `json:"duration"`
-				FrameNumber int64  `json:"frameNumber"`
-				Img         string `json:"img"`
-			} `json:"serialFrameInfo"`
-			Size             json.Number `json:"size"`
-			Textarea         string      `json:"textarea"`
-			TitleDisplayMode string      `json:"titleDisplayMode"`
-			TitlePosition    string      `json:"titlePosition"`
-			Type             string      `json:"type"`
-			Video            string      `json:"video"`
-		} `json:"hotspots"`
-	} `json:"someData"`
-	Type string `json:"type"`
+	Status       int64  `json:"status"`
+	TempID       string `json:"tempId"`
+	Type         string `json:"type"`
+	UpdateTime   string `json:"updateTime"`
+	UserID       string `json:"userId"`
 }
-
-type ScenesDataType struct {
-	FirstScene      *FirstSceneType `json:"firstScenes,string,omitempty"`
-	AppIcon         string          `json:"appIcon"`
-	BackgroundMusic struct {
-		ID      string `json:"id"`
-		Name    string `json:"name"`
-		OssPath string `json:"ossPath"`
-	} `json:"backgroundMusic"`
-	CatalogRoot []struct {
-		Children []any       `json:"children"`
-		ID       interface{} `json:"id"`
-		Name     string      `json:"name"`
-	} `json:"catalogRoot"`
-	Catalogs []struct {
-		ID   interface{} `json:"id"`
-		Name string      `json:"name"`
-	} `json:"catalogs"`
-	CoverInfo struct {
-		CoverImageInWay   int64  `json:"coverImageInWay"`
-		CoverImageOrder   string `json:"coverImageOrder"`
-		CoverImgBac       string `json:"coverImgBac"`
-		CoverMoLoc        string `json:"coverMoLoc"`
-		CoverPcLoc        string `json:"coverPcLoc"`
-		CoverSelect       string `json:"coverSelect"`
-		CoverVideoBac     string `json:"coverVideoBac"`
-		CoverVideoControl int64  `json:"coverVideoControl"`
-		CoverVideoInWay   int64  `json:"coverVideoInWay"`
-		ImgColorSelec     string `json:"imgColorSelec"`
-		IsShowCover       int64  `json:"isShowCover"`
-		VideoColorSelec   string `json:"videoColorSelec"`
-		VideoMo           string `json:"videoMo"`
-		VideoMoIcon       string `json:"videoMoIcon"`
-		VideoMoLoc        string `json:"videoMoLoc"`
-		VideoPc           string `json:"videoPc"`
-		VideoPcIcon       string `json:"videoPcIcon"`
-		VideoPcLoc        string `json:"videoPcLoc"`
-	} `json:"coverInfo"`
-	CoverMo      string `json:"coverMo"`
-	CoverPc      string `json:"coverPc"`
-	CoverPcLoc   string `json:"coverPcLoc"`
-	CoverSelect  string `json:"coverSelect"`
-	CreateTime   string `json:"createTime"`
-	CustomButton []struct {
-		IsShow     bool   `json:"isShow"`
-		Name       string `json:"name"`
-		OpenMethod string `json:"openMethod"`
-		Type       string `json:"type"`
-		Value      string `json:"value"`
-	} `json:"customButton"`
-	Description string `json:"description"`
-	Explanation struct {
-		AudioID       string `json:"audioId"`
-		AudioName     string `json:"audioName"`
-		AudioURL      string `json:"audioUrl"`
-		OpenByDefault bool   `json:"openByDefault"`
-		Repeat        bool   `json:"repeat"`
-	} `json:"explanation"`
-
-	Icon                   string `json:"icon"`
-	ID                     string `json:"id"`
-	IsAuto                 int64  `json:"isAuto"`
-	IsLogo                 int64  `json:"isLogo"`
-	IsPassword             int64  `json:"isPassword"`
-	IsRemind               int64  `json:"isRemind"`
-	IsShowOpeningAnimation bool   `json:"isShowOpeningAnimation"`
-	Logo                   string `json:"logo"`
-	LogoChange             bool   `json:"logoChange"`
-	Name                   string `json:"name"`
-	OpeningAnimationType   int64  `json:"openingAnimationType"`
-	OssSomeData            string `json:"ossSomeData"`
-	Password               string `json:"password"`
-	PcIcon                 string `json:"pcIcon"`
-	QrCode                 string `json:"qrCode"`
-	RemindTime             int64  `json:"remindTime"`
-	SceneIndex             string `json:"sceneIndex"`
-	Scenes                 []struct {
-		Category   interface{} `json:"category"`
-		CustomMask struct {
-			Earth struct {
-				Antidistorted bool   `json:"antidistorted"`
-				FodderID      string `json:"fodderId"`
-				Icon          string `json:"icon"`
-				IsShow        bool   `json:"isShow"`
-				Scale         int64  `json:"scale"`
-			} `json:"earth"`
-			Sky struct {
-				Antidistorted bool   `json:"antidistorted"`
-				FodderID      string `json:"fodderId"`
-				Icon          string `json:"icon"`
-				IsShow        bool   `json:"isShow"`
-				Scale         int64  `json:"scale"`
-			} `json:"sky"`
-		} `json:"customMask"`
-		Icon       string `json:"icon"`
-		ID         string `json:"id"`
-		InitVisual struct {
-			Hlookat    json.Number  `json:"hlookat"`
-			Vlookat    json.Number  `json:"vlookat"`
-			Vlookatmax *json.Number `json:"vlookatmax"`
-			Vlookatmin *json.Number `json:"vlookatmin"`
-		} `json:"initVisual"`
-		MaterialType string `json:"materialType"`
-		SceneCode    string `json:"sceneCode"`
-		SceneTitle   string `json:"sceneTitle"`
-		SomeData     struct {
-			Hotspots []struct {
-				ArticleInfo struct {
-					HTML string `json:"html"`
-				} `json:"articleInfo"`
-				Ath            interface{} `json:"ath"`
-				Atv            interface{} `json:"atv"`
-				Audio          string      `json:"audio"`
-				CustomIconInfo struct {
-					Img string `json:"img"`
-				} `json:"customIconInfo"`
-				FodderID        []int64       `json:"fodderId"`
-				FontSize        int64         `json:"fontSize"`
-				HotspotIconType string        `json:"hotspotIconType"`
-				HotspotTitle    string        `json:"hotspotTitle"`
-				HotspotType     string        `json:"hotspotType"`
-				Hyperlink       string        `json:"hyperlink"`
-				Icontype        string        `json:"icontype"`
-				Image           []interface{} `json:"image"`
-				ImageTextInfo   struct {
-					Audio     struct{} `json:"audio"`
-					ImageList []struct {
-						Ancestors    string `json:"ancestors"`
-						CreateTime   string `json:"createTime"`
-						DirID        int64  `json:"dirId"`
-						DirName      string `json:"dirName"`
-						Dpi          string `json:"dpi"`
-						FileName     string `json:"fileName"`
-						FileSize     string `json:"fileSize"`
-						Icon         string `json:"icon"`
-						ID           int64  `json:"id"`
-						MaterialType string `json:"materialType"`
-						Name         string `json:"name"`
-						OssPath      string `json:"ossPath"`
-						PreviewIcon  string `json:"previewIcon"`
-						SceneCode    string `json:"sceneCode"`
-						Status       int64  `json:"status"`
-						TempID       string `json:"tempId"`
-						Type         string `json:"type"`
-						UpdateTime   string `json:"updateTime"`
-						UserID       string `json:"userId"`
-					} `json:"imageList"`
-					IsApplyToAll bool   `json:"isApplyToAll"`
-					Text         string `json:"text"`
-				} `json:"imageTextInfo"`
-				Img     string `json:"img"`
-				Link    string `json:"link"`
-				Name    string `json:"name"`
-				PdfInfo struct {
-					Name string `json:"name"`
-					URL  string `json:"url"`
-				} `json:"pdfInfo"`
-				PersonalizedTagInfo struct {
-					BorderColor    string `json:"borderColor"`
-					FillColor      string `json:"fillColor"`
-					IsShowLine     bool   `json:"isShowLine"`
-					IsTextWrap     bool   `json:"isTextWrap"`
-					LineDirection  string `json:"lineDirection"`
-					TextColor      string `json:"textColor"`
-					TextDirection  string `json:"textDirection"`
-					TextNumPerLine int64  `json:"textNumPerLine"`
-				} `json:"personalizedTagInfo"`
-				PhoneInfo struct {
-					Phone string `json:"phone"`
-				} `json:"phoneInfo"`
-				Secne struct {
-					Category   string `json:"category"`
-					CustomMask struct {
-						Earth struct {
-							Antidistorted bool   `json:"antidistorted"`
-							FodderID      string `json:"fodderId"`
-							Icon          string `json:"icon"`
-							IsShow        bool   `json:"isShow"`
-							Scale         int64  `json:"scale"`
-						} `json:"earth"`
-						Sky struct {
-							Antidistorted bool   `json:"antidistorted"`
-							FodderID      string `json:"fodderId"`
-							Icon          string `json:"icon"`
-							IsShow        bool   `json:"isShow"`
-							Scale         int64  `json:"scale"`
-						} `json:"sky"`
-					} `json:"customMask"`
-					Icon       string `json:"icon"`
-					ID         string `json:"id"`
-					InitVisual struct {
-						Hlookat    json.Number  `json:"hlookat"`
-						Vlookat    json.Number  `json:"vlookat"`
-						Vlookatmax *json.Number `json:"vlookatmax"`
-						Vlookatmin *json.Number `json:"vlookatmin"`
-					} `json:"initVisual"`
-					MaterialType string   `json:"materialType"`
-					SceneCode    string   `json:"sceneCode"`
-					SceneTitle   string   `json:"sceneTitle"`
-					SomeData     struct{} `json:"someData"`
-					Type         string   `json:"type"`
-					Version      string   `json:"version"`
-				} `json:"secne"`
-				SerialFrameInfo struct {
-					Duration    int64  `json:"duration"`
-					FrameNumber int64  `json:"frameNumber"`
-					Img         string `json:"img"`
-				} `json:"serialFrameInfo"`
-				Size             json.Number `json:"size"`
-				Textarea         string      `json:"textarea"`
-				TitleDisplayMode string      `json:"titleDisplayMode"`
-				TitlePosition    string      `json:"titlePosition"`
-				Type             string      `json:"type"`
-				Video            string      `json:"video"`
-			} `json:"hotspots"`
-		} `json:"someData"`
-		Type    string `json:"type"`
-		Version string `json:"version"`
-	} `json:"scenes"`
-	Share      string `json:"share"`
-	Status     int64  `json:"status"`
-	UpdateTime string `json:"updateTime"`
-	UserID     string `json:"userId"`
+type CustomIconInfo struct {
+	Img string `json:"img"`
+}
+type SerialFrameInfo struct {
+	Duration    int    `json:"duration"`
+	Img         string `json:"img"`
+	FrameNumber int    `json:"frameNumber"`
+	FrameWidth  int    `json:"frameWidth"`
+}
+type SerialFrameInfo0 struct {
+	Duration    int    `json:"duration"`
+	Img         string `json:"img"`
+	FrameNumber int    `json:"frameNumber"`
+}
+type SerialFrameInfo1 struct {
+	Duration    int    `json:"duration"`
+	Img         string `json:"img"`
+	FrameNumber int    `json:"frameNumber"`
+}
+type SerialFrameInfo2 struct {
+	Duration    int    `json:"duration"`
+	Img         string `json:"img"`
+	FrameNumber int    `json:"frameNumber"`
+}
+type SerialFrameInfo3 struct {
+	Duration    int    `json:"duration"`
+	Img         string `json:"img"`
+	FrameNumber int    `json:"frameNumber"`
+}
+type SerialFrameInfo4 struct {
+	Duration    int    `json:"duration"`
+	Img         string `json:"img"`
+	FrameNumber int    `json:"frameNumber"`
+}
+type SerialFrameInfo5 struct {
+	Duration    int    `json:"duration"`
+	Img         string `json:"img"`
+	FrameNumber int    `json:"frameNumber"`
+}
+type SerialFrameInfo6 struct {
+	Duration    int    `json:"duration"`
+	Img         string `json:"img"`
+	FrameNumber int    `json:"frameNumber"`
+}
+type SerialFrameInfo7 struct {
+	Duration    int    `json:"duration"`
+	Img         string `json:"img"`
+	FrameNumber int    `json:"frameNumber"`
+}
+type SerialFrameInfo8 struct {
+	Duration    int    `json:"duration"`
+	Img         string `json:"img"`
+	FrameNumber int    `json:"frameNumber"`
+}
+type Hotspots struct {
+	Img                 string              `json:"img"`
+	HotspotIconType     string              `json:"hotspotIconType"`
+	ArticleInfo         ArticleInfo         `json:"articleInfo"`
+	TitleDisplayMode    string              `json:"titleDisplayMode"`
+	Link                string              `json:"link"`
+	Textarea            string              `json:"textarea"`
+	Secne               Secne               `json:"secne,omitempty"`
+	Video               interface{}         `json:"video,omitempty"`
+	Type                string              `json:"type"`
+	FodderID            []interface{}       `json:"fodderId,int"`
+	Ath                 interface{}         `json:"ath,omitempty"`
+	PersonalizedTagInfo PersonalizedTagInfo `json:"personalizedTagInfo"`
+	PhoneInfo           PhoneInfo           `json:"phoneInfo"`
+	Audio               interface{}         `json:"audio"`
+	PdfInfo             PdfInfo             `json:"pdfInfo"`
+	Icontype            string              `json:"icontype"`
+	Hyperlink           string              `json:"hyperlink"`
+	Image               []any               `json:"image"`
+	Atv                 interface{}         `json:"atv,omitempty"`
+	TitlePosition       string              `json:"titlePosition"`
+	ImageTextInfo       ImageTextInfo       `json:"imageTextInfo"`
+	HotspotType         string              `json:"hotspotType"`
+	CustomIconInfo      CustomIconInfo      `json:"customIconInfo"`
+	SerialFrameInfo     SerialFrameInfo     `json:"serialFrameInfo,omitempty"`
+	Size                int                 `json:"size"`
+	Name                string              `json:"name"`
+	FontSize            int                 `json:"fontSize"`
+	HotspotTitle        string              `json:"hotspotTitle"`
+	SerialFrameInfo0    SerialFrameInfo0    `json:"serialFrameInfo,omitempty"`
+	SerialFrameInfo1    SerialFrameInfo1    `json:"serialFrameInfo,omitempty"`
+	SerialFrameInfo2    SerialFrameInfo2    `json:"serialFrameInfo,omitempty"`
+	SerialFrameInfo3    SerialFrameInfo3    `json:"serialFrameInfo,omitempty"`
+	SerialFrameInfo4    SerialFrameInfo4    `json:"serialFrameInfo,omitempty"`
+	SerialFrameInfo5    SerialFrameInfo5    `json:"serialFrameInfo,omitempty"`
+	SerialFrameInfo6    SerialFrameInfo6    `json:"serialFrameInfo,omitempty"`
+	SerialFrameInfo7    SerialFrameInfo7    `json:"serialFrameInfo,omitempty"`
+	SerialFrameInfo8    SerialFrameInfo8    `json:"serialFrameInfo,omitempty"`
+}
+type SomeData struct {
+	Hotspots []Hotspots `json:"hotspots"`
+}
+type Scenes struct {
+	InitVisual   InitVisual  `json:"initVisual"`
+	SomeData     SomeData    `json:"someData,omitempty"`
+	SceneCode    string      `json:"sceneCode"`
+	MaterialType string      `json:"materialType"`
+	Icon         string      `json:"icon"`
+	CustomMask   CustomMask  `json:"customMask"`
+	ID           string      `json:"id"`
+	Category     string      `json:"category,int,omitempty"`
+	Type         string      `json:"type"`
+	Explanation  Explanation `json:"explanation"`
+	SceneTitle   string      `json:"sceneTitle"`
+}
+type CoverInfo struct {
+	VideoMo           string `json:"videoMo"`
+	VideoMoIcon       string `json:"videoMoIcon"`
+	CoverBac          string `json:"coverBac"`
+	CoverSelect       string `json:"coverSelect"`
+	CoverPcLoc        string `json:"coverPcLoc"`
+	VideoMoID         int    `json:"videoMoId"`
+	CoverMoID         int    `json:"coverMoId"`
+	CoverImageOrder   string `json:"coverImageOrder"`
+	IsShowCover       int    `json:"isShowCover"`
+	CoverVideoControl int    `json:"coverVideoControl"`
+	FodderID          []int  `json:"fodderId"`
+	VideoMoLoc        string `json:"videoMoLoc"`
+	CoverMo           string `json:"coverMo"`
+	VideoBacImgID     int    `json:"videoBacImgId"`
+	ImgColorSelec     string `json:"imgColorSelec"`
+	VideoPcLoc        string `json:"videoPcLoc"`
+	CoverVideoInWay   int    `json:"coverVideoInWay"`
+	CoverVideoBac     string `json:"coverVideoBac"`
+	CoverMoLoc        string `json:"coverMoLoc"`
+	CoverImgBac       string `json:"coverImgBac"`
+	CoverPc           string `json:"coverPc"`
+	VideoPcIcon       string `json:"videoPcIcon"`
+	VideoBacImg       string `json:"videoBacImg"`
+	VideoPc           string `json:"videoPc"`
+	CoverImageInWay   int    `json:"coverImageInWay"`
+	VideoPcID         int    `json:"videoPcId"`
+	VideoColorSelec   string `json:"videoColorSelec"`
+	CoverPcID         int    `json:"coverPcId"`
 }

+ 348 - 0
utils/somedataType.go.bk

@@ -0,0 +1,348 @@
+package utils
+
+import "encoding/json"
+
+type FirstSceneType struct {
+	Category   interface{} `json:"category"`
+	CustomMask struct {
+		Earth struct {
+			Antidistorted bool   `json:"antidistorted"`
+			FodderID      string `json:"fodderId"`
+			Icon          string `json:"icon"`
+			IsShow        bool   `json:"isShow"`
+			Scale         int64  `json:"scale"`
+		} `json:"earth"`
+		Sky struct {
+			Antidistorted bool   `json:"antidistorted"`
+			FodderID      string `json:"fodderId"`
+			Icon          string `json:"icon"`
+			IsShow        bool   `json:"isShow"`
+			Scale         int64  `json:"scale"`
+		} `json:"sky"`
+	} `json:"customMask"`
+	Icon       string `json:"icon"`
+	ID         string `json:"id"`
+	InitVisual struct {
+		Hlookat json.Number `json:"hlookat"`
+		Vlookat json.Number `json:"vlookat"`
+	} `json:"initVisual"`
+	MaterialType string `json:"materialType"`
+	SceneCode    string `json:"sceneCode"`
+	SceneTitle   string `json:"sceneTitle"`
+	SomeData     struct {
+		Hotspots []*struct {
+			ArticleInfo struct {
+				HTML string `json:"html"`
+			} `json:"articleInfo"`
+			Ath            interface{} `json:"ath"`
+			Atv            interface{} `json:"atv"`
+			Audio          interface{} `json:"audio"`
+			CustomIconInfo struct {
+				Img string `json:"img"`
+			} `json:"customIconInfo"`
+			FodderID        []interface{} `json:"fodderId"`
+			FontSize        int64         `json:"fontSize"`
+			HotspotIconType string        `json:"hotspotIconType"`
+			HotspotTitle    string        `json:"hotspotTitle"`
+			HotspotType     string        `json:"hotspotType"`
+			Hyperlink       string        `json:"hyperlink"`
+			Icontype        string        `json:"icontype"`
+			Image           []interface{} `json:"image"`
+			ImageTextInfo   struct {
+				Audio        struct{}      `json:"audio"`
+				ImageList    []interface{} `json:"imageList"`
+				IsApplyToAll bool          `json:"isApplyToAll"`
+				Text         string        `json:"text"`
+			} `json:"imageTextInfo"`
+			Img     string `json:"img"`
+			Link    string `json:"link"`
+			Name    string `json:"name"`
+			PdfInfo struct {
+				Name string `json:"name"`
+				URL  string `json:"url"`
+			} `json:"pdfInfo"`
+			PersonalizedTagInfo struct {
+				BorderColor    string `json:"borderColor"`
+				FillColor      string `json:"fillColor"`
+				IsShowLine     bool   `json:"isShowLine"`
+				IsTextWrap     bool   `json:"isTextWrap"`
+				LineDirection  string `json:"lineDirection"`
+				TextColor      string `json:"textColor"`
+				TextDirection  string `json:"textDirection"`
+				TextNumPerLine int64  `json:"textNumPerLine"`
+			} `json:"personalizedTagInfo"`
+			PhoneInfo struct {
+				Phone string `json:"phone"`
+			} `json:"phoneInfo"`
+			Secne struct {
+				Category   interface{} `json:"category"`
+				CustomMask struct {
+					Earth struct {
+						Antidistorted bool   `json:"antidistorted"`
+						FodderID      string `json:"fodderId"`
+						Icon          string `json:"icon"`
+						IsShow        bool   `json:"isShow"`
+						Scale         int64  `json:"scale"`
+					} `json:"earth"`
+					Sky struct {
+						Antidistorted bool   `json:"antidistorted"`
+						FodderID      string `json:"fodderId"`
+						Icon          string `json:"icon"`
+						IsShow        bool   `json:"isShow"`
+						Scale         int64  `json:"scale"`
+					} `json:"sky"`
+				} `json:"customMask"`
+				Icon       string `json:"icon"`
+				ID         string `json:"id"`
+				InitVisual struct {
+					Hlookat    json.Number `json:"hlookat"`
+					Vlookat    json.Number `json:"vlookat"`
+					Vlookatmax json.Number `json:"vlookatmax"`
+					Vlookatmin json.Number `json:"vlookatmin"`
+				} `json:"initVisual"`
+				MaterialType string   `json:"materialType"`
+				SceneCode    string   `json:"sceneCode"`
+				SceneTitle   string   `json:"sceneTitle"`
+				SomeData     struct{} `json:"someData"`
+				Type         string   `json:"type"`
+				Version      string   `json:"version"`
+			} `json:"secne"`
+			SerialFrameInfo struct {
+				Duration    int64  `json:"duration"`
+				FrameNumber int64  `json:"frameNumber"`
+				Img         string `json:"img"`
+			} `json:"serialFrameInfo"`
+			Size             json.Number `json:"size"`
+			Textarea         string      `json:"textarea"`
+			TitleDisplayMode string      `json:"titleDisplayMode"`
+			TitlePosition    string      `json:"titlePosition"`
+			Type             string      `json:"type"`
+			Video            string      `json:"video"`
+		} `json:"hotspots"`
+	} `json:"someData"`
+	Type string `json:"type"`
+}
+
+type ScenesDataType struct {
+	FirstScene      *FirstSceneType `json:"firstScenes,string,omitempty"`
+	AppIcon         string          `json:"appIcon"`
+	BackgroundMusic struct {
+		ID      *json.Number `json:"id,omitempty"`
+		Name    string       `json:"name"`
+		OssPath string       `json:"ossPath"`
+	} `json:"backgroundMusic"`
+	CatalogRoot []struct {
+		Children []any       `json:"children"`
+		ID       interface{} `json:"id"`
+		Name     string      `json:"name"`
+	} `json:"catalogRoot"`
+	Catalogs []struct {
+		ID   interface{} `json:"id"`
+		Name string      `json:"name"`
+	} `json:"catalogs"`
+	CoverInfo struct {
+		CoverImageInWay   int64  `json:"coverImageInWay"`
+		CoverImageOrder   string `json:"coverImageOrder"`
+		CoverImgBac       string `json:"coverImgBac"`
+		CoverMoLoc        string `json:"coverMoLoc"`
+		CoverPcLoc        string `json:"coverPcLoc"`
+		CoverSelect       string `json:"coverSelect"`
+		CoverVideoBac     string `json:"coverVideoBac"`
+		CoverVideoControl int64  `json:"coverVideoControl"`
+		CoverVideoInWay   int64  `json:"coverVideoInWay"`
+		ImgColorSelec     string `json:"imgColorSelec"`
+		IsShowCover       int64  `json:"isShowCover"`
+		VideoColorSelec   string `json:"videoColorSelec"`
+		VideoMo           string `json:"videoMo"`
+		VideoMoIcon       string `json:"videoMoIcon"`
+		VideoMoLoc        string `json:"videoMoLoc"`
+		VideoPc           string `json:"videoPc"`
+		VideoPcIcon       string `json:"videoPcIcon"`
+		VideoPcLoc        string `json:"videoPcLoc"`
+	} `json:"coverInfo"`
+	CoverMo      string `json:"coverMo"`
+	CoverPc      string `json:"coverPc"`
+	CoverPcLoc   string `json:"coverPcLoc"`
+	CoverSelect  string `json:"coverSelect"`
+	CreateTime   string `json:"createTime"`
+	CustomButton []struct {
+		IsShow     bool   `json:"isShow"`
+		Name       string `json:"name"`
+		OpenMethod string `json:"openMethod"`
+		Type       string `json:"type"`
+		Value      string `json:"value"`
+	} `json:"customButton"`
+	Description string `json:"description"`
+	Explanation struct {
+		AudioID       string `json:"audioId"`
+		AudioName     string `json:"audioName"`
+		AudioURL      string `json:"audioUrl"`
+		OpenByDefault bool   `json:"openByDefault"`
+		Repeat        bool   `json:"repeat"`
+	} `json:"explanation"`
+
+	Icon                   string      `json:"icon"`
+	ID                     string      `json:"id"`
+	IsAuto                 int64       `json:"isAuto"`
+	IsLogo                 int64       `json:"isLogo"`
+	IsPassword             int64       `json:"isPassword"`
+	IsRemind               int64       `json:"isRemind"`
+	IsShowOpeningAnimation json.Number `json:"isShowOpeningAnimation"`
+	Logo                   string      `json:"logo"`
+	LogoChange             bool        `json:"logoChange"`
+	Name                   string      `json:"name"`
+	OpeningAnimationType   int64       `json:"openingAnimationType"`
+	OssSomeData            string      `json:"ossSomeData"`
+	Password               string      `json:"password"`
+	PcIcon                 string      `json:"pcIcon"`
+	QrCode                 string      `json:"qrCode"`
+	RemindTime             int64       `json:"remindTime"`
+	SceneIndex             string      `json:"sceneIndex"`
+	Scenes                 []struct {
+		Category   interface{} `json:"category"`
+		CustomMask struct {
+			Earth struct {
+				Antidistorted bool   `json:"antidistorted"`
+				FodderID      string `json:"fodderId"`
+				Icon          string `json:"icon"`
+				IsShow        bool   `json:"isShow"`
+				Scale         int64  `json:"scale"`
+			} `json:"earth"`
+			Sky struct {
+				Antidistorted bool   `json:"antidistorted"`
+				FodderID      string `json:"fodderId"`
+				Icon          string `json:"icon"`
+				IsShow        bool   `json:"isShow"`
+				Scale         int64  `json:"scale"`
+			} `json:"sky"`
+		} `json:"customMask"`
+		Icon       string `json:"icon"`
+		ID         string `json:"id"`
+		InitVisual struct {
+			Hlookat    json.Number  `json:"hlookat"`
+			Vlookat    json.Number  `json:"vlookat"`
+			Vlookatmax *json.Number `json:"vlookatmax"`
+			Vlookatmin *json.Number `json:"vlookatmin"`
+		} `json:"initVisual"`
+		MaterialType string `json:"materialType"`
+		SceneCode    string `json:"sceneCode"`
+		SceneTitle   string `json:"sceneTitle"`
+		SomeData     struct {
+			Hotspots []struct {
+				ArticleInfo struct {
+					HTML string `json:"html"`
+				} `json:"articleInfo"`
+				Ath            interface{} `json:"ath"`
+				Atv            interface{} `json:"atv"`
+				Audio          string      `json:"audio"`
+				CustomIconInfo struct {
+					Img string `json:"img"`
+				} `json:"customIconInfo"`
+				FodderID        []int64       `json:"fodderId"`
+				FontSize        int64         `json:"fontSize"`
+				HotspotIconType string        `json:"hotspotIconType"`
+				HotspotTitle    string        `json:"hotspotTitle"`
+				HotspotType     string        `json:"hotspotType"`
+				Hyperlink       string        `json:"hyperlink"`
+				Icontype        string        `json:"icontype"`
+				Image           []interface{} `json:"image"`
+				ImageTextInfo   struct {
+					Audio     struct{} `json:"audio"`
+					ImageList []struct {
+						Ancestors    string `json:"ancestors"`
+						CreateTime   string `json:"createTime"`
+						DirID        int64  `json:"dirId"`
+						DirName      string `json:"dirName"`
+						Dpi          string `json:"dpi"`
+						FileName     string `json:"fileName"`
+						FileSize     string `json:"fileSize"`
+						Icon         string `json:"icon"`
+						ID           int64  `json:"id"`
+						MaterialType string `json:"materialType"`
+						Name         string `json:"name"`
+						OssPath      string `json:"ossPath"`
+						PreviewIcon  string `json:"previewIcon"`
+						SceneCode    string `json:"sceneCode"`
+						Status       int64  `json:"status"`
+						TempID       string `json:"tempId"`
+						Type         string `json:"type"`
+						UpdateTime   string `json:"updateTime"`
+						UserID       string `json:"userId"`
+					} `json:"imageList"`
+					IsApplyToAll bool   `json:"isApplyToAll"`
+					Text         string `json:"text"`
+				} `json:"imageTextInfo"`
+				Img     string `json:"img"`
+				Link    string `json:"link"`
+				Name    string `json:"name"`
+				PdfInfo struct {
+					Name string `json:"name"`
+					URL  string `json:"url"`
+				} `json:"pdfInfo"`
+				PersonalizedTagInfo struct {
+					BorderColor    string `json:"borderColor"`
+					FillColor      string `json:"fillColor"`
+					IsShowLine     bool   `json:"isShowLine"`
+					IsTextWrap     bool   `json:"isTextWrap"`
+					LineDirection  string `json:"lineDirection"`
+					TextColor      string `json:"textColor"`
+					TextDirection  string `json:"textDirection"`
+					TextNumPerLine int64  `json:"textNumPerLine"`
+				} `json:"personalizedTagInfo"`
+				PhoneInfo struct {
+					Phone string `json:"phone"`
+				} `json:"phoneInfo"`
+				Secne struct {
+					Category   string `json:"category"`
+					CustomMask struct {
+						Earth struct {
+							Antidistorted bool   `json:"antidistorted"`
+							FodderID      string `json:"fodderId"`
+							Icon          string `json:"icon"`
+							IsShow        bool   `json:"isShow"`
+							Scale         int64  `json:"scale"`
+						} `json:"earth"`
+						Sky struct {
+							Antidistorted bool   `json:"antidistorted"`
+							FodderID      string `json:"fodderId"`
+							Icon          string `json:"icon"`
+							IsShow        bool   `json:"isShow"`
+							Scale         int64  `json:"scale"`
+						} `json:"sky"`
+					} `json:"customMask"`
+					Icon       string `json:"icon"`
+					ID         string `json:"id"`
+					InitVisual struct {
+						Hlookat    json.Number  `json:"hlookat"`
+						Vlookat    json.Number  `json:"vlookat"`
+						Vlookatmax *json.Number `json:"vlookatmax"`
+						Vlookatmin *json.Number `json:"vlookatmin"`
+					} `json:"initVisual"`
+					MaterialType string   `json:"materialType"`
+					SceneCode    string   `json:"sceneCode"`
+					SceneTitle   string   `json:"sceneTitle"`
+					SomeData     struct{} `json:"someData"`
+					Type         string   `json:"type"`
+					Version      string   `json:"version"`
+				} `json:"secne"`
+				SerialFrameInfo struct {
+					Duration    int64  `json:"duration"`
+					FrameNumber int64  `json:"frameNumber"`
+					Img         string `json:"img"`
+				} `json:"serialFrameInfo"`
+				Size             json.Number `json:"size"`
+				Textarea         string      `json:"textarea"`
+				TitleDisplayMode string      `json:"titleDisplayMode"`
+				TitlePosition    string      `json:"titlePosition"`
+				Type             string      `json:"type"`
+				Video            string      `json:"video"`
+			} `json:"hotspots"`
+		} `json:"someData"`
+		Type    string `json:"type"`
+		Version string `json:"version"`
+	} `json:"scenes"`
+	Share      string `json:"share"`
+	Status     int64  `json:"status"`
+	UpdateTime string `json:"updateTime"`
+	UserID     string `json:"userId"`
+}