Add SearchProfiles
Minor changes and fixes
This commit is contained in:
parent
f3597d0db6
commit
5032ecd29d
9 changed files with 268 additions and 100 deletions
42
api.go
42
api.go
|
|
@ -11,42 +11,6 @@ import (
|
|||
|
||||
const bearerToken string = "AAAAAAAAAAAAAAAAAAAAANRILgAAAAAAnNwIzUejRCOuH5E6I8xnZz4puTs%3D1Zv7ttfk8LF81IUq16cHjhLTvJu4FA33AGWWjCpTnA"
|
||||
|
||||
type user struct {
|
||||
Data struct {
|
||||
User struct {
|
||||
RestID string `json:"rest_id"`
|
||||
Legacy struct {
|
||||
CreatedAt string `json:"created_at"`
|
||||
Description string `json:"description"`
|
||||
Entities struct {
|
||||
URL struct {
|
||||
Urls []struct {
|
||||
ExpandedURL string `json:"expanded_url"`
|
||||
} `json:"urls"`
|
||||
} `json:"url"`
|
||||
} `json:"entities"`
|
||||
FavouritesCount int `json:"favourites_count"`
|
||||
FollowersCount int `json:"followers_count"`
|
||||
FriendsCount int `json:"friends_count"`
|
||||
IDStr string `json:"id_str"`
|
||||
ListedCount int `json:"listed_count"`
|
||||
Name string `json:"name"`
|
||||
Location string `json:"location"`
|
||||
PinnedTweetIdsStr []string `json:"pinned_tweet_ids_str"`
|
||||
ProfileBannerURL string `json:"profile_banner_url"`
|
||||
ProfileImageURLHTTPS string `json:"profile_image_url_https"`
|
||||
Protected bool `json:"protected"`
|
||||
ScreenName string `json:"screen_name"`
|
||||
StatusesCount int `json:"statuses_count"`
|
||||
Verified bool `json:"verified"`
|
||||
} `json:"legacy"`
|
||||
} `json:"user"`
|
||||
} `json:"data"`
|
||||
Errors []struct {
|
||||
Message string `json:"message"`
|
||||
} `json:"errors"`
|
||||
}
|
||||
|
||||
// Global cache for user IDs
|
||||
var cacheIDs sync.Map
|
||||
|
||||
|
|
@ -70,7 +34,8 @@ func (s *Scraper) RequestAPI(req *http.Request, target interface{}) error {
|
|||
|
||||
// private profiles return forbidden, but also data
|
||||
if resp.StatusCode != http.StatusOK && resp.StatusCode != http.StatusForbidden {
|
||||
return fmt.Errorf("response status %s", resp.Status)
|
||||
content, _ := ioutil.ReadAll(resp.Body)
|
||||
return fmt.Errorf("response status %s: %s", resp.Status, content)
|
||||
}
|
||||
|
||||
if resp.Header.Get("X-Rate-Limit-Remaining") == "0" {
|
||||
|
|
@ -95,7 +60,8 @@ func (s *Scraper) GetGuestToken() error {
|
|||
defer resp.Body.Close()
|
||||
|
||||
if resp.StatusCode != http.StatusOK {
|
||||
return fmt.Errorf("response status %s", resp.Status)
|
||||
content, _ := ioutil.ReadAll(resp.Body)
|
||||
return fmt.Errorf("response status %s: %s", resp.Status, content)
|
||||
}
|
||||
body, err := ioutil.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue