Table of Contents
一番大事なこと
tech.fusic.co.jpのTwitterアカウントをフォローしてください!!!!
フォローしました?
では読み進めてください。
背景
TechBlogの更新をTwitter配信したいなと思ってやってみました
TechBlogのCodeBuildイメージはNodeだったので、自分が得意なGoに寄せてバイナリを配置してしまいました
Anacondaを利用したツイートプログラムを書く
Twitter librariesのGoClientの中で一番スターの多い、ChimeraCoder/anacondaを利用することにしました
ここで紹介されてたのですんなり書けました
TechBlogはRSS配信を行なっているので、そこからリンクを取得してツイートすることにしました。
ところで上のRSS登録していきませんか?
- goFeedを使ってRSSから一番新しいリンクを取得
- Anacondaを使って最新のツイートを取得
- 差異があったらツイート
というプログラムを書きました
package main
import (
"net/url"
"os"
"github.com/ChimeraCoder/anaconda"
"github.com/labstack/gommon/log"
"github.com/mmcdole/gofeed"
)
func getAPI() *anaconda.TwitterApi {
anaconda.SetConsumerKey(os.Getenv("CONSUMER_KEY"))
anaconda.SetConsumerSecret(os.Getenv("CONSUMER_SECRET"))
return anaconda.NewTwitterApi(os.Getenv("ACCESS_TOKEN"), os.Getenv("ACCESS_TOKEN_SECRET"))
}
func getFeed() (*gofeed.Feed, error) {
file, _ := os.Open("dist/rss.xml")
defer file.Close()
fp := gofeed.NewParser()
feed, err := fp.Parse(file)
return feed, err
}
func main() {
feed, err := getFeed()
if err != nil {
log.Error(err)
return
}
// Title + URL
str := feed.Items[0].Title + "\n" + feed.Items[0].Link
api := getAPI()
v := url.Values{}
v.Set("count", "1")
tweets, err := api.GetHomeTimeline(v)
// anaconda側で文字列が欠落する対策
if str[:10] != tweets[0].Text[:10] {
v = url.Values{}
_, err := api.PostTweet(str, v)
if err != nil {
log.Error(err)
return
}
}
}
バイナリを小さくして配置
GoのBuild環境をわざわざ用意したくないのでバイナリを配置するわけですが、流石にバイナリサイズを小さくしたいです
こちらを参考にバイナリサイズを小さくします。
また、Linuxで動作させるので、Mac 上でBuildする際はGOOSの付与も忘れないようにしましょう
$ env GOOS=linux GOARCH=amd64 go build -ldflags '-s -w'
これを「twitter/post」として配置します
CodeBuild側に配置
buildspec.yml修正
codebuildのpost_buildにてtwitter/postを実行します。
buildspec.ymlにcommandsを追加すれば良いです。
post_build:
commands:
- twitter/post
環境変数追加
anacondaで利用する為の環境変数を設定します。
ビルドプロジェクト->実際のプロジェクト->編集->環境->環境変数
CONSUMER_KEY等を実際に追加します。
CONSUMER_KEYなどはこちらでAPPを登録して取得してください
あとは実際にCodeBuildが実行されればOKです。
結果
こんな感じで更新されてます。
tech.fusic.co.jpを宜しくお願い致します。