2020-02-12 10:45:19 +02:00
|
|
|
package twitterscraper
|
|
|
|
|
|
2022-03-17 12:01:58 +02:00
|
|
|
import "fmt"
|
|
|
|
|
|
2020-05-14 21:52:55 +03:00
|
|
|
// GetTrends return list of trends.
|
2020-12-12 23:33:57 +02:00
|
|
|
func (s *Scraper) GetTrends() ([]string, error) {
|
2026-05-21 18:54:10 +03:00
|
|
|
req, err := s.newRequest("GET", "https://api.x.com/2/guide.json")
|
2020-02-12 10:45:19 +02:00
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
|
2020-12-11 20:58:49 +02:00
|
|
|
q := req.URL.Query()
|
|
|
|
|
q.Add("count", "20")
|
|
|
|
|
q.Add("candidate_source", "trends")
|
|
|
|
|
q.Add("include_page_configuration", "false")
|
|
|
|
|
q.Add("entity_tokens", "false")
|
|
|
|
|
req.URL.RawQuery = q.Encode()
|
2020-02-12 10:45:19 +02:00
|
|
|
|
2023-06-01 23:20:11 +03:00
|
|
|
var jsn timelineV1
|
2023-05-30 17:14:38 +03:00
|
|
|
curBearerToken := s.bearerToken
|
|
|
|
|
if curBearerToken != bearerToken2 {
|
|
|
|
|
s.setBearerToken(bearerToken2)
|
|
|
|
|
}
|
2020-12-12 23:33:57 +02:00
|
|
|
err = s.RequestAPI(req, &jsn)
|
2023-05-30 17:14:38 +03:00
|
|
|
if curBearerToken != bearerToken2 {
|
|
|
|
|
s.setBearerToken(curBearerToken)
|
|
|
|
|
}
|
2020-02-12 10:45:19 +02:00
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
|
2022-03-17 12:01:58 +02:00
|
|
|
if len(jsn.Timeline.Instructions[1].AddEntries.Entries) < 2 {
|
|
|
|
|
return nil, fmt.Errorf("no trend entries found")
|
|
|
|
|
}
|
|
|
|
|
|
2020-02-12 10:45:19 +02:00
|
|
|
var trends []string
|
2020-12-11 20:58:49 +02:00
|
|
|
for _, item := range jsn.Timeline.Instructions[1].AddEntries.Entries[1].Content.TimelineModule.Items {
|
|
|
|
|
trends = append(trends, item.Item.ClientEventInfo.Details.GuideDetails.TransparentGuideDetails.TrendMetadata.TrendName)
|
|
|
|
|
}
|
|
|
|
|
|
2020-02-12 10:45:19 +02:00
|
|
|
return trends, nil
|
|
|
|
|
}
|