Skip to content

Instantly share code, notes, and snippets.

@post04
Created November 2, 2023 18:17
Show Gist options
  • Select an option

  • Save post04/640953cbd9613b66b5e8398445c2ebce to your computer and use it in GitHub Desktop.

Select an option

Save post04/640953cbd9613b66b5e8398445c2ebce to your computer and use it in GitHub Desktop.
twitter view JOT request
// ViewJOT is the analytics request
func (s *Session) ViewJOT(ID string) error {
params := url.Values{}
timeNow := int(time.Now().UnixMilli())
params.Add("debug", "true")
params.Add("log", fmt.Sprintf(`[{"_category_":"client_event","format_version":2,"triggered_on":%v,"tweet_id":"%s","items":[{"item_type":0,"id":"%s","author_id":"123","is_viewer_follows_tweet_author":false,"is_tweet_author_follows_viewer":false,"is_viewer_super_following_tweet_author":false,"is_viewer_super_followed_by_tweet_author":false,"is_tweet_author_super_followable":false,"engagement_metrics":{"reply_count":0,"retweet_count":0,"favorite_count":0,"quote_count":0}}],"event_namespace":{"page":"tweet","action":"bottom","client":"m5"},"client_event_sequence_start_timestamp":%v,"client_event_sequence_number":10,"client_app_id":"3033300"},{"_category_":"client_event","format_version":2,"triggered_on":%v,"items":[{"item_type":0,"id":"%s","position":0,"sort_index":"1","percent_screen_height_100k":31346,"author_id":"123","is_viewer_follows_tweet_author":false,"is_tweet_author_follows_viewer":false,"is_viewer_super_following_tweet_author":false,"is_viewer_super_followed_by_tweet_author":false,"is_tweet_author_super_followable":false,"engagement_metrics":{"reply_count":0,"retweet_count":0,"favorite_count":0,"quote_count":0}}],"event_namespace":{"page":"tweet","component":"stream","action":"results","client":"m5"},"client_event_sequence_start_timestamp":%v,"client_event_sequence_number":11,"client_app_id":"3033300"}]`, timeNow, ID, ID, timeNow-(1000+rand.Intn(500)), timeNow-(1000+rand.Intn(600)), ID, timeNow-(1000+rand.Intn(600))))
req, err := http.NewRequest("POST", "https://api.twitter.com/1.1/jot/client_event.json?keepalive=true", strings.NewReader(params.Encode()))
if err != nil {
return err
}
req.Header = s.FormatHeaders(`Content-Type: application/x-www-form-urlencoded|accept: */*|accept-encoding: gzip, deflate, br|accept-language: en-US,en;q=0.9|
ization: Bearer AAAAAAAAAAAAAAAAAAAAANRILgAAAAAAnNwIzUejRCOuH5E6I8xnZz4puTs%3D1Zv7ttfk8LF81IUq16cHjhLTvJu4FA33AGWWjCpTnA|cache-control: no-cache|pragma: no-cache|sec-ch-ua: "Chromium";v="112", "Not_A Brand";v="24", "Opera GX";v="98"|sec-ch-ua-mobile: ?0|sec-ch-ua-platform: "Windows"|sec-fetch-dest: empty|sec-fetch-mode: cors|sec-fetch-site: same-origin|x-twitter-active-user: yes|x-twitter-auth-type: OAuth2Session|x-twitter-client-language: en`)
req.Header.Set("User-Agent", s.UserAgent)
req.Header.Set("Cookie", s.FormatCookies())
req.Header.Set("X-Csrf-Token", s.Cookies["ct0"])
resp, err := s.HTTPClient.Do(req)
if err != nil {
fmt.Printf("[%v] Failed to complete view JOT (retrying): %s\n", s.Thread, err)
return s.ViewJOT(ID)
}
defer resp.Body.Close()
return nil
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment