マエカワの備忘録的な何か

思い立ったが吉日

javaで自動ツイートをしたい

とある講義で、twitterに情報を定期的に上げるプログラムを組みたいということで、javaを用いてやっていこうと思います.

 ということで、twitter4jっていうAPIがあったので活用していきます.
 このAPITwitterクラスのtwitterStatus()メソッドのカッコの中の文字を新しくツイートしてくれるらしいです.
 そして、twitterAPI1.1からOAuthっていうものが必要になったらしく、電話番号登録済みのツイッターアカウントを一つ犠牲にして登録いたしました.Application Manegementっていうところで登録できます.ツイッターのアプリケーションを作るために必要なものらしいのですが、今回の自動ツイートも結局botなのでこいつを使っていきます.
ここら辺の詳しい解説はこちらの記事を参考にさせていただきました.
hakumai164.hatenablog.com

 んで、こいつが組んでみたプログラミング.基本上の記事のものを参考にしたのでほとんど一緒です.Thread.sleep()を使って1分間置きに1回ツイートしてくれるようにしました.

import java.io.BufferedReader; //今回は使わないっす
import java.io.InputStreamReader; //今回は使わないっす
import java.io.IOException;
import java.lang.InterruptedException;

import twitter4j.Twitter;
import twitter4j.TwitterException;
import twitter4j.TwitterFactory;

public class Test {
	public static void main(String[] args) throws IOException {

		for(int i=0;i<10;i++){
			//System.out.println("What's happening?");

			try {
				//BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
				//String tweetString = br.readLine();
				
				String tweetString=i+"回目の自動ツイート"; //同じ内容はツイートできないので、こんな感じで回避
				
				Twitter twitter = new TwitterFactory().getInstance();
				twitter.updateStatus(tweetString); //updateStatusメソッドの中身がツイートされる。
				Thread.sleep(60000); //6000ms=1分間お休みさせることでツイート頻度を調整
			} catch (TwitterException e) {
			} catch (InterruptedException e){	
			}	
		}
	}
}


 最終的に画像処理で出てきた数値やらグラフやらを定期的に飛ばすことができたらいいなぁと思っているので、今度はjavaを用いた画像処理についてちょっと調べながらこんな記事を書いていくかもしれないです.


ちなみに、これがうまく動かない時は、下の二種類のエラーがコンソールの一番最後に表示されてました.

{"errors":[{"code":215,"message":"Bad Authentication data."}]}

{"errors":[{"code":187,"message":"Status is a duplicate."}]}

 上のほうが「スタックオーバーフロー」関係のエラー.したのが「同じ内容のツイートはしちゃだめ」っていうエラーになっているようです.前者のほうは致命的なミスがあると思っていいかもしれない.
 自分はconsumerKeyとかを保管しておくtwitter4j.propertiesの内容が壊滅的に違っていたことが原因だったので、ここも調べてみるといいかもしれないです.

追記(2018/1/29)

 この記事で参照しているリンクが切れていたので、新しく方法を書き直しました。画像ツイートなどについても書いているので、よければご覧ください。
maekawa-yoshimiki-1119.hatenablog.com