示例#1
0
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)
			}
		}
	})
}
示例#2
0
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))
}
示例#3
0
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)
			})
		}
	}
}
示例#4
0
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)
					}
				}
			}
		}
	})
}
示例#5
0
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)
						}
					}
				}
			}
		}
	})
}
示例#6
0
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)
	})
}