Merge pull request #1 from imperatrona/open-account
Reusing open account
This commit is contained in:
commit
d45ac95957
5 changed files with 45 additions and 22 deletions
13
README.md
13
README.md
|
|
@ -82,7 +82,16 @@ scraper.IsLoggedIn()
|
||||||
If you don't want to use your account, you can try login as a Twitter app:
|
If you don't want to use your account, you can try login as a Twitter app:
|
||||||
|
|
||||||
```golang
|
```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
|
### Get user tweets
|
||||||
|
|
@ -98,7 +107,7 @@ import (
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
scraper := twitterscraper.New()
|
scraper := twitterscraper.New()
|
||||||
err := scraper.LoginOpenAccount()
|
account, err := scraper.LoginOpenAccount()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
38
auth.go
38
auth.go
|
|
@ -26,6 +26,11 @@ const (
|
||||||
)
|
)
|
||||||
|
|
||||||
type (
|
type (
|
||||||
|
OpenAccount struct {
|
||||||
|
OAuthToken string `json:"oauth_token"`
|
||||||
|
OAuthTokenSecret string `json:"oauth_token_secret"`
|
||||||
|
}
|
||||||
|
|
||||||
flow struct {
|
flow struct {
|
||||||
Errors []struct {
|
Errors []struct {
|
||||||
Code int `json:"code"`
|
Code int `json:"code"`
|
||||||
|
|
@ -34,11 +39,8 @@ type (
|
||||||
FlowToken string `json:"flow_token"`
|
FlowToken string `json:"flow_token"`
|
||||||
Status string `json:"status"`
|
Status string `json:"status"`
|
||||||
Subtasks []struct {
|
Subtasks []struct {
|
||||||
SubtaskID string `json:"subtask_id"`
|
SubtaskID string `json:"subtask_id"`
|
||||||
OpenAccount struct {
|
OpenAccount OpenAccount `json:"open_account"`
|
||||||
OAuthToken string `json:"oauth_token"`
|
|
||||||
OAuthTokenSecret string `json:"oauth_token_secret"`
|
|
||||||
} `json:"open_account"`
|
|
||||||
} `json:"subtasks"`
|
} `json:"subtasks"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -296,16 +298,16 @@ func (s *Scraper) Login(credentials ...string) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
// LoginOpenAccount as Twitter app
|
// LoginOpenAccount as Twitter app
|
||||||
func (s *Scraper) LoginOpenAccount() error {
|
func (s *Scraper) LoginOpenAccount() (OpenAccount, error) {
|
||||||
accessToken, err := s.getAccessToken(appConsumerKey, appConsumerSecret)
|
accessToken, err := s.getAccessToken(appConsumerKey, appConsumerSecret)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return OpenAccount{}, err
|
||||||
}
|
}
|
||||||
s.setBearerToken(accessToken)
|
s.setBearerToken(accessToken)
|
||||||
|
|
||||||
err = s.GetGuestToken()
|
err = s.GetGuestToken()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return OpenAccount{}, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// flow start
|
// flow start
|
||||||
|
|
@ -320,7 +322,7 @@ func (s *Scraper) LoginOpenAccount() error {
|
||||||
}
|
}
|
||||||
flowToken, err := s.getFlowToken(data)
|
flowToken, err := s.getFlowToken(data)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return OpenAccount{}, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// flow next link
|
// flow next link
|
||||||
|
|
@ -334,7 +336,7 @@ func (s *Scraper) LoginOpenAccount() error {
|
||||||
}
|
}
|
||||||
info, err := s.getFlow(data)
|
info, err := s.getFlow(data)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return OpenAccount{}, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if info.Subtasks != nil && len(info.Subtasks) > 0 {
|
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.oAuthToken = info.Subtasks[0].OpenAccount.OAuthToken
|
||||||
s.oAuthSecret = info.Subtasks[0].OpenAccount.OAuthTokenSecret
|
s.oAuthSecret = info.Subtasks[0].OpenAccount.OAuthTokenSecret
|
||||||
if s.oAuthToken == "" || s.oAuthSecret == "" {
|
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.isLogged = true
|
||||||
s.isOpenAccount = 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
|
// Logout is reset session
|
||||||
|
|
|
||||||
|
|
@ -52,7 +52,9 @@ func TestAuth(t *testing.T) {
|
||||||
|
|
||||||
func TestLoginOpenAccount(t *testing.T) {
|
func TestLoginOpenAccount(t *testing.T) {
|
||||||
scraper := twitterscraper.New()
|
scraper := twitterscraper.New()
|
||||||
if err := scraper.LoginOpenAccount(); err != nil {
|
_, err := scraper.LoginOpenAccount()
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
t.Fatalf("LoginOpenAccount() error = %v", err)
|
t.Fatalf("LoginOpenAccount() error = %v", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,7 @@ func TestGetProfile(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
scraper := twitterscraper.New()
|
scraper := twitterscraper.New()
|
||||||
err := scraper.LoginOpenAccount()
|
_, err := scraper.LoginOpenAccount()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("LoginOpenAccount() error = %v", err)
|
t.Fatalf("LoginOpenAccount() error = %v", err)
|
||||||
}
|
}
|
||||||
|
|
@ -87,7 +87,7 @@ func TestGetProfilePrivate(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
scraper := twitterscraper.New()
|
scraper := twitterscraper.New()
|
||||||
err := scraper.LoginOpenAccount()
|
_, err := scraper.LoginOpenAccount()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("LoginOpenAccount() error = %v", err)
|
t.Fatalf("LoginOpenAccount() error = %v", err)
|
||||||
}
|
}
|
||||||
|
|
@ -122,7 +122,7 @@ func TestGetProfilePrivate(t *testing.T) {
|
||||||
|
|
||||||
func TestGetProfileErrorSuspended(t *testing.T) {
|
func TestGetProfileErrorSuspended(t *testing.T) {
|
||||||
scraper := twitterscraper.New()
|
scraper := twitterscraper.New()
|
||||||
err := scraper.LoginOpenAccount()
|
_, err := scraper.LoginOpenAccount()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("LoginOpenAccount() error = %v", err)
|
t.Fatalf("LoginOpenAccount() error = %v", err)
|
||||||
}
|
}
|
||||||
|
|
@ -140,7 +140,7 @@ func TestGetProfileErrorNotFound(t *testing.T) {
|
||||||
neUser := "sample3123131"
|
neUser := "sample3123131"
|
||||||
expectedError := fmt.Sprintf("User '%s' not found", neUser)
|
expectedError := fmt.Sprintf("User '%s' not found", neUser)
|
||||||
scraper := twitterscraper.New()
|
scraper := twitterscraper.New()
|
||||||
err := scraper.LoginOpenAccount()
|
_, err := scraper.LoginOpenAccount()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("LoginOpenAccount() error = %v", err)
|
t.Fatalf("LoginOpenAccount() error = %v", err)
|
||||||
}
|
}
|
||||||
|
|
@ -156,7 +156,7 @@ func TestGetProfileErrorNotFound(t *testing.T) {
|
||||||
|
|
||||||
func TestGetUserIDByScreenName(t *testing.T) {
|
func TestGetUserIDByScreenName(t *testing.T) {
|
||||||
scraper := twitterscraper.New()
|
scraper := twitterscraper.New()
|
||||||
err := scraper.LoginOpenAccount()
|
_, err := scraper.LoginOpenAccount()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("LoginOpenAccount() error = %v", err)
|
t.Fatalf("LoginOpenAccount() error = %v", err)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@ func TestGetTweets(t *testing.T) {
|
||||||
maxTweetsNbr := 300
|
maxTweetsNbr := 300
|
||||||
dupcheck := make(map[string]bool)
|
dupcheck := make(map[string]bool)
|
||||||
scraper := twitterscraper.New()
|
scraper := twitterscraper.New()
|
||||||
err := scraper.LoginOpenAccount()
|
_, err := scraper.LoginOpenAccount()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("LoginOpenAccount() error = %v", err)
|
t.Fatalf("LoginOpenAccount() error = %v", err)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue