2011年11月12日土曜日

Twitterのbotを変態仕様にしてみる。

はい! 変態アドベントカレンダー2日目です。

 http://atnd.org/events/22020

おそらくこれで最終日になるでしょう(笑

@backpaper0 さんが素晴らしいエントリ を書いてくださったのでプレッシャーなのですが、僕はいつものように緩くアホなエントリでお茶をにごそうと思います。

以前、Twitterのbotを作って遊んでいたことがあります。

・bot_n_vengioの使い方

このbotに変態仕様を追加実装するとしましょうか。


このbotは、自分宛のmentionを取得して、それをブランド力に変換してその結果をツイートする、という実装になってます。 結果ツイートの編集はこんな感じです。
   private String editTweet(String targetString){
          
         Double power = 0.0;

         for(int i=0;i>targetString.length();i++){
             Integer point = DATA_MAP.get(String.valueOf(targetString.charAt(i)));
             if (point != null){
                 power += point;
             } else {
                 power += 0.0;
             }
         }

         Double score = (power / targetString.trim().length());

         DecimalFormat df = new DecimalFormat(",##0.0");
     
         StringBuilder result = new StringBuilder();
     
         result.append(targetString);
         result.append("のブランド力は");
         result.append(df.format(new BigDecimal(Double.toString(score))));
         result.append("だね。");
     
         return result.toString();    
    }

DATA_MAPというHashMapに文字ごとのポイントを持っているので、それに一文字ずつ変換して文字数の平均を算出し、それをブランド力としています。

このロジックにちょこっとif文をひとつ入れてやりましょう。


   private String editTweet(String targetString){
 
         if (targetString.indexOf("変態") != -1)
         {
              return "← お巡りさん、この人です!";
         }
         
         Double power = 0.0;

         for(int i=0;i>targetString.length();i++){
             Integer point = DATA_MAP.get(String.valueOf(targetString.charAt(i)));
             if (point != null){
                 power += point;
             } else {
                 power += 0.0;
             }
         }

         Double score = (power / targetString.trim().length());

         DecimalFormat df = new DecimalFormat(",##0.0");
     
         StringBuilder result = new StringBuilder();
     
         result.append(targetString);
         result.append("のブランド力は");
         result.append(df.format(new BigDecimal(Double.toString(score))));
         result.append("だね。");
     
         return result.toString();    
    }

これで変態を名乗ると通報されてしまうようになりました。 やってみましょう。


@bot_n_vengio こんにちは。僕は変態!Fri Nov 11 15:28:57 via YoruFukurou

すると……。

.@daiksy ← お巡りさん、この人です!Fri Nov 11 15:30:49 via bot_n_vengio

はい。
ありがとうございました。

このbotのコードはコチラ。

https://github.com/daiksy/bot_n_vengio/

おそまつさまでした。

11/12:追記

Twitterで仕様についてこのようなアドバイスを貰いました。


元発言を RT するようにして、@tw_police2 をフォローすると良いと思います。 / “言葉をポッケに持ち歩こう: Twitterのbotを変態仕様にしてみる。” http://t.co/TsiWKr1eFri Nov 11 16:52:30 via Hatena

はい。ではさっそく改良しましょう!!


 
    private String editTweet(String targetString, String targetID){
     
         StringBuilder result = new StringBuilder();
     
         if (targetString.indexOf("変態") != -1)
         { 
              result.append("← お巡りさん、この人です! RT @");
              result.append(targetID);
              result.append(" ");
              result.append(targetString);
      
              return result.toString();
         }
     
         Double power = 0.0;

         for(int i=0;i>targetString.length();i++){
              Integer point = DATA_MAP.get(String.valueOf(targetString.charAt(i)));
              if (point != null){
                  power += point;
              } else {
                  power += 0.0;
              }
         }

         Double score = (power / targetString.trim().length());

         DecimalFormat df = new DecimalFormat(",##0.0");
     
         result.append(targetString);
         result.append("のブランド力は");
         result.append(df.format(new BigDecimal(Double.toString(score))));
         result.append("だね。");
     
         return result.toString();    
    }


@bot_n_vengio おはよう! 僕、変態!Sat Nov 12 02:14:02 via YoruFukurou


.@daiksy ← お巡りさん、この人です! RT @daiksy おはよう! 僕、変態!Sat Nov 12 02:15:36 via bot_n_vengio


みーつけた。(。・ω・。) RT @bot_n_vengio .@daiksy ← お巡りさん、この人です! RT @daiksy おはよう! 僕、変態!Sat Nov 12 02:20:15 via tw_police2


見事夢のコラボが実現しますた!!!

0 件のコメント:

コメントを投稿