■
Twitterbot
フォローしてるユーザのタイムラインとってきて"にゃー"という文字列があったら、"そのポストの重要な単語+にゃーん"と返事してくれるbot作った。まだJavaを勉強し始めてまだ日が浅いためソースが汚い。オブジェクト指向ってなんですか^q^
botは@nya_n_というアカウントで頑張ってます。twitterやっている方よろしければフォローお願いします。
自宅サーバーがないのでノーパソ上で回しています。それなので不定期起動botになっているのはお許しください。動いていたら幸運ぐらいの気持ちです。
以下は重要な部分のソースです。見苦しいですが申し訳ありません。寛大な心で見てやってください。
これらとは別にYahoo!キーフレーズ抽出用のラッパー、データベース操作クラスとありますがそれは省きます。
public class BotDriver { /** * @param args */ /** 一定時間毎にタスクを起動するTimer */ private Timer timer = null; /** Timerから一定時間毎に起動されるタスク */ private BotTask task = null; /** 時刻を保持するオブジェクト */ private TimeTask ttask = null; //Oauthドライバー private static Nya_n nyan = null; public static void main(String[] args) throws InterruptedException { // TODO 自動生成されたメソッド・スタブ BotDriver drive = new BotDriver(); nyan = new Nya_n(); try { nyan.eternalAccess(); nyan.setFirstId(); } catch (Exception e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } drive.start(); } public BotDriver() { timer = new Timer(); ttask = new TimeTask(); } public void start(){ if (task == null) { task = new BotTask(ttask,nyan); } System.out.println("taskを開始します"); timer.schedule(task, 0, 5*60*1000); } public void stop() { task.cancel(); task = null; System.out.println("Taskが停止しました"); } class BotTask extends TimerTask{ private TimeTask ttask; Nya_n nyan = null; public BotTask(TimeTask aTask,Nya_n nya) { ttask = aTask; nyan = nya; } public void run() { try { ttask.task(nyan); } catch (Exception e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } } } class TimeTask { public void task(Nya_n nyan) throws Exception{ if(nyan.getTimeLineList().isEmpty()){ nyan.rndPost(); }else if(!nyan.getReply().isEmpty()){ nyan.postReply(nyan.getReply()); }else{ nyan.reTweetNya_n(nyan.getTimeLineList()); } } } }
public class Twit { static Twitter twitter = new Twitter(); String post = null; long postid = 0; List<Status> ptline = null; Status status = null; Paging page = null; List<BeanWord> exeRes; String botname = "nya_n_"; //OAuth認証処理 public static void eternalAccess() throws Exception{ twitter.setOAuthConsumer(コンシューマーキー,コンシューマシークレット); AccessToken accessToken = loadAccessToken(botのuserID); twitter.setOAuthAccessToken(accessToken); System.out.println(twitter. getUserId()); } //ランダムpost public void rndPost() throws TwitterException{ twitter.updateStatus(setRndPost()); } //語尾セット public String setRndPost(){ String post = null; List<Post> posts = Post.getPosts(null); if(!posts.isEmpty()){ int i = 0; Random rnd = new Random(); i = (int) (posts.size() * rnd.nextDouble()); post = posts.get(i).getPost(); }else{ post = "( ´∀`)<ぬるぽ"; } return post; } public String getReTweet(){ return post; } public void setFirstId(){ try { postid = twitter.getFriendsTimeline().get(0).getId(); page = new Paging(postid); } catch (TwitterException e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } } public List<Status> getReply() throws TwitterException{ ptline = twitter.getMentions(page); return ptline; } public void postReply(List<Status> mline) throws Exception{ int i = 0; int nPoint = 0; int mPoint = 0; int n = 0; String reply = null; Collections.reverse(mline); for(;i<mline.size();i++){ exeRes = new ArrayList<BeanWord>(); exeRes = MorphologicalAnalysis.execute(mline.get(i).getText()); if(exeRes.isEmpty()){ reply = "@"+mline.get(i).getUser().getScreenName()+" "+ setRndPost(); }else{ for(int x =0;x<exeRes.size();x++){ nPoint = Integer.parseInt(exeRes.get(x).getScore()); if(nPoint>mPoint &&exeRes.get(x).getKeyphrase().equals("nya_n")!=true){ mPoint = nPoint; n = x; } } reply = "@"+mline.get(i).getUser().getScreenName()+" "+ exeRes.get(n).getKeyphrase()+setRndPost(); } twitter.updateStatus(reply); System.out.println(reply); } page.setSinceId(mline.get(mline.size()-1).getId()); } public List<Status> getTimeLineList() throws TwitterException{ ptline = twitter.getFriendsTimeline(page); return ptline; } }
public class Nya_n extends Twit{ List<Status> retPost; String key = "にゃー"; //にゃーが含むpostを取得し返事する public void reTweetNya_n(List<Status> ptline) throws Exception{ int i = 0; int check = 0; int flag = 0; int mPoint = 0; int nPoint = 0; retPost = new ArrayList<Status>(); // for(;ptline.get(i).getId()>postId;i++){ //"にゃー"が含むポストをlistに for(;i<ptline.size();i++){ if((ptline.get(i).getText().indexOf(key)!=-1) &&(ptline.get(i).getUser().getScreenName().equals(botname)!=true) &&(ptline.get(i).getText().indexOf(botname)==-1)){ retPost.add(ptline.get(i)); check=1; } } if(check!=0){ //Listの順序 Collections.reverse(retPost); //Listに対してリプライする for(i=0;i<retPost.size();i++){ //キーフレーズ抽出 exeRes = new ArrayList<BeanWord>(); exeRes = MorphologicalAnalysis.execute(retPost.get(i).getText()); int n = 0; if(!exeRes.isEmpty()){ //一番重要な単語を取得 for(int j=0;j<exeRes.size();j++){ System.out.println(exeRes.get(j).getScore()); nPoint = Integer.parseInt(exeRes.get(j).getScore()); if(nPoint>mPoint){ mPoint = nPoint; n = j; } } //重要な単語があれば付随してにゃーんでなければ単発にゃーん if(exeRes.isEmpty()){ String cat = setRndPost()+"RT @"+retPost.get(i).getUser().getScreenName() + ": " + retPost.get(i).getText(); twitter.updateStatus(cat); }else{ //postセット String cat = "@"+retPost.get(i).getUser().getScreenName()+ " " + exeRes.get(n).getKeyphrase()+ setRndPost(); System.out.println(cat); twitter.updateStatus(cat); } } } }else{ System.out.println("post"); rndPost(); } page.setSinceId(ptline.get(0).getId()); } }
ギャラクシーエンジェル
久しぶりにキャラソンアルバムを聞いた。ギャラクシーエンジェルでSHOUT!はツイッター上でもつぶやいた通りハズレがない。新谷良子、田村ゆかり、沢城みゆき、かないみか、山口眞弓ってどんだけ豪華なんでしょう。このアルバムは他のアルバムに比べて恋愛の曲が多くないかな。まっしぐらとギャラクシー★Bang!Bang!以外は全部少しなりとも歌詞内に恋愛要素が入っている。自分は特にGive me チョコレート!が大好きで頻繁に聞いてる。バレンタイン時期に聞くとすごいテンションが下がるけど。
ギャラクシーエンジェルは思えばひどい作品だった。いい意味で。初めて見たときは衝撃だった。何今の投げっぱなしアニメはって。ブロッコリーは時代を先取りしすぎてただろ。たまに似ている意見見かけるけど今放送されたら間違いなく売れるんじゃないかな。
DVD-BOX安く発売されるしどうしようか。