AWS SDK for Goを使ってTwitterのPublic streamをAmazon Pollyに読み上げさせる
はじめに
昨日に引き続きAWS SDK for Goの話です。今日はAWS SDK for Goを使ってTwitterのPublic streamsをAmazon Pollyに読み上げさせてみました。
やってみた
Golang環境の導入
Golang及びAWS SDK for Goの導入については昨日の記事を参照下さい。今回追加で使っているライブラリはanacondaなので、go getでインストールしておきます。
go get github.com/ChimeraCoder/anaconda
スクリプトを作成
以下のスクリプトを書きました。細かい内容はコメントで書いてあります。
package main import ( "fmt" "io/ioutil" "os" "os/exec" "strings" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/session" "github.com/aws/aws-sdk-go/service/polly" "github.com/ChimeraCoder/anaconda" ) func main() { // AWSセッション作成 sess := session.Must(session.NewSession()) // Pollyクライアントを作成 svc := polly.New(sess, aws.NewConfig().WithRegion("us-east-1")) // Twitter認証情報を取得。認証情報は環境変数でセットしておく。 consumerKey := os.Getenv("TWITER_CONSUMER_KEY") consumerSecret := os.Getenv("TWITER_CONSUMER_SECRET") AccessToken := os.Getenv("TWITER_ACCESS_TOKEN") AccessTokenSecret := os.Getenv("TWITER_ACCESS_TOKEN_SECRET") // Twitter認証 anaconda.SetConsumerKey(consumerKey) anaconda.SetConsumerSecret(consumerSecret) api := anaconda.NewTwitterApi(AccessToken, AccessTokenSecret) // TwitterのPublicStream(statuses/sample)を取得 twitterStream := api.PublicStreamSample(nil) for { // データを取得 data := <-twitterStream.C switch tweet := data.(type) { // Tweetの場合 case anaconda.Tweet: // URLが含まれているTweetは除外 if strings.Contains(tweet.Text, "http") == true { continue } // SynthesizeSpeechに渡すパラメータを設定 params := &polly.SynthesizeSpeechInput{ OutputFormat: aws.String("mp3"), Text: aws.String(tweet.Text), VoiceId: aws.String("Mizuki"), } // polly.SynthesizeSpeechを実行 resp, err := svc.SynthesizeSpeech(params) if err != nil { fmt.Println(err.Error()) return } // 結果をmp3ファイルで出力 content, err := ioutil.ReadAll(resp.AudioStream) ioutil.WriteFile("/tmp/gopolly.mp3", content, os.ModePerm) // mp3ファイルを再生 exerr := exec.Command("afplay", "/tmp/gopolly.mp3").Run() if exerr != nil { fmt.Println(exerr.Error()) return } default: } } }
作成したスクリプトはgo fmtで整形します。
$ go fmt gopolly.go
そしてbuildします。
$ go build
バイナリが出来上がります。
$ ls gopolly gopolly.go
バイナリを実行
$ ./gopolly
実行結果はこんな感じになって、延々再生され続けます。
ということでちゃんと実行されました!
さいごに
anacondaでPublic streamsを取得する際、languagesの指定は出来ないようです。何か良い方法があればぜひ教えてください。しかし、いやーコード書くの楽しいです。特にこういう何にも役立たないのを作ってるときが一番楽しいですね。