diff --git a/douyin.go b/douyin.go index e73b96d..5478e5c 100644 --- a/douyin.go +++ b/douyin.go @@ -72,11 +72,11 @@ func (this *douyin) set(tv *Tv) error { } // 抖音 status == 2 代表是开播的状态 - if autoGenerated.InitialState.RoomStore.RoomInfo.Room.Status != 2 { + if autoGenerated.App.InitialState.RoomStore.RoomInfo.Room.Status != 2 { return nil } - streamDataStr := autoGenerated.InitialState.RoomStore.RoomInfo.Room.StreamURL.LiveCoreSdkData.PullData.StreamData + streamDataStr := autoGenerated.App.InitialState.RoomStore.RoomInfo.Room.StreamURL.LiveCoreSdkData.PullData.StreamData var streamData model.DouyinStreamData err = jsoniter.UnmarshalFromString(streamDataStr, &streamData) if err != nil { @@ -86,7 +86,7 @@ func (this *douyin) set(tv *Tv) error { tv.streamUrl = streamData.Data.Origin.Main.Flv tv.roomOn = true - tv.roomName = autoGenerated.InitialState.RoomStore.RoomInfo.Room.Title + tv.roomName = autoGenerated.App.InitialState.RoomStore.RoomInfo.Room.Title return nil } diff --git a/douyin_test.go b/douyin_test.go new file mode 100644 index 0000000..ef24fe8 --- /dev/null +++ b/douyin_test.go @@ -0,0 +1,19 @@ +package tv_test + +import ( + "testing" + + "github.com/go-olive/tv" +) + +func TestDouyin_Snap(t *testing.T) { + u := "https://live.douyin.com/278246244716" + cookie := "__ac_nonce=062f60f640020c76e5b7c; __ac_signature=_02B4Z6wo00f011BxI-gAAIDAxKd45w5q9dNQUSdAALb1WEJMf.7Ma1NuqG0oiO7cYko5mx60CrOZ7DEMeiImZWCkLuxGYUV7nL8NBVxgyWeCnQdWfhttJNV21omp7bThIi8SVu-58ihu3EiU32;" + dy, err := tv.NewWithUrl(u, tv.SetCookie(cookie)) + if err != nil { + println(err.Error()) + return + } + dy.Snap() + t.Log(dy) +} diff --git a/huya_test.go b/huya_test.go new file mode 100644 index 0000000..297118b --- /dev/null +++ b/huya_test.go @@ -0,0 +1,18 @@ +package tv_test + +import ( + "testing" + + "github.com/go-olive/tv" +) + +func TestHuya_Snap(t *testing.T) { + u := "https://www.huya.com/520588" + huya, err := tv.NewWithUrl(u) + if err != nil { + println(err.Error()) + return + } + huya.Snap() + t.Log(huya) +} diff --git a/model/douyin.go b/model/douyin.go index 1449bd3..34d3153 100644 --- a/model/douyin.go +++ b/model/douyin.go @@ -1,353 +1,62 @@ package model type DouyinAutoGenerated struct { - Location string `json:"location"` - Odin struct { - UserID string `json:"user_id"` - UserType int `json:"user_type"` - UserIsAuth int `json:"user_is_auth"` - UserIsLogin int `json:"user_is_login"` - UserUniqueID string `json:"user_unique_id"` - } `json:"odin"` - RouteInitialProps struct { - StatusCode string `json:"status_code"` - LayoutData struct { - CategoryTab struct { - CategoryData []struct { - Partition struct { - IDStr string `json:"id_str"` - Type int `json:"type"` - Title string `json:"title"` - } `json:"partition"` - SubPartition []struct { - Partition struct { - IDStr string `json:"id_str"` - Type int `json:"type"` - Title string `json:"title"` - } `json:"partition"` - SubPartition []interface{} `json:"sub_partition"` - } `json:"sub_partition"` - } `json:"categoryData"` - RecommendPartitions []struct { - Partition struct { - IDStr string `json:"id_str"` - Type int `json:"type"` - Title string `json:"title"` - } `json:"partition"` - SubPartition []struct { - IDStr string `json:"id_str"` - Type int `json:"type"` - Title string `json:"title"` - } `json:"sub_partition"` - } `json:"recommendPartitions"` - } `json:"categoryTab"` - ThemeChange int `json:"themeChange"` - ShowNewHeader int `json:"showNewHeader"` - Collection int `json:"collection"` - SearchBarStyle int `json:"searchBarStyle"` - ShowImIcon int `json:"showImIcon"` - ImShareGroup int `json:"imShareGroup"` - SearchBarHistoryPanelStyle int `json:"searchBarHistoryPanelStyle"` - IsClient bool `json:"isClient"` - } `json:"layoutData"` - } `json:"routeInitialProps"` - LayoutData struct { - CategoryTab struct { - CategoryData []struct { - Partition struct { - IDStr string `json:"id_str"` - Type int `json:"type"` - Title string `json:"title"` - } `json:"partition"` - SubPartition []struct { - Partition struct { - IDStr string `json:"id_str"` - Type int `json:"type"` - Title string `json:"title"` - } `json:"partition"` - SubPartition []interface{} `json:"sub_partition"` - } `json:"sub_partition"` - } `json:"categoryData"` - RecommendPartitions []struct { - Partition struct { - IDStr string `json:"id_str"` - Type int `json:"type"` - Title string `json:"title"` - } `json:"partition"` - SubPartition []struct { - IDStr string `json:"id_str"` - Type int `json:"type"` - Title string `json:"title"` - } `json:"sub_partition"` - } `json:"recommendPartitions"` - } `json:"categoryTab"` - ThemeChange int `json:"themeChange"` - ShowNewHeader int `json:"showNewHeader"` - Collection int `json:"collection"` - SearchBarStyle int `json:"searchBarStyle"` - ShowImIcon int `json:"showImIcon"` - ImShareGroup int `json:"imShareGroup"` - SearchBarHistoryPanelStyle int `json:"searchBarHistoryPanelStyle"` - IsClient bool `json:"isClient"` - } `json:"layoutData"` - InitialState struct { - AppStore struct { - } `json:"appStore"` - UserStore struct { - UserInfo struct { - } `json:"userInfo"` - HeaderUserInfo struct { - Info struct { - } `json:"info"` - } `json:"headerUserInfo"` - Odin struct { - UserID string `json:"user_id"` - UserType int `json:"user_type"` - UserIsAuth int `json:"user_is_auth"` - UserIsLogin int `json:"user_is_login"` - UserUniqueID string `json:"user_unique_id"` - } `json:"odin"` - } `json:"userStore"` - HomeStore struct { - SelectedRoom interface{} `json:"selectedRoom"` - } `json:"homeStore"` - RoomStore struct { - RoomInfo struct { - Room struct { - IDStr string `json:"id_str"` - Status int `json:"status"` - StatusStr string `json:"status_str"` - Title string `json:"title"` - UserCountStr string `json:"user_count_str"` - Cover struct { - URLList []string `json:"url_list"` - } `json:"cover"` - StreamURL struct { - FlvPullURL struct { - FullHd1 string `json:"FULL_HD1"` - Hd1 string `json:"HD1"` - Sd1 string `json:"SD1"` - Sd2 string `json:"SD2"` - } `json:"flv_pull_url"` - DefaultResolution string `json:"default_resolution"` - HlsPullURLMap struct { - FullHd1 string `json:"FULL_HD1"` - Hd1 string `json:"HD1"` - Sd1 string `json:"SD1"` - Sd2 string `json:"SD2"` - } `json:"hls_pull_url_map"` - HlsPullURL string `json:"hls_pull_url"` - StreamOrientation int `json:"stream_orientation"` - LiveCoreSdkData struct { - PullData struct { - Options struct { - DefaultQuality struct { - Name string `json:"name"` - SdkKey string `json:"sdk_key"` - VCodec string `json:"v_codec"` - Resolution string `json:"resolution"` - Level int `json:"level"` - } `json:"default_quality"` - Qualities []struct { - Name string `json:"name"` - SdkKey string `json:"sdk_key"` - VCodec string `json:"v_codec"` - Resolution string `json:"resolution"` - Level int `json:"level"` - } `json:"qualities"` - } `json:"options"` - StreamData string `json:"stream_data"` - } `json:"pull_data"` - } `json:"live_core_sdk_data"` - } `json:"stream_url"` - MosaicStatus int `json:"mosaic_status"` - MosaicStatusStr string `json:"mosaic_status_str"` - AdminUserIds []int64 `json:"admin_user_ids"` - AdminUserIdsStr []string `json:"admin_user_ids_str"` - Owner struct { - IDStr string `json:"id_str"` - SecUID string `json:"sec_uid"` - Nickname string `json:"nickname"` - AvatarThumb struct { + App struct { + InitialState struct { + RoomStore struct { + RoomInfo struct { + Room struct { + IDStr string `json:"id_str"` + Status int `json:"status"` + StatusStr string `json:"status_str"` + Title string `json:"title"` + UserCountStr string `json:"user_count_str"` + Cover struct { URLList []string `json:"url_list"` - } `json:"avatar_thumb"` - FollowInfo struct { - FollowStatus int `json:"follow_status"` - FollowStatusStr string `json:"follow_status_str"` - } `json:"follow_info"` - } `json:"owner"` - RoomAuth struct { - Chat bool `json:"Chat"` - Danmaku bool `json:"Danmaku"` - Gift bool `json:"Gift"` - LuckMoney bool `json:"LuckMoney"` - Digg bool `json:"Digg"` - RoomContributor bool `json:"RoomContributor"` - Props bool `json:"Props"` - UserCard bool `json:"UserCard"` - Poi bool `json:"POI"` - MoreAnchor int `json:"MoreAnchor"` - Banner int `json:"Banner"` - Share int `json:"Share"` - UserCorner int `json:"UserCorner"` - Landscape int `json:"Landscape"` - LandscapeChat int `json:"LandscapeChat"` - PublicScreen int `json:"PublicScreen"` - GiftAnchorMt int `json:"GiftAnchorMt"` - RecordScreen int `json:"RecordScreen"` - DonationSticker int `json:"DonationSticker"` - HourRank int `json:"HourRank"` - CommerceCard int `json:"CommerceCard"` - AudioChat int `json:"AudioChat"` - DanmakuDefault int `json:"DanmakuDefault"` - KtvOrderSong int `json:"KtvOrderSong"` - SelectionAlbum int `json:"SelectionAlbum"` - Like int `json:"Like"` - MultiplierPlayback int `json:"MultiplierPlayback"` - DownloadVideo int `json:"DownloadVideo"` - Collect int `json:"Collect"` - TimedShutdown int `json:"TimedShutdown"` - Seek int `json:"Seek"` - Denounce int `json:"Denounce"` - Dislike int `json:"Dislike"` - OnlyTa int `json:"OnlyTa"` - CastScreen int `json:"CastScreen"` - CommentWall int `json:"CommentWall"` - BulletStyle int `json:"BulletStyle"` - ShowGamePlugin int `json:"ShowGamePlugin"` - VSGift int `json:"VSGift"` - VSTopic int `json:"VSTopic"` - VSRank int `json:"VSRank"` - AdminCommentWall int `json:"AdminCommentWall"` - CommerceComponent int `json:"CommerceComponent"` - DouPlus int `json:"DouPlus"` - GamePointsPlaying int `json:"GamePointsPlaying"` - Poster int `json:"Poster"` - Highlights int `json:"Highlights"` - TypingCommentState int `json:"TypingCommentState"` - StrokeUpDownGuide int `json:"StrokeUpDownGuide"` - UpRightStatsFloatingLayer int `json:"UpRightStatsFloatingLayer"` - CastScreenExplicit int `json:"CastScreenExplicit"` - Selection int `json:"Selection"` - IndustryService int `json:"IndustryService"` - VerticalRank int `json:"VerticalRank"` - EnterEffects int `json:"EnterEffects"` - FansClub int `json:"FansClub"` - EmojiOutside int `json:"EmojiOutside"` - CanSellTicket int `json:"CanSellTicket"` - DouPlusPopularityGem int `json:"DouPlusPopularityGem"` - MissionCenter int `json:"MissionCenter"` - ExpandScreen int `json:"ExpandScreen"` - FansGroup int `json:"FansGroup"` - Topic int `json:"Topic"` - AnchorMission int `json:"AnchorMission"` - Teleprompter int `json:"Teleprompter"` - SpecialStyle struct { - Chat struct { - UnableStyle int `json:"UnableStyle"` - Content string `json:"Content"` - OffType int `json:"OffType"` - } `json:"Chat"` - } `json:"SpecialStyle"` - } `json:"room_auth"` - LiveRoomMode int `json:"live_room_mode"` - Stats struct { - TotalUserDesp string `json:"total_user_desp"` - LikeCount int `json:"like_count"` - TotalUserStr string `json:"total_user_str"` - UserCountStr string `json:"user_count_str"` - } `json:"stats"` - HasCommerceGoods bool `json:"has_commerce_goods"` - LinkerMap struct { - Num1 int64 `json:"1"` - } `json:"linker_map"` - LinkerDetail struct { - LinkerPlayModes []interface{} `json:"linker_play_modes"` - BigPartyLayoutConfigVersion int `json:"big_party_layout_config_version"` - AcceptAudiencePreApply bool `json:"accept_audience_pre_apply"` - LinkerUILayout int `json:"linker_ui_layout"` - EnableAudienceLinkmic int `json:"enable_audience_linkmic"` - } `json:"linker_detail"` - } `json:"room"` - RoomID string `json:"roomId"` - WebRid string `json:"web_rid"` - Anchor struct { - IDStr string `json:"id_str"` - SecUID string `json:"sec_uid"` - Nickname string `json:"nickname"` - AvatarThumb struct { - URLList []string `json:"url_list"` - } `json:"avatar_thumb"` - FollowInfo struct { - FollowStatus int `json:"follow_status"` - FollowStatusStr string `json:"follow_status_str"` - } `json:"follow_info"` - } `json:"anchor"` - RoomExtra struct { - DiggColor string `json:"digg_color"` - PayScores string `json:"pay_scores"` - IsOfficialChannel bool `json:"is_official_channel"` - } `json:"roomExtra"` - EnterMode int `json:"enter_mode"` - QrcodeURL string `json:"qrcode_url"` - PartitionRoadMap struct { - } `json:"partition_road_map"` - RelevantRooms []interface{} `json:"relevant_rooms"` - } `json:"roomInfo"` - EmojiList []interface{} `json:"emojiList"` - EmojiReflex struct { - } `json:"emojiReflex"` - } `json:"roomStore"` - LinkmicStore struct { - ApplySource string `json:"applySource"` - LinkMicConfig struct { - Config struct { - } `json:"config"` - } `json:"linkMicConfig"` - LinkMicSeats struct { - Num0 struct { - Idx int `json:"idx"` - } `json:"0"` - Num1 struct { - Idx int `json:"idx"` - } `json:"1"` - Num2 struct { - Idx int `json:"idx"` - } `json:"2"` - Num3 struct { - Idx int `json:"idx"` - } `json:"3"` - Num4 struct { - Idx int `json:"idx"` - } `json:"4"` - Num5 struct { - Idx int `json:"idx"` - } `json:"5"` - Num6 struct { - Idx int `json:"idx"` - } `json:"6"` - Num7 struct { - Idx int `json:"idx"` - } `json:"7"` - Num8 struct { - Idx int `json:"idx"` - } `json:"8"` - } `json:"linkMicSeats"` - SelectedLinkMicDevices struct { - } `json:"selectedLinkMicDevices"` - LinkStatus int `json:"linkStatus"` - DevicesModalMode int `json:"devicesModalMode"` - AudioPermission int `json:"audioPermission"` - VideoPermission int `json:"videoPermission"` - IsFansGuide bool `json:"isFansGuide"` - IsCandidate bool `json:"isCandidate"` - IsPlayModeNotSupport bool `json:"isPlayModeNotSupport"` - } `json:"linkmicStore"` - NavigationStore struct { - RecommendNavList []interface{} `json:"recommendNavList"` - NavigationList []interface{} `json:"navigationList"` - } `json:"navigationStore"` - } `json:"initialState"` + } `json:"cover"` + StreamURL struct { + FlvPullURL struct { + FullHd1 string `json:"FULL_HD1"` + Hd1 string `json:"HD1"` + Sd1 string `json:"SD1"` + Sd2 string `json:"SD2"` + } `json:"flv_pull_url"` + DefaultResolution string `json:"default_resolution"` + HlsPullURLMap struct { + FullHd1 string `json:"FULL_HD1"` + Hd1 string `json:"HD1"` + Sd1 string `json:"SD1"` + Sd2 string `json:"SD2"` + } `json:"hls_pull_url_map"` + HlsPullURL string `json:"hls_pull_url"` + StreamOrientation int `json:"stream_orientation"` + LiveCoreSdkData struct { + PullData struct { + Options struct { + DefaultQuality struct { + Name string `json:"name"` + SdkKey string `json:"sdk_key"` + VCodec string `json:"v_codec"` + Resolution string `json:"resolution"` + Level int `json:"level"` + } `json:"default_quality"` + Qualities []struct { + Name string `json:"name"` + SdkKey string `json:"sdk_key"` + VCodec string `json:"v_codec"` + Resolution string `json:"resolution"` + Level int `json:"level"` + } `json:"qualities"` + } `json:"options"` + StreamData string `json:"stream_data"` + } `json:"pull_data"` + } `json:"live_core_sdk_data"` + } `json:"stream_url"` + } `json:"room"` + } `json:"roomInfo"` + } `json:"roomStore"` + } `json:"initialState"` + } `json:"app"` } type DouyinStreamData struct {