なんかくだらないことなんだけど、ハマって時間を取られてしまったのでメモ。

文字列の中に指定した文字列を含むかどうか判断するには、Stringクラスのmathcesメソッドを使うと良いようです。ただし、もとの文字列が正規表現でマッチするように指定しなければいけません。

たとえば、ある文字列strに test という文字列が部分として含まれるかどうかを知りたい場合には、以下のようにします。

 str.mathces(".*test.*");

これだと、たとえば

str = "this is a test.";

だとか、正規表現なので

str = "the greatest towel";

とかでもヒットします。

戻り値はboolean型なので、if文の条件判定部分などに入れればOKです。”文字列 検索”とかで調べてたので、てっきり ” 正規表現で指定した文字列を含む ” かどうかを判断してくれるのかと思っていました…

rubyのinclude?メソッドみたいな、普通に指定した文字列を含むかどうかだけを判断するメソッドはないみたいですね…

 str.include?("test") 

ぱっと調べた限りでは見つからなかったのですが、知っている方がいたらぜひ教えてください。

*以前の記事をサルベージしたのでコメントは残ってませんが、以下のようなコメントをいただいてました。

str.indexOf(“fuga”) >= 0

str.mathces(“.*fuga.*”)
は等価であるはず。

,

こいつです。今回は自動フォロー返し(follow back)機能を実装します。

まず、用語を整理しておきましょう。一番難しいのはここです。

followerとは、あるユーザーのことをフォローしている人のことです。逆に、friendとは、あるユーザフォローしている人のことです。

twitter4jには、あるユーザー同士の関係を調べる showFriendship() という便利なメソッドがあるのでそれを活用します。例によってJSON形式でデータが帰ってくるので、適当に処理してやります。ここでは、towelie_botアカウントのIDと、”towelie_botのfollowers” のIDを比較して、相互フォローになっていない場合にフォロー返しをするようになっています。132737336がtowelie_botのuserIDです。

import twitter4j.Twitter;
import twitter4j.TwitterException;

public class TowelFollow {
	static int[] followersIDs = null;

	public static void followBack(Twitter towel) {
		try {
			followersIDs = towel.getFollowersIDs().getIDs();

			for (int followers : followersIDs) {
				if (towel.showFriendship(132737336, followers)
						.isTargetFollowingSource()
						&& !towel.showFriendship(132737336, followers)
								.isSourceFollowingTarget()
						&& towel.showFriendship(132737336, followers)
								.isSourceNotificationsEnabled()) {
					towel.createFriendship(followers);
				}
			}
		} catch (TwitterException e) {
			e.printStackTrace();
		}
	}
}

非公開ユーザに対する動作がよくわからなかったので、そこは手付かずのままです。

フォローバックの機能はツイート機能のように頻繁に動かす必要もないので、別ファイルとして動作させます。

とりあえず必要最低限botとして十分な機能は実装できたので満足です。もしよければフォローしてね。
英語の勉強にも…ならないかw

, , , ,