Skip to content

Commit

Permalink
small changes applied
Browse files Browse the repository at this point in the history
  • Loading branch information
unkmonster committed Aug 22, 2024
1 parent 737e97b commit 4b384b0
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 34 deletions.
31 changes: 17 additions & 14 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -125,13 +125,13 @@ type Task struct {
}

func printTask(task *Task) {
fmt.Printf("list task: %d\n", len(task.lists))
for _, l := range task.lists {
fmt.Printf(" %s\n", l.Title())
}
fmt.Printf("user task: %d\n", len(task.users))
fmt.Printf("users: %d\n", len(task.users))
for _, u := range task.users {
fmt.Printf(" %s\n", u.Title())
fmt.Printf(" - %s\n", u.Title())
}
fmt.Printf("lists: %d\n", len(task.lists))
for _, l := range task.lists {
fmt.Printf(" - %s\n", l.Title())
}
}

Expand Down Expand Up @@ -265,7 +265,7 @@ func main() {
log.Println("config done")
return
}

log.Infoln("config is loaded")
if conf.MaxDownloadRoutine > 0 {
downloading.MaxDownloadRoutine = conf.MaxDownloadRoutine
}
Expand Down Expand Up @@ -293,6 +293,13 @@ func main() {
if err != nil {
log.Fatalln("failed to load previous tweets", err)
}
log.Infoln("loaded previous failed tweets:", dumper.Count())

// collect tasks
task, err := MakeTask(ctx, client, usrArgs, listArgs, follArgs)
if err != nil {
log.Fatalln("failed to parse cmd args:", err)
}

// connect db
db, err := connectDatabase(pathHelper.db)
Expand All @@ -315,13 +322,6 @@ func main() {
}
}()

// collect tasks
task, err := MakeTask(ctx, client, usrArgs, listArgs, follArgs)
if err != nil {
log.Fatalln("failed to parse cmd args:", err)
}
printTask(task)

// retry for failed tweet last run
if err = retryFailedTweets(ctx, dumper, db, client); err != nil {
log.Error("failed to retry previous tweets:", err)
Expand All @@ -345,6 +345,9 @@ func main() {
}()

// do job
log.Infoln("start working for...")
printTask(task)

if len(task.users) != 0 {
todump, err = downloading.BatchUserDownload(ctx, client, db, task.users, pathHelper.users, nil)
if err != nil {
Expand Down
42 changes: 25 additions & 17 deletions twitter/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,15 +23,7 @@ const bearer = "AAAAAAAAAAAAAAAAAAAAANRILgAAAAAAnNwIzUejRCOuH5E6I8xnZz4puTs%3D1Z
var clientScreenNames map[*resty.Client]string = make(map[*resty.Client]string)
var clientBlockStates map[*resty.Client]*atomic.Bool = make(map[*resty.Client]*atomic.Bool)

func Login(ctx context.Context, authToken string, ct0 string) (*resty.Client, string, error) {
client := resty.New()

// 禁用 logger
nullLogger := log.New()
nullLogger.SetOutput(io.Discard)
client.SetLogger(nullLogger)

// 鉴权
func SetClientAuth(client *resty.Client, authToken string, ct0 string) {
client.SetAuthToken(bearer)
client.SetCookie(&http.Cookie{
Name: "auth_token",
Expand All @@ -42,6 +34,18 @@ func Login(ctx context.Context, authToken string, ct0 string) (*resty.Client, st
Value: ct0,
})
client.SetHeader("X-Csrf-Token", ct0)
}

func Login(ctx context.Context, authToken string, ct0 string) (*resty.Client, string, error) {
client := resty.New()

// 禁用 logger
nullLogger := log.New()
nullLogger.SetOutput(io.Discard)
client.SetLogger(nullLogger)

// 鉴权
SetClientAuth(client, authToken, ct0)

// 重试
client.SetRetryCount(5)
Expand All @@ -63,20 +67,13 @@ func Login(ctx context.Context, authToken string, ct0 string) (*resty.Client, st
Proxy: http.ProxyFromEnvironment,
})

// 验证登录是否有效
resp, err := client.R().SetContext(ctx).Get("https://api.x.com/1.1/account/settings.json")
screenName, err := GetSelfScreenName(ctx, client)
if err != nil {
return nil, "", err
}
if err = utils.CheckRespStatus(resp); err != nil {
return nil, "", err
}

// 客户端状态
screenName := gjson.GetBytes(resp.Body(), "screen_name").String()
clientBlockStates[client] = &atomic.Bool{}
clientScreenNames[client] = screenName

return client, screenName, nil
}

Expand Down Expand Up @@ -295,3 +292,14 @@ func EnableRateLimit(client *resty.Client) {
rateLimiter.reset(resp.Request.RawRequest.URL, resp)
})
}

func GetSelfScreenName(ctx context.Context, client *resty.Client) (string, error) {
resp, err := client.R().SetContext(ctx).Get("https://api.x.com/1.1/account/settings.json")
if err != nil {
return "", err
}
if err := utils.CheckRespStatus(resp); err != nil {
return "", err
}
return gjson.GetBytes(resp.Body(), "screen_name").String(), nil
}
6 changes: 3 additions & 3 deletions twitter/timeline.go
Original file line number Diff line number Diff line change
Expand Up @@ -105,23 +105,23 @@ func getTimelineItemContents(ctx context.Context, api timelineApi, client *resty
instructions := getInstructions(resp, instPath)
entries := getEntries(instructions)
moduleItems := getModuleItems(instructions)
if !entries.Exists() && !moduleItems.Exists() {
panic(fmt.Sprintf("invalid instructions: %s", instructions.String()))
}

itemContents := make([]gjson.Result, 0)

if entries.IsArray() {
for _, entry := range entries.Array() {
if entry.Get("content.entryType").String() != "TimelineTimelineCursor" {
itemContents = append(itemContents, getItemContentsFromEntry(entry)...)
}
}
}

if moduleItems.IsArray() {
for _, moduleItem := range moduleItems.Array() {
itemContents = append(itemContents, getItemContentFromModuleItem(moduleItem))
}
}

return itemContents, getNextCursor(entries), nil
}

Expand Down

0 comments on commit 4b384b0

Please sign in to comment.