From 0c484a61b1029a57c896b8c9e3d9b70a8008a494 Mon Sep 17 00:00:00 2001 From: Alexander Sheiko Date: Wed, 23 Dec 2020 19:53:48 +0200 Subject: [PATCH] Use enum search mode --- README.md | 16 ++++++++++++--- scraper.go | 58 ++++++++++++++++++++++-------------------------------- search.go | 13 ++++++++---- 3 files changed, 45 insertions(+), 42 deletions(-) diff --git a/README.md b/README.md index 89ff0e5..7fbb425 100644 --- a/README.md +++ b/README.md @@ -65,12 +65,22 @@ func main() { The search ends if we have 50 tweets. -### Search tweet in realtime +See [Rules and filtering](https://developer.twitter.com/en/docs/tweets/rules-and-filtering/overview/standard-operators) for build standard queries. + + +#### Set search mode + ```golang -scraper.SearchLive(true) +scraper.SetSearchMode(twitterscraper.SearchLatest) ``` -See [Rules and filtering](https://developer.twitter.com/en/docs/tweets/rules-and-filtering/overview/standard-operators) for build standard queries. +Options: + +* `twitterscraper.SearchTop` - default mode +* `twitterscraper.SearchLatest` - live mode +* `twitterscraper.SearchPeople` - user mode +* `twitterscraper.SearchPhotos` - image mode +* `twitterscraper.SearchVideos` - video mode ### Get profile diff --git a/scraper.go b/scraper.go index f73ce5a..125388f 100644 --- a/scraper.go +++ b/scraper.go @@ -15,9 +15,25 @@ type Scraper struct { client *http.Client guestToken string includeReplies bool - searchMode string + searchMode SearchMode } +// SearchMode type +type SearchMode int + +const ( + // SearchTop - default mode + SearchTop SearchMode = iota + // SearchLatest - live mode + SearchLatest + // SearchPeople - user mode + SearchPeople + // SearchPhotos - image mode + SearchPhotos + // SearchVideos - video mode + SearchVideos +) + var defaultScraper *Scraper // New creates a Scraper object @@ -27,43 +43,15 @@ func New() *Scraper { } } -// SetSearchLive enable/disable realtime search -func (s *Scraper) SetSearchLive(srctype bool) *Scraper { - if srctype { - s.searchMode = "live" - } +// SetSearchMode switcher +func (s *Scraper) SetSearchMode(mode SearchMode) *Scraper { + s.searchMode = mode return s } -// SetSearchLive wrapper for default SetSearchLive -func SetSearchLive(srctype bool) *Scraper { - return defaultScraper.SetSearchLive(srctype) -} - -// SetSearchPhotos filter search for photos only -func (s *Scraper) SetSearchPhotos(srctype bool) *Scraper { - if srctype { - s.searchMode = "image" - } - return s -} - -// SetSearchPhotos wrapper for default SetSearchPhotos -func SetSearchPhotos(srctype bool) *Scraper { - return defaultScraper.SetSearchPhotos(srctype) -} - -// SetSearchVideos filter search for videos only -func (s *Scraper) SetSearchVideos(srctype bool) *Scraper { - if srctype { - s.searchMode = "video" - } - return s -} - -// SetSearchVideos wrapper for default SetSearchVideos -func SetSearchVideos(srctype bool) *Scraper { - return defaultScraper.SetSearchVideos(srctype) +// SetSearchMode wrapper for default Scraper +func SetSearchMode(mode SearchMode) *Scraper { + return defaultScraper.SetSearchMode(mode) } // WithReplies enable/disable load timeline with tweet replies diff --git a/search.go b/search.go index 7314a6e..505d94c 100644 --- a/search.go +++ b/search.go @@ -37,10 +37,15 @@ func (s *Scraper) FetchSearchTweets(query string, maxTweetsNbr int, cursor strin if cursor != "" { q.Add("cursor", cursor) } - if s.searchMode == "live" { - q.Add("tweet_search_mode", s.searchMode) - } else { - q.Add("result_filter", s.searchMode) + switch s.searchMode { + case SearchLatest: + q.Add("tweet_search_mode", "live") + case SearchPeople: + q.Add("result_filter", "user") + case SearchPhotos: + q.Add("result_filter", "image") + case SearchVideos: + q.Add("result_filter", "video") } req.URL.RawQuery = q.Encode()