Scalaの勉強のためにTwitter4J使ってIntelliJ IDEAで普通のScalaプログラム書いてみた

Scala勉強するする詐欺をずっとはたらいていましたが、最近ちょっとずつScala書いています。
PlayFramework2にくっついてくるScalaの環境でちょこちょこ小さく、部分的にScala触ってたりはしてたんですけど、ゼロからScalaで何か作るみたいな事はやったことありませんでした。
友人*1がニーソ狂いなので、試しにニーソbotのタイムラインを監視して画像自動でDLするプログラムを書いてみました。
と言う備忘録。

プロジェクト作る

mavenなら適当なArchetypeからプロジェクトのひな形を作れますが、Scalaの場合はどうやるの?と思ってついったで呟いてみたら

と教えていただいたので、リンク先に従ってgiter8をインスコし、なんか名前がシンプルなScalaプロジェクト作るやつっぽいと言う理由でfayimora/basic-scala-projectと言うテンプレでプロジェクトを作成しました

sbtのプラグイン

2つ入れました

  • com.github.mpeltonen.sbt-idea
    • idea用の設定ファイルを生成するやつ
  • com.eed3si9n.sbt-assembly
    • executable jarを作るやつ

project/plugins.sbtに

addSbtPlugin("com.github.mpeltonen" % "sbt-idea" % "1.5.1")

addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.9.2")

こんな感じで書きます。

Twitter4J

build.sbtにTwitter4Jへの依存性を追加するだけでしたしScalaからも問題なく使えました。Twitter4Sと言うTwitter4JのScalaラッパもあるようだったんですが、自分でビルドしてローカルリポジトリインスコしないとダメみたいでだるかったのでやめました。
ステータス(ツイート)とかも、Jsonがどうのみたいなところを隠蔽して、ちゃんとした型で提供してくれるので非常に楽でした。

認証認可まわりとか

Twitter API ver 1.1から、全てのAPIに認証が必要になったのでこんなゴミアプリ作るためだけにTwitterにDeveloper登録しないとダメなのだるいですね。
アプリケーション登録の流れはこちらのページを参考にしました。

PHPでOAuth認証して自分のつぶやきを表示する [Twitter API 1.1 対応版] | webOpixel

ConsumerKeyとSecretをアプリ内に持っておかないとダメなんですが、WEBアプリじゃなくて今回作ったみたいなクライアントアプリだと隠すのにも限界ありますね。
そもそもコードをギッハブに公開する時点でアレなので、今回はあまり考えないことにしました。*2
Twitter4J、リクエストークンの取得やアクセストークン、シークレットの取得も楽でよかったです。

終わりに

「ニーソ画像集めるやつ作ってるんすよー」
みたいな話をしたら
「これって対象アカウント固定なんです?自由に指定できたらいいのになぁ」
という話になってアカウント指定対応したら、公式画像サービスから画像URLを取得するようにはいかない画像サービスとかがあって*3とりあえずTwitpicだけ対応するみたいなことをしました。
結果、にゃんこ系botなどを対象にするとねこ画像が集まったりするようになったので、もし使いたいという奇特な方がいらっしゃいましたら
GitHub - kamekoopa/twitter_gazou_atsumeruyatsu: Scala勉強用。指定したついったアカウントのツイート中の画像をダウンロードし続けるやつ
からどうぞ。
画像サービスのURLから元画像URLを求める方法については
keageLog: Twitterでよく見られる画像投稿サービスのURLから元画像のURLを取得する
にまとまっていて非常に便利でした。

*1:id:Ewigkeit

*2:乗っ取られても別に困りませんし

*3:Twitpicとか