Skip to content

Instantly share code, notes, and snippets.

@conoro
Last active January 11, 2017 11:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save conoro/f1a3f7c5b96e2b033119 to your computer and use it in GitHub Desktop.
Save conoro/f1a3f7c5b96e2b033119 to your computer and use it in GitHub Desktop.
Bandon FEWS Tweets
// Copyright Conor O'Neill 2016. conor@conoroneill.com
// cd /home/centos/gitwork/go/src/github.com/conoro/bandonfews-tweets/
// go build github.com/conoro/bandonfews-tweets
// go install github.com/conoro/bandonfews-tweets
// sudo systemctl restart bandonfews-tweets
package main
import (
"encoding/json"
"fmt"
"log"
"net/http"
"net/url"
"os"
"strconv"
"strings"
"time"
"github.com/ChimeraCoder/anaconda"
)
type Configuration struct {
ConsumerKey string
ConsumerSecret string
AccessToken string
AccessTokenSecret string
}
func main() {
file, _ := os.Open("conf.json")
//file, _ := os.Open("conf-test.json")
decoder := json.NewDecoder(file)
configuration := Configuration{}
err := decoder.Decode(&configuration)
if err != nil {
fmt.Println("config error:", err)
}
anaconda.SetConsumerKey(configuration.ConsumerKey)
anaconda.SetConsumerSecret(configuration.ConsumerSecret)
api := anaconda.NewTwitterApi(configuration.AccessToken, configuration.AccessTokenSecret)
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
body := r.PostFormValue("Body")
log.Println(string(body))
if strings.Contains(strings.ToLower(body), "bandon fews") || strings.Contains(strings.ToLower(body), "www.met.ie") {
fmt.Fprintf(w, "Thanks for the update")
if len(body) <= 140 {
// Just post normal Tweet
result, err := api.PostTweet(body, nil)
if err != nil {
fmt.Println(err)
} else {
fmt.Println(result)
fmt.Println("Tweet ID: ", result.Id)
}
} else {
// convert string to slice of words
strSlice := strings.Fields(body)
var originalTweetID int64
tweetParams := url.Values{}
var tweetCount int64 = 0
var subTweet string = ""
var intermediate string = ""
for ind, word := range strSlice {
if ind == 0 {
intermediate = word
} else {
intermediate = intermediate + " " + word
}
// This was 137 (to account for 140 minus "1/ ")
// But the t.co "shortening" is making www.met.ie longer
// So to be safe, I'm making it 137 minus length of t.co link (22)
if len(intermediate) > 115 {
tweetCount++
if tweetCount == 1 {
// Just Tweet and extract the ID from the response
result, err := api.PostTweet("1/ "+subTweet, nil)
fmt.Println("1/ " + subTweet)
if err != nil {
fmt.Println(err)
} else {
fmt.Println(result)
originalTweetID = result.Id
}
} else {
// adding one second delay in Tweetstorm to prevent any throttling by Twitter
time.Sleep(time.Second)
// Tweet in reply to the first tweet by setting in_reply_to_status_id
// originalTweetID
tweetParams.Set("in_reply_to_status_id", strconv.FormatInt(originalTweetID, 10))
result, err := api.PostTweet(strconv.FormatInt(tweetCount, 10)+"/ "+subTweet, tweetParams)
fmt.Println(strconv.FormatInt(tweetCount, 10) + "/ " + subTweet)
if err != nil {
fmt.Println(err)
} else {
fmt.Println(result)
}
}
intermediate = word
subTweet = word
} else {
subTweet = intermediate
}
}
if subTweet != "" {
tweetCount++
// adding one second delay in Tweetstorm to prevent any throttling by Twitter
time.Sleep(time.Second)
// Tweet in reply to the first tweet by setting in_reply_to_status_id
// originalTweetID
tweetParams.Set("in_reply_to_status_id", strconv.FormatInt(originalTweetID, 10))
result, err := api.PostTweet(strconv.FormatInt(tweetCount, 10)+"/ "+subTweet, tweetParams)
fmt.Println(strconv.FormatInt(tweetCount, 10) + "/ " + subTweet)
if err != nil {
fmt.Println(err)
} else {
fmt.Println(result)
}
}
}
}
})
log.Fatal(http.ListenAndServe(":8333", nil))
}
@conoro
Copy link
Author

conoro commented Dec 20, 2016

Now splits tweets on word boundaries.

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