5
5
"fmt"
6
6
"github.com/codesoap/ytools"
7
7
"os"
8
- "strings"
9
8
)
10
9
11
10
type Info struct {
@@ -16,7 +15,6 @@ type Info struct {
16
15
// to load something like this:
17
16
// https://www.youtube.com/annotations_invideo?video_id=DuoTdnq_OqE
18
17
Likes string
19
- Dislikes string
20
18
Date string
21
19
Description string
22
20
}
@@ -49,9 +47,20 @@ type VideoPrimaryInfoRenderer struct {
49
47
}
50
48
}
51
49
}
52
- SentimentBar struct {
53
- SentimentBarRenderer struct {
54
- Tooltip string
50
+ VideoActions struct {
51
+ MenuRenderer struct {
52
+ TopLevelButtons []struct {
53
+ ToggleButtonRenderer struct {
54
+ TargetId string
55
+ DefaultText struct {
56
+ Accessibility struct {
57
+ AccessibilityData struct {
58
+ Label string
59
+ }
60
+ }
61
+ }
62
+ }
63
+ }
55
64
}
56
65
}
57
66
DateText struct {
@@ -92,8 +101,8 @@ func main() {
92
101
93
102
func printInfo (info Info ) {
94
103
fmt .Println (info .Title )
95
- f := "%s ▲ %s ▼ %s %s\n \n "
96
- fmt .Printf (f , info .Views , info .Likes , info .Dislikes , info . Date )
104
+ f := "%s %s %s\n \n "
105
+ fmt .Printf (f , info .Views , info .Likes , info .Date )
97
106
fmt .Println (info .Description )
98
107
}
99
108
@@ -122,7 +131,7 @@ func extractInfo(dataJson []byte) (info Info, err error) {
122
131
if err = fillViews (& info , primaryInfo ); err != nil {
123
132
return
124
133
}
125
- if err = fillVotes (& info , primaryInfo ); err != nil {
134
+ if err = fillLikes (& info , primaryInfo ); err != nil {
126
135
return
127
136
}
128
137
if err = fillDate (& info , primaryInfo ); err != nil {
@@ -152,15 +161,14 @@ func fillViews(info *Info, data VideoPrimaryInfoRenderer) error {
152
161
return nil
153
162
}
154
163
155
- func fillVotes (info * Info , data VideoPrimaryInfoRenderer ) error {
156
- tooltip := data .SentimentBar .SentimentBarRenderer .Tooltip
157
- numbers := strings .Split (tooltip , " / " )
158
- if len (numbers ) != 2 {
159
- return fmt .Errorf ("could not parse likes and dislikes" )
160
- }
161
- info .Likes = numbers [0 ]
162
- info .Dislikes = numbers [1 ]
163
- return nil
164
+ func fillLikes (info * Info , data VideoPrimaryInfoRenderer ) error {
165
+ for _ , button := range data .VideoActions .MenuRenderer .TopLevelButtons {
166
+ if button .ToggleButtonRenderer .TargetId == "watch-like" {
167
+ info .Likes = button .ToggleButtonRenderer .DefaultText .Accessibility .AccessibilityData .Label
168
+ return nil
169
+ }
170
+ }
171
+ return fmt .Errorf ("like count not found" )
164
172
}
165
173
166
174
func fillDate (info * Info , data VideoPrimaryInfoRenderer ) error {
0 commit comments