Fusic Tech Blog

Fusion of Society, IT and Culture

CodeBuildでTechBlogの更新をAnacondaにてツイートする
2020/01/13

CodeBuildでTechBlogの更新をAnacondaにてツイートする

一番大事なこと

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を宜しくお願い致します。

参考情報

Shiro Seike

Shiro Seike

Company:Fusic CO., LTD. Slides:slide.seike460.com blog:blog.seike460.com Program Language:PHP , Go Interest:Full Serverless Architecture