Skip to content

Instantly share code, notes, and snippets.

@memememomo
Created May 25, 2020 00:49
Show Gist options
  • Save memememomo/d3237a4da364ebb67cf0df1ed3839c06 to your computer and use it in GitHub Desktop.
Save memememomo/d3237a4da364ebb67cf0df1ed3839c06 to your computer and use it in GitHub Desktop.
package main
import (
"fmt"
"github.com/dghubble/go-twitter/twitter"
"github.com/dghubble/oauth1"
"log"
"os"
"regexp"
"sort"
"strconv"
"time"
)
const ThresholdSellBell = 500
const ThresholdBuyBell = 95
var regBell = regexp.MustCompile(`(\d+)\s*ベル`)
type Tw struct {
Tweet *twitter.Tweet
Bell int
}
type ByBell []*Tw
func (b ByBell) Len() int { return len(b) }
func (b ByBell) Less(i, j int) bool { return b[i].Bell >= b[j].Bell }
func (b ByBell) Swap(i, j int) { b[i], b[j] = b[j], b[i] }
func TwitterClient() *twitter.Client {
config := oauth1.NewConfig(os.Getenv("CONSUMER_KEY"), os.Getenv("CONSUMER_SECRET"))
token := oauth1.NewToken(os.Getenv("TOKEN"), os.Getenv("TOKEN_SECRET"))
httpClient := config.Client(oauth1.NoContext, token)
return twitter.NewClient(httpClient)
}
func Search(query string, checker func(bell int) bool) {
log.Println("Start search for :" + query)
twitterClient := TwitterClient()
search, _, err := twitterClient.Search.Tweets(&twitter.SearchTweetParams{
Query: query,
Count: 100,
IncludeEntities: twitter.Bool(true),
ResultType: "recent",
})
if err != nil {
log.Fatalf("%v", err)
}
var tws ByBell
for i := range search.Statuses {
tweet := search.Statuses[i]
if tweet.Retweeted {
continue
}
matches := regBell.FindSubmatch([]byte(tweet.Text))
if len(matches) > 0 {
bell, _ := strconv.Atoi(string(matches[1]))
if checker(bell) {
tws = append(tws, &Tw{
Tweet: &tweet,
Bell: bell,
})
}
}
}
sort.Sort(tws)
for _, tw := range tws {
bell := tw.Bell
tweet := tw.Tweet
created, _ := tweet.CreatedAtTime()
if created.After(time.Now().Add(-5 * time.Minute)) {
fmt.Printf("== %d ベル ==\n", bell)
fmt.Printf("https://twitter.com/%s/status/%d\n", tweet.User.ScreenName, tweet.ID)
fmt.Println(tweet.ID)
fmt.Println(tweet.Text)
fmt.Println("--------------------------------")
}
}
/*
user, _, _ := twitterClient.Users.Show(&twitter.UserShowParams{ScreenName: ""})
event, res, err := twitterClient.DirectMessages.EventsNew(&twitter.DirectMessageEventsNewParams{
Event: &twitter.DirectMessageEvent{
Type: "message_create",
Message: &twitter.DirectMessageEventMessage{
Target: &twitter.DirectMessageTarget{
RecipientID: fmt.Sprintf("%d", user.ID),
},
Data: &twitter.DirectMessageData{
Text: "test",
},
},
},
})
fmt.Printf("Event: %+v/%+v\n", event, res)
if err != nil {
fmt.Errorf("%+v", err)
}
*/
}
func sellChecker(bell int) bool {
return bell >= ThresholdSellBell
}
func buyChecker(bell int) bool {
return bell <= ThresholdBuyBell
}
func main() {
query := "カブ価 DM -RT"
Search(query, sellChecker)
//Search(query, buyChecker)
}
@memememomo
Copy link
Author

「〇〇ベル」が含まれている5分以内にツイートを検索します。
〇〇にしきい値を設定できるようになっています。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment