Add 'for you' option for HomeTimeline

This commit is contained in:
Alessio 2023-08-20 18:47:30 -03:00
parent 4c91977e38
commit 466000f152
3 changed files with 27 additions and 5 deletions

View File

@ -938,8 +938,8 @@ func GetUserLikes(user_id UserID, cursor string) (TweetTrove, error) {
return the_api.GetUserLikes(user_id, cursor) return the_api.GetUserLikes(user_id, cursor)
} }
func (api API) GetHomeTimeline(cursor string) (TweetTrove, error) { func (api API) GetHomeTimeline(cursor string, for_you bool) (TweetTrove, error) {
url := "https://twitter.com/i/api/graphql/W4Tpu1uueTGK53paUgxF0Q/HomeTimeline" var url string
body_struct := struct { body_struct := struct {
Variables GraphqlVariables `json:"variables"` Variables GraphqlVariables `json:"variables"`
Features GraphqlFeatures `json:"features"` Features GraphqlFeatures `json:"features"`
@ -973,7 +973,13 @@ func (api API) GetHomeTimeline(cursor string) (TweetTrove, error) {
LongformNotetweetsInlineMediaEnabled: true, LongformNotetweetsInlineMediaEnabled: true,
ResponsiveWebEnhanceCardsEnabled: false, ResponsiveWebEnhanceCardsEnabled: false,
}, },
QueryID: "W4Tpu1uueTGK53paUgxF0Q", }
if for_you {
body_struct.QueryID = "iMKdg5Vq-ldwmiqCbvX1QA"
url = "https://twitter.com/i/api/graphql/iMKdg5Vq-ldwmiqCbvX1QA/HomeLatestTimeline"
} else {
body_struct.QueryID = "W4Tpu1uueTGK53paUgxF0Q"
url = "https://twitter.com/i/api/graphql/W4Tpu1uueTGK53paUgxF0Q/HomeTimeline"
} }
var response APIV2Response var response APIV2Response
body_bytes, err := json.Marshal(body_struct) body_bytes, err := json.Marshal(body_struct)
@ -991,6 +997,6 @@ func (api API) GetHomeTimeline(cursor string) (TweetTrove, error) {
return trove, err return trove, err
} }
func GetHomeTimeline(cursor string) (TweetTrove, error) { func GetHomeTimeline(cursor string, for_you bool) (TweetTrove, error) {
return the_api.GetHomeTimeline(cursor) return the_api.GetHomeTimeline(cursor, for_you)
} }

View File

@ -883,6 +883,21 @@ func TestParseHomeTimeline(t *testing.T) {
require.Len(trove.Users, 11) require.Len(trove.Users, 11)
} }
func TestParseHomeTimelineForYou(t *testing.T) {
require := require.New(t)
data, err := os.ReadFile("test_responses/api_v2/home_timeline_for_you.json")
require.NoError(err)
var response_result APIV2Response
err = json.Unmarshal(data, &response_result)
require.NoError(err)
trove, err := response_result.ToTweetTrove()
require.NoError(err)
require.Len(trove.Tweets, 13)
require.Len(trove.Retweets, 1)
require.Len(trove.Users, 8)
}
func TestParseResultAsLikes(t *testing.T) { func TestParseResultAsLikes(t *testing.T) {
assert := assert.New(t) assert := assert.New(t)
require := require.New(t) require := require.New(t)

File diff suppressed because one or more lines are too long