Merge pull request #1 from imperatrona/open-account

Reusing open account
This commit is contained in:
Valentine 2024-01-28 23:39:48 +03:00 committed by GitHub
commit d45ac95957
5 changed files with 45 additions and 22 deletions

View file

@ -82,7 +82,16 @@ scraper.IsLoggedIn()
If you don't want to use your account, you can try login as a Twitter app:
```golang
err := scraper.LoginOpenAccount()
account, err := scraper.LoginOpenAccount()
```
You can manually set a specific user account:
```golang
scraper.WithOpenAccount(twitterscraper.OpenAccount{
OAuthToken: "TOKEN",
OAuthTokenSecret: "TOKEN_SECRET",
})
```
### Get user tweets
@ -98,7 +107,7 @@ import (
func main() {
scraper := twitterscraper.New()
err := scraper.LoginOpenAccount()
account, err := scraper.LoginOpenAccount()
if err != nil {
panic(err)
}

38
auth.go
View file

@ -26,6 +26,11 @@ const (
)
type (
OpenAccount struct {
OAuthToken string `json:"oauth_token"`
OAuthTokenSecret string `json:"oauth_token_secret"`
}
flow struct {
Errors []struct {
Code int `json:"code"`
@ -34,11 +39,8 @@ type (
FlowToken string `json:"flow_token"`
Status string `json:"status"`
Subtasks []struct {
SubtaskID string `json:"subtask_id"`
OpenAccount struct {
OAuthToken string `json:"oauth_token"`
OAuthTokenSecret string `json:"oauth_token_secret"`
} `json:"open_account"`
SubtaskID string `json:"subtask_id"`
OpenAccount OpenAccount `json:"open_account"`
} `json:"subtasks"`
}
@ -296,16 +298,16 @@ func (s *Scraper) Login(credentials ...string) error {
}
// LoginOpenAccount as Twitter app
func (s *Scraper) LoginOpenAccount() error {
func (s *Scraper) LoginOpenAccount() (OpenAccount, error) {
accessToken, err := s.getAccessToken(appConsumerKey, appConsumerSecret)
if err != nil {
return err
return OpenAccount{}, err
}
s.setBearerToken(accessToken)
err = s.GetGuestToken()
if err != nil {
return err
return OpenAccount{}, err
}
// flow start
@ -320,7 +322,7 @@ func (s *Scraper) LoginOpenAccount() error {
}
flowToken, err := s.getFlowToken(data)
if err != nil {
return err
return OpenAccount{}, err
}
// flow next link
@ -334,7 +336,7 @@ func (s *Scraper) LoginOpenAccount() error {
}
info, err := s.getFlow(data)
if err != nil {
return err
return OpenAccount{}, err
}
if info.Subtasks != nil && len(info.Subtasks) > 0 {
@ -342,14 +344,24 @@ func (s *Scraper) LoginOpenAccount() error {
s.oAuthToken = info.Subtasks[0].OpenAccount.OAuthToken
s.oAuthSecret = info.Subtasks[0].OpenAccount.OAuthTokenSecret
if s.oAuthToken == "" || s.oAuthSecret == "" {
return fmt.Errorf("auth error: %v", "Token or Secret is empty")
return OpenAccount{}, fmt.Errorf("auth error: %v", "Token or Secret is empty")
}
s.isLogged = true
s.isOpenAccount = true
return nil
return OpenAccount{
OAuthToken: info.Subtasks[0].OpenAccount.OAuthToken,
OAuthTokenSecret: info.Subtasks[0].OpenAccount.OAuthTokenSecret,
}, nil
}
}
return fmt.Errorf("auth error: %v", "OpenAccount")
return OpenAccount{}, fmt.Errorf("auth error: %v", "OpenAccount")
}
func (s *Scraper) WithOpenAccount(openAccount OpenAccount) {
s.oAuthToken = openAccount.OAuthToken
s.oAuthSecret = openAccount.OAuthTokenSecret
s.isLogged = true
s.isOpenAccount = true
}
// Logout is reset session

View file

@ -52,7 +52,9 @@ func TestAuth(t *testing.T) {
func TestLoginOpenAccount(t *testing.T) {
scraper := twitterscraper.New()
if err := scraper.LoginOpenAccount(); err != nil {
_, err := scraper.LoginOpenAccount()
if err != nil {
t.Fatalf("LoginOpenAccount() error = %v", err)
}
}

View file

@ -31,7 +31,7 @@ func TestGetProfile(t *testing.T) {
}
scraper := twitterscraper.New()
err := scraper.LoginOpenAccount()
_, err := scraper.LoginOpenAccount()
if err != nil {
t.Fatalf("LoginOpenAccount() error = %v", err)
}
@ -87,7 +87,7 @@ func TestGetProfilePrivate(t *testing.T) {
}
scraper := twitterscraper.New()
err := scraper.LoginOpenAccount()
_, err := scraper.LoginOpenAccount()
if err != nil {
t.Fatalf("LoginOpenAccount() error = %v", err)
}
@ -122,7 +122,7 @@ func TestGetProfilePrivate(t *testing.T) {
func TestGetProfileErrorSuspended(t *testing.T) {
scraper := twitterscraper.New()
err := scraper.LoginOpenAccount()
_, err := scraper.LoginOpenAccount()
if err != nil {
t.Fatalf("LoginOpenAccount() error = %v", err)
}
@ -140,7 +140,7 @@ func TestGetProfileErrorNotFound(t *testing.T) {
neUser := "sample3123131"
expectedError := fmt.Sprintf("User '%s' not found", neUser)
scraper := twitterscraper.New()
err := scraper.LoginOpenAccount()
_, err := scraper.LoginOpenAccount()
if err != nil {
t.Fatalf("LoginOpenAccount() error = %v", err)
}
@ -156,7 +156,7 @@ func TestGetProfileErrorNotFound(t *testing.T) {
func TestGetUserIDByScreenName(t *testing.T) {
scraper := twitterscraper.New()
err := scraper.LoginOpenAccount()
_, err := scraper.LoginOpenAccount()
if err != nil {
t.Fatalf("LoginOpenAccount() error = %v", err)
}

View file

@ -21,7 +21,7 @@ func TestGetTweets(t *testing.T) {
maxTweetsNbr := 300
dupcheck := make(map[string]bool)
scraper := twitterscraper.New()
err := scraper.LoginOpenAccount()
_, err := scraper.LoginOpenAccount()
if err != nil {
t.Fatalf("LoginOpenAccount() error = %v", err)
}