diff --git a/main.go b/main.go new file mode 100644 index 0000000..ea6ee62 --- /dev/null +++ b/main.go @@ -0,0 +1,88 @@ +package main + +import ( + "bytes" + "encoding/json" + "fmt" + "io/ioutil" + "log" + "net/http" +) + +func signIn(config interface{}, accessToken string, phone string) bool { + url := "https://member.aliyundrive.com/v1/activity/sign_in_list" + + reqBody, err := json.Marshal(map[string]interface{}{}) + if err != nil { + log.Printf("[%s] 签到失败, 错误信息: %v\n", phone, err) + return false + } + + req, err := http.NewRequest("POST", url, bytes.NewBuffer(reqBody)) + if err != nil { + log.Printf("[%s] 签到失败, 错误信息: %v\n", phone, err) + return false + } + + req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", accessToken)) + req.Header.Set("Content-Type", "application/json") + + client := &http.Client{} + resp, err := client.Do(req) + if err != nil { + log.Printf("[%s] 签到失败, 错误信息: %v\n", phone, err) + return false + } + defer resp.Body.Close() + + body, err := ioutil.ReadAll(resp.Body) + if err != nil { + log.Printf("[%s] 签到失败, 错误信息: %v\n", phone, err) + return false + } + + var data map[string]interface{} + err = json.Unmarshal(body, &data) + if err != nil { + log.Printf("[%s] 签到失败, 错误信息: %v\n", phone, err) + return false + } + + if _, ok := data["success"]; !ok { + log.Printf("[%s] 签到失败, 错误信息: %v\n", phone, data) + return false + } + + var currentDay map[string]interface{} + for i, day := range data["result"].(map[string]interface{})["signInLogs"].([]interface{}) { + if day.(map[string]interface{})["status"].(string) == "miss" { + currentDay = data["result"].(map[string]interface{})["signInLogs"].([]interface{})[i-1].(map[string]interface{}) + break + } + } + + reward := "无奖励" + if currentDay != nil && currentDay["isReward"].(bool) { + reward = fmt.Sprintf("获得 %s %s", currentDay["reward"].(map[string]interface{})["name"].(string), currentDay["reward"].(map[string]interface{})["description"].(string)) + } + + log.Printf("[%s] 签到成功, 本月累计签到 %d 天.\n", phone, int(data["result"].(map[string]interface{})["signInCount"].(float64))) + log.Printf("[%s] 本次签到 %s\n", phone, reward) + + push(config, phone, reward, int(data["result"].(map[string]interface{})["signInCount"].(float64))) + + return true +} + +func push(config interface{}, phone string, reward string, signInCount int) { + // push notification implementation here +} + +func main() { + // Example usage: + accessToken := "your-access-token" + phone := "your-phone-number" + config := map[string]interface{}{} // or ConfigObj object + + signIn(config, accessToken, phone) +}