Last active
January 11, 2017 11:14
-
-
Save conoro/f1a3f7c5b96e2b033119 to your computer and use it in GitHub Desktop.
Bandon FEWS Tweets
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Copyright Conor O'Neill 2016. [email protected] | |
// 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)) | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Now splits tweets on word boundaries.