func main() { log.Println("generating new dict...") sqlite.Run(DB_FILE, func(db *sqlite.DB) { var keywords []weibo.UserKeyword db.Query(&keywords, "select keyword, id from user_keyword") for _, keyword := range keywords { line := keyword.Keyword query, _ := parse.Parse(line) for _, k := range query.AllTerms() { fmt.Printf("%s\t%d\t%d\n", strings.ToUpper(k), 1, keyword.Id) } } }) }
func init() { users = make(map[int64]map[string]interface{}) sqlite.Run(os.Getenv("PWD")+"/db.sqlite3", func(db *sqlite.DB) { results := db.Query("select b.*, a.pos from users b left join weibo_seq a on a.id=b.id") for _, row := range results { users[row["id"].(int64)] = row } }) data, err := ioutil.ReadFile(os.Getenv("PWD") + "/token") if err != nil { log.Fatal(err) } ACCESS_TOKEN = strings.TrimSpace(string(data)) }
func refresh_laiwang_token(user map[string]interface{}) { refresh_token := user["laiwang_refresh_token"].(string) resp, err := http.PostForm("https://api.laiwang.com/oauth/access_token?grant_type=refresh_token", url.Values{ "refresh_token": {refresh_token}, "client_id": {config.LAIWANG_CLIENT_ID}, "client_secret": {config.LAIWANG_CLIENT_SECRET}, }) if err == nil { bytes, _ := ioutil.ReadAll(resp.Body) var data map[string]interface{} json.Unmarshal(bytes, &data) if data["access_token"] != nil { access_token := data["access_token"].(string) log.Println("Refresh access token: ", user["weibo_name"], access_token) sqlite.Run(os.Getenv("PWD")+"/db.sqlite3", func(db *sqlite.DB) { sql := fmt.Sprintf("update users set laiwang_access_token = '%s' where id=%d", access_token, user["id"]) db.Execute(sql) }) } } }
func main() { sina := &weibo.Sina{ AccessToken: readToken(), } dict, err := darts.Load("data/deals.lib") if err != nil { panic(err) } sqlite.Run(DB_FILE, func(db *sqlite.DB) { var posts []WeiboPost db.Query(&posts, "select * from queue where id > ?", 2636) for _, post := range posts { result := find_keywords(dict, line) if len(result) > 0 { // log.Info(post.Id, result, post.Text) for k, _ := range result { var users []weibo.UserKeyword db.Query(&users, "select weibo_uid, keyword from user_keyword where keyword like ?", k) message := fmt.Sprintf("#%s#", k) for _, u := range users { weibo_user := sina.UsersShow(u.WeiboUid) if weibo_user != nil { message = message + " @" + weibo_user.Screen_name } } // r := sina.StatusesRepost(post.PostId, message) r := sina.CommentsCreate(post.PostId, message) time.Sleep(15 * time.Second) if r != nil { log.Info("success alert:" + message) } } } } }) }
func main() { var weibo_list []weibo.Weibo sqlite.Run(DB_FILE, func(db *sqlite.DB) { db.Query(&weibo_list, "select * from weibo") post_chan := make(chan []*weibo.WeiboPost, len(weibo_list)) for _, w := range weibo_list { go func(w weibo.Weibo) { if *IsTestMode { w.LastId = 0 } last_id := w.LastId posts := sina.TimeLine(w.WeiboId, w.LastId, 10) posts2 := []*weibo.WeiboPost{} for _, post := range posts { if post.Id <= w.LastId { //ignore 过期置顶贴 continue } if post.Retweeted_Status != nil { post.Text = post.Text + "//" + post.Retweeted_Status.Text //ignore 转帖,重复推荐意义不大 continue } // log.Info(post.Text) if !*IsTestMode { _, err := db.Execute("insert into queue (post_id, url,text, weibo_id,created) values (?,?,?,?,?)", post.Id, "", post.Text, post.User.Id, time.Now().Unix()) if err != nil { log.Error("Failed to save ", post.Id, w.LastId, post) } else { posts2 = append(posts2, post) } if post.Id > last_id { last_id = post.Id } } else { posts2 = append(posts2, post) } } if !*IsTestMode { db.Execute("update weibo set last_id=? where id=?", last_id, w.Id) } post_chan <- posts2 }(w) } for i := 0; i < len(weibo_list); i++ { posts := <-post_chan for _, post := range posts { line := post.Text result := search.FindKeywords(dict, line) if len(result) > 0 { //matched urls := search.FindUrls(line) if len(urls) > 0 { for _, u := range weibo.ExpandUrls(urls) { line = line + " " + u } } message := "" at_users := make(map[string]bool) for k, _ := range result { var users []weibo.UserKeyword db.Query(&users, "select weibo_uid, keyword from user_keyword where keyword like ?", k) if users == nil || len(users) < 1 { continue } message = message + fmt.Sprintf("#%s# ", k) for _, u := range users { weibo_user := sina.UsersShow(u.WeiboUid) if weibo_user != nil && at_users[weibo_user.Screen_name] != true { message = message + "@" + weibo_user.Screen_name + " " at_users[weibo_user.Screen_name] = true } } } if len(message) > 0 { if *IsTestMode { log.Info("success alert:", message, line) } else { r := sina.StatusesRepost(post.Id, message) //r := sina.CommentsCreate(post.Id, message) if r != nil { log.Info("success alert:" + message) } time.Sleep(3 * time.Second) } } } } } }) }
func db_execute(id int64, pos int64) { sqlite.Run(os.Getenv("PWD")+"/db.sqlite3", func(db *sqlite.DB) { sql := fmt.Sprintf("insert or replace into weibo_seq (id, pos) values (%d, %d)", id, pos) db.Execute(sql) }) }