Azure Functionsから自動的にツイートするプログラムをJavaで作りました。乃木坂ちゃんへの愛を叫ぶだけです(^^;
Twitterの予約投稿機能、Bufferのようなサービス、ノーコードツールなどを使って同じことはできますが、Javaのコードで自由に処理を書けるので、より自由度が高い気がします。
JavaにはTwitter4Jという素晴らしいツールがあるので簡単に実現できます。だいぶ昔に書いた記事でTwitter Developersの画面が古いですが、興味ある方はこちらもご参照くださいm(_ _)m
環境構築
Azure Functionsをローカル環境で実行するには.NET Coreなどのインストールが必要です。今回はMicrosoftが提供している.NET CoreのDockerイメージをベースにしました。Azure CLI、JDK、azure-functions-core-toolsなど必要なものを入れています。
FROM mcr.microsoft.com/dotnet/core/sdk:3.1
RUN apt-get update && \
apt-get install -y --no-install-recommends \
openjdk-11-jdk && \
apt-get install -y maven
RUN curl -sL https://aka.ms/InstallAzureCLIDeb | bash
RUN curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
RUN mv microsoft.gpg /etc/apt/trusted.gpg.d/microsoft.gpg
RUN sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/debian/$(lsb_release -rs | cut -d'.' -f 1)/prod $(lsb_release -cs) main" > /etc/apt/sources.list.d/dotnetdev.list'
RUN apt-get update
RUN apt-get install azure-functions-core-tools-3
プロジェクトの準備
Mavenのazure-functions-archetypeを使ってプロジェクトを作成したらpom.xmlにTwitter4Jの依存性を追加します。
<dependency>
<groupId>org.twitter4j</groupId>
<artifactId>twitter4j-core</artifactId>
<version>4.0.7</version>
</dependency>
あとはsrc/main/resourcesの配下にtwitter4j.propertiesファイルを作成してTwitterで発行した各種キーを設定します。
debug=true
oauth.consumerKey=xxxxx
oauth.consumerSecret=xxxxx
oauth.accessToken=xxxxx
oauth.accessTokenSecret=xxxxxx
azure-functions-archetypeで作ったプロジェクトにはコードの雛形が用意されている(Function.java)ので、その中に以下のコードを追加しました。Cronのように定期実行されるFunctionです。
@FunctionName("keepAlive")
public void keepAlive(
@TimerTrigger(name = "keepAliveTrigger", schedule = "0 */30 * * * *") String timerInfo,
ExecutionContext context
) {
Twitter twitter = new TwitterFactory().getInstance();
try {
Status updateStatus = twitter.updateStatus("乃木坂46が大好きです!");
context.getLogger().info(updateStatus.getText());
} catch (TwitterException e) {
e.printStackTrace();
}
}
やったことはこれだけです。あとはビルドして
mvn clean package -DskipTests
実行します。
mvn azure-functions:run
このときハマった点は別途、以下の記事でまとめました。
ローカル環境でうまく動いたら、あとはデプロイするだけです。
mvn azure-functions:deploy
Azure Functionsといっても中身は普通のJavaプログラムなので、Twitter4Jのようなライブラリを利用できるのが嬉しいです。今回はツイートするだけの簡単なものでしたが、他のライブラリと合わせて面白いものが色々と作れそうです。