commit
0c2489c695
3 changed files with 41 additions and 0 deletions
13
timeline.go
13
timeline.go
|
|
@ -2,6 +2,7 @@ package twitterscraper
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
@ -60,6 +61,10 @@ type timeline struct {
|
||||||
QuotedStatusIDStr string `json:"quoted_status_id_str"`
|
QuotedStatusIDStr string `json:"quoted_status_id_str"`
|
||||||
Time time.Time `json:"time"`
|
Time time.Time `json:"time"`
|
||||||
UserIDStr string `json:"user_id_str"`
|
UserIDStr string `json:"user_id_str"`
|
||||||
|
Views struct {
|
||||||
|
State string `json:"state"`
|
||||||
|
Count string `json:"count"`
|
||||||
|
} `json:"ext_views"`
|
||||||
} `json:"tweets"`
|
} `json:"tweets"`
|
||||||
Users map[string]struct {
|
Users map[string]struct {
|
||||||
CreatedAt string `json:"created_at"`
|
CreatedAt string `json:"created_at"`
|
||||||
|
|
@ -196,6 +201,14 @@ func (timeline *timeline) parseTweet(id string) *Tweet {
|
||||||
tw.RetweetedStatus = timeline.parseTweet(tweet.RetweetedStatusIDStr)
|
tw.RetweetedStatus = timeline.parseTweet(tweet.RetweetedStatusIDStr)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if tweet.Views.Count != "" {
|
||||||
|
views, viewsErr := strconv.Atoi(tweet.Views.Count)
|
||||||
|
if viewsErr != nil {
|
||||||
|
views = 0
|
||||||
|
}
|
||||||
|
tw.Views = views
|
||||||
|
}
|
||||||
|
|
||||||
for _, pinned := range timeline.GlobalObjects.Users[tweet.UserIDStr].PinnedTweetIdsStr {
|
for _, pinned := range timeline.GlobalObjects.Users[tweet.UserIDStr].PinnedTweetIdsStr {
|
||||||
if tweet.ConversationIDStr == pinned {
|
if tweet.ConversationIDStr == pinned {
|
||||||
tw.IsPin = true
|
tw.IsPin = true
|
||||||
|
|
|
||||||
|
|
@ -190,3 +190,30 @@ func TestRetweet(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestTweetViews(t *testing.T) {
|
||||||
|
sample := &twitterscraper.Tweet{
|
||||||
|
HTML: "Replies and likes don’t tell the whole story. We’re making it easier to tell *just* how many people have seen your Tweets with the addition of view counts, shown right next to likes. Now on iOS and Android, web coming soon.",
|
||||||
|
ID: "1606055187348688896",
|
||||||
|
Likes: 2839,
|
||||||
|
Name: "Twitter Support",
|
||||||
|
PermanentURL: "https://twitter.com/TwitterSupport/status/1606055187348688896",
|
||||||
|
Replies: 3427,
|
||||||
|
Retweets: 783,
|
||||||
|
Text: "Replies and likes don’t tell the whole story. We’re making it easier to tell *just* how many people have seen your Tweets with the addition of view counts, shown right next to likes. Now on iOS and Android, web coming soon.",
|
||||||
|
TimeParsed: time.Date(2022, 12, 22, 22, 32, 50, 0, time.FixedZone("UTC", 0)),
|
||||||
|
Timestamp: 1612881838,
|
||||||
|
UserID: "17874544",
|
||||||
|
Username: "TwitterSupport",
|
||||||
|
Views: 3189278,
|
||||||
|
}
|
||||||
|
scraper := twitterscraper.New()
|
||||||
|
tweet, err := scraper.GetTweet("1606055187348688896")
|
||||||
|
if err != nil {
|
||||||
|
t.Error(err)
|
||||||
|
} else {
|
||||||
|
if tweet.Views < sample.Views {
|
||||||
|
t.Error("Views must be greater than or equal to the sample")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
1
types.go
1
types.go
|
|
@ -50,6 +50,7 @@ type (
|
||||||
UserID string
|
UserID string
|
||||||
Username string
|
Username string
|
||||||
Videos []Video
|
Videos []Video
|
||||||
|
Views int
|
||||||
SensitiveContent bool
|
SensitiveContent bool
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue