Elsaの技術日記(徒然なるままに)

主に自分で作ったアプリとかの報告・日記を記載

MENU

go言語でのTwitter自動投稿とデータ収集

今回はgo言語でTwitterへ自動投稿やデータ収集に対する方法について載せておこうと思います!!

最近、ブログやSNSに自動投稿するためのAPIの使い方が知りたくて調査してきました。
今回はTwitterに対して投稿したデータの閲覧やブログへの自動投稿手段についてまとめたいと思います。

プログラミング言語は題名の通り、go言語を用います。



Twitter API登録手順

Twitterへ自動投稿するためにはTwitter APIを用いる必要があります。
Twitter APIを用いるためにはTwitter開発アカウントへの登録が必要になります。

Twitter開発アカウントの登録はこちらの記事をご参考ください。
qiita.com

■認証・動作確認

では、認証動作の確認を行っていきます。
まずはTwitter APIを利用するためのライブラリをダウンロードしておきます。

go get github.com/ChimeraCoder/anaconda

そして、先ほどのAPI登録時に得られた「Consumer API Keys」、「アクセストークン情報」を用いてこちらのようなコードを作成します。

package main

import (
	"github.com/ChimeraCoder/anaconda"
)

func main() {
	anaconda.NewTwitterApiWithCredentials(AccessToken, AccessTokenSecret, ConsumerKey, ConsumerSecret)
}

こちらを実行し、エラーなく返ってくれば認証はOKです!!

Twitterデータ収集

では実際にTwitterのタイムラインからデータを収集します。
こちらが全体のコードです。

package main

import (
	. "fmt"
	"github.com/ChimeraCoder/anaconda"
	"io"
	"net/http"
	"net/url"
	"os"
)

func GetTwitterApi() *anaconda.TwitterApi {
	anaconda.SetConsumerKey("ConsumerKey")
	anaconda.SetConsumerSecret("ConsumerSecretKey")
	return anaconda.NewTwitterApi("APIKey", "APISecretKey")
}

func main() {

	api := GetTwitterApi()
	v := url.Values{}
	v.Set("count", "20") ←抽出データ.

	searchResult, _ := api.GetSearch("検索文字列 exclude:retweets filter:images", v)
	tweets := searchResult.Statuses

	for _, tweet := range searchResult.Statuses {
		Println("=======================================")
		Println(tweet.CreatedAt, tweet.Text)

	}
}

こちらにて、Twitterの認証を行います。

api := GetTwitterApi()

GetTwitterApi関数はこちらのように認証を行っております。

func GetTwitterApi() *anaconda.TwitterApi {
	anaconda.SetConsumerKey("ConsumerKey")
	anaconda.SetConsumerSecret("ConsumerSecretKey")
	return anaconda.NewTwitterApi("APIKey", "APISecretKey")
}

そして、

	v := url.Values{}
	v.Set("count", "20") ←抽出データ.

	searchResult, _ := api.GetSearch("検索文字列 exclude:retweets filter:images", v)
	tweets := searchResult.Statuses

にて、抽出するデータ数や検索する文字列等の設定を行い、twitterのタイムラインからデータを収集します。
最後にこちらにて収集したデータをログ出力。

	for _, tweet := range searchResult.Statuses {
		Println(tweet.CreatedAt, tweet.Text)
	}

ついでに、、、

searchResult, _ := api.GetSearch("検索文字列 exclude:retweets filter:images", v)

tweets, err := api.GetHomeTimeline(v)

に置き換えると自分の最新タイムラインデータの取得が行えます。

Twitter自動投稿

先ほどのデータ収集とは反対にこちらから投稿するコードを書いてみます。
全体のコードはこちらです。

package main

import (
	"github.com/ChimeraCoder/anaconda"
	"net/http"
	"io"
	"os"
)

func GetTwitterApi() *anaconda.TwitterApi {
	anaconda.SetConsumerKey("ConsumerKey")
	anaconda.SetConsumerSecret("ConsumerSecretKey")
	return anaconda.NewTwitterApi("APIKey", "APISecretKey")
}

func main() {

	api := GetTwitterApi()

	sendText := "すいません。Testです"
	tweet_ret, err := api.PostTweet(sendText, nil)
	if err != nil {
		panic(err)
	}
	Println(tweet_ret.Text)
}

先ほどのデータ取集と異なる点は下記です。

	sendText := "すいません。Testです"
	tweet_ret, err := api.PostTweet(sendText, nil)
	if err != nil {
		panic(err)
	}
	Println(tweet_ret.Text)

sendTextへ投稿したいメッセーを記載。

tweet_ret, err := api.PostTweet(sendText, nil)

にてTweetします。

■最後に

認証のためのアクセスキーを取得する部分が結構面倒ですが、そこさえクリアすれば簡単にデータ収集や投稿が行えました!!
自分で作成するWebアプリにも利用しようかな??🤔