ただのブログです

技術的な物とかを主に。主にWeb系がメイン。いつか、職業エンジニアになりたい。

Twitterにバルス!するやっつけコードを書いた

コードのネタは数年前にどこかで見たscala日本語プログラミングの話から(忘れてしまった…)

来たる8月2日、Twitter vs バルスの日

当日バルス数十分前に思いついたのでやってみた。 バルスを唱えるスクリプトをScalaで書く。

まず初めに

崩壊の呪文を唱える

こんな感じで実行できたら嬉しいのでそんな感じにします。

ただScalaは普通に日本語メソッド定義できちゃうので、普通に文字列でメソッドを定義してしまうのもつまらないし、形態素に分けて

"崩壊" の 呪文 を 唱 える

という感じで定義します。

「の」と「を」は多分格助詞、「える」は助動詞だと思うので、implicit conversion

class jp[A](self:A) {
  def の[B](f:A => B) = f(self)
  def を[B](f:A => B) = f(self)
  def える() = ()
}
implicit def a[A](v:A) = new jp(v)

という感じにつなげれるようにします。

「崩壊の呪文」はバルスですね!ついでにアブラカタブラも実装しておきます。

def 呪文(s:String) = s match {
  case "崩壊" => Some("バルス!")
  case "死" => Some("アブラカタブラ!")
  case _ => None
}

次に唱えるところですが、とりあえず動くところを確かめたいので

def 唱(str:Option[String]) = str.foreach{ s => println(s) }

としておきます。

で、メインである呪文を唱えるコードを追加

"崩壊" の 呪文 を 唱 える

最終的にできあがったのは

class jp[A](self:A) {
  def の[B](f:A => B) = f(self)
  def を[B](f:A => B) = f(self)
  def える() = ()
}

def 呪文(s:String) = s match {
  case "崩壊" => Some("バルス!")
  case "死" => Some("アブラカタブラ!")
  case _ => None
}
def 唱(str:Option[String]) = str.foreach{ s => println(s) }

implicit def a[A](v:A) = new jp(v)
"崩壊" の 呪文 を 唱 える // バルス

とりあえず、ツイッターに投稿はできていませんが、思ったように呪文が唱えられそうです。


次にTwitterに呪文を実際に唱えるところ。

twitter4jのライブラリを使うと直ぐにできるので使います。

mavenの説明がありますが、みんな大好きsbtだとこんな感じ

name := "Bals"
 
version := "1.0"
 
scalaVersion := "2.10.2"
 
libraryDependencies += "org.twitter4j" % "twitter4j-core" % "3.0.3"

各種APIを使用するのに必要なキーをTwitter Deveoperページで取得してきて「唱」を適当にツイートできるように実装します。
面倒なんで綺麗に書かずにやっつけコード

import twitter4j.conf.ConfigurationBuilder
import twitter4j.TwitterFactory

def 唱(str:Option[String]) = str.foreach{ s => 
    val CONSUMER_KEY = "Consumer key"
    val CONSUMER_SECRET = "Consumer secret"
    val ACCESS_TOKEN = "Access token"
    val ACCESS_TOKEN_SECRET = "Access token secret"
    builder.setOAuthConsumerKey(CONSUMER_KEY)
    builder.setOAuthConsumerSecret(CONSUMER_SECRET)
    builder.setOAuthAccessToken(ACCESS_TOKEN)
    builder.setOAuthAccessTokenSecret(ACCESS_TOKEN_SECRET)
    new TwitterFactory(builder.build).getInstance.updateStatus(s) // これでツイートできる
}

これで、唱えるとツイッター上に唱えれるようになったので、最後に全部くっつけて下記のようなコードになりました。

import twitter4j.conf.ConfigurationBuilder
import twitter4j.TwitterFactory

class jp[A](self:A) {
  def の[B](f:A => B) = f(self)
  def を[B](f:A => B) = f(self)
  def える() = ()
}

def 呪文(s:String) = s match {
  case "崩壊" => Some("バルス!")
  case "死" => Some("アブラカタブラ!")
  case _ => None
}

def 唱(str:Option[String]) = str.foreach{ s => 
    val CONSUMER_KEY = "Consumer key"
    val CONSUMER_SECRET = "Consumer secret"
    val ACCESS_TOKEN = "Access token"
    val ACCESS_TOKEN_SECRET = "Access token secret"
    builder.setOAuthConsumerKey(CONSUMER_KEY)
    builder.setOAuthConsumerSecret(CONSUMER_SECRET)
    builder.setOAuthAccessToken(ACCESS_TOKEN)
    builder.setOAuthAccessTokenSecret(ACCESS_TOKEN_SECRET)
    new TwitterFactory(builder.build).getInstance.updateStatus(s)
}

implicit def a[A](v:A) = new jp(v)
"崩壊" の 呪文 を 唱 える

使い捨てのコードなので適当だけど、こんな感じでツイートできました。