Add checking for banned users
This commit is contained in:
parent
b1c7db6540
commit
1a9ba75355
@ -232,6 +232,7 @@ type APIUser struct {
|
|||||||
ScreenName string `json:"screen_name"`
|
ScreenName string `json:"screen_name"`
|
||||||
StatusesCount int `json:"statuses_count"`
|
StatusesCount int `json:"statuses_count"`
|
||||||
Verified bool `json:"verified"`
|
Verified bool `json:"verified"`
|
||||||
|
IsBanned bool
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -250,6 +251,16 @@ type UserResponse struct {
|
|||||||
func (u UserResponse) ConvertToAPIUser() APIUser {
|
func (u UserResponse) ConvertToAPIUser() APIUser {
|
||||||
ret := u.Data.User.Legacy
|
ret := u.Data.User.Legacy
|
||||||
ret.ID = u.Data.User.ID
|
ret.ID = u.Data.User.ID
|
||||||
|
|
||||||
|
// Banned users
|
||||||
|
for _, api_error := range u.Errors {
|
||||||
|
if api_error.Message == "Authorization: User has been suspended. (63)" {
|
||||||
|
ret.IsBanned = true
|
||||||
|
} else {
|
||||||
|
panic(fmt.Sprintf("Unknown api error: %q", api_error.Message))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return ret
|
return ret
|
||||||
}
|
}
|
||||||
|
|
||||||
|
1
scraper/test_responses/suspended_user.json
Normal file
1
scraper/test_responses/suspended_user.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"errors":[{"message":"Authorization: User has been suspended. (63)","locations":[{"line":17,"column":3}],"path":["user","legacy"],"extensions":{"name":"AuthorizationError","source":"Client","code":63,"kind":"Permissions","tracing":{"trace_id":"c9f5c3bc1afaab46"}},"code":63,"kind":"Permissions","name":"AuthorizationError","source":"Client","tracing":{"trace_id":"c9f5c3bc1afaab46"}}],"data":{"user":{"id":"VXNlcjoxOTM5MTg1NTA=","rest_id":"193918550","affiliates_highlighted_label":{},"legacy_extended_profile":{},"is_profile_translatable":false}}}
|
@ -33,6 +33,7 @@ type User struct {
|
|||||||
JoinDate time.Time
|
JoinDate time.Time
|
||||||
IsPrivate bool
|
IsPrivate bool
|
||||||
IsVerified bool
|
IsVerified bool
|
||||||
|
IsBanned bool
|
||||||
ProfileImageUrl string
|
ProfileImageUrl string
|
||||||
ProfileImageLocalPath string
|
ProfileImageLocalPath string
|
||||||
BannerImageUrl string
|
BannerImageUrl string
|
||||||
@ -95,6 +96,11 @@ func ParseHandleFromTweetUrl(tweet_url string) (UserHandle, error) {
|
|||||||
// Turn an APIUser, as returned from the scraper, into a properly structured User object
|
// Turn an APIUser, as returned from the scraper, into a properly structured User object
|
||||||
func ParseSingleUser(apiUser APIUser) (ret User, err error) {
|
func ParseSingleUser(apiUser APIUser) (ret User, err error) {
|
||||||
ret.ID = UserID(apiUser.ID)
|
ret.ID = UserID(apiUser.ID)
|
||||||
|
if apiUser.IsBanned {
|
||||||
|
// Banned users won't have any further info, so just return here
|
||||||
|
ret.IsBanned = true
|
||||||
|
return
|
||||||
|
}
|
||||||
ret.DisplayName = apiUser.Name
|
ret.DisplayName = apiUser.Name
|
||||||
ret.Handle = UserHandle(apiUser.ScreenName)
|
ret.Handle = UserHandle(apiUser.ScreenName)
|
||||||
ret.Bio = apiUser.Description
|
ret.Bio = apiUser.Description
|
||||||
|
@ -60,6 +60,9 @@ func TestParseSingleUser(t *testing.T) {
|
|||||||
if user.IsVerified != true {
|
if user.IsVerified != true {
|
||||||
t.Errorf("Expected %v, got %v", true, user.IsPrivate)
|
t.Errorf("Expected %v, got %v", true, user.IsPrivate)
|
||||||
}
|
}
|
||||||
|
if user.IsBanned != false {
|
||||||
|
t.Errorf("User should not be banned")
|
||||||
|
}
|
||||||
expectedProfileImage := "https://pbs.twimg.com/profile_images/1064051934812913664/Lbwdb_C9.jpg"
|
expectedProfileImage := "https://pbs.twimg.com/profile_images/1064051934812913664/Lbwdb_C9.jpg"
|
||||||
if user.ProfileImageUrl != expectedProfileImage {
|
if user.ProfileImageUrl != expectedProfileImage {
|
||||||
t.Errorf("Expected %q, got %q", expectedProfileImage, user.ProfileImageUrl)
|
t.Errorf("Expected %q, got %q", expectedProfileImage, user.ProfileImageUrl)
|
||||||
@ -86,6 +89,34 @@ func TestParseSingleUser(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Should correctly parse a banned user
|
||||||
|
*/
|
||||||
|
func TestParseBannedUser(t *testing.T) {
|
||||||
|
data, err := ioutil.ReadFile("test_responses/suspended_user.json")
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
var user_resp scraper.UserResponse
|
||||||
|
err = json.Unmarshal(data, &user_resp)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf(err.Error())
|
||||||
|
}
|
||||||
|
apiUser := user_resp.ConvertToAPIUser()
|
||||||
|
|
||||||
|
user, err := scraper.ParseSingleUser(apiUser)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf(err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
if user.ID != 193918550 {
|
||||||
|
t.Errorf("Expected id %d, got %d", 193918550, user.ID)
|
||||||
|
}
|
||||||
|
if user.IsBanned != true {
|
||||||
|
t.Errorf("Expected user to be banned")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Should extract a user handle from a tweet URL, or fail if URL is invalid
|
* Should extract a user handle from a tweet URL, or fail if URL is invalid
|
||||||
*/
|
*/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user