【Scala】Scala&Play FrameworkでTwitter4jをいじってみる Part5【Twitter4j】
前回の続きです。今回で完成させていきます。
routes
GET / controllers.HomeController.index GET /search controllers.SearchTweetsController.search
ルーティングは上記のとおりになっています。
HomeControllerは初期画面表示を行い、SearchTweetsControllerはTweetの検索処理と検索結果画面表示を行います。
Controllers
HomeController
package controllers import javax.inject._ import forms.SearchTweets import play.api.data.Form import play.api.data.Forms._ import play.api.i18n.{ I18nSupport, MessagesApi } import play.api.mvc._ import play.api.data.format.Formats._ @Singleton class HomeController @Inject()(val messagesApi: MessagesApi) extends Controller with I18nSupport { private val searchTweetsForm: Form[SearchTweets] = Form { mapping( "lat" -> of[Double], "lng" -> of[Double], "range" -> of[Double], "keyword" -> nonEmptyText )(SearchTweets.apply)(SearchTweets.unapply) } def index = Action { implicit request => Ok(views.html.index(searchTweetsForm, Nil)) } }
こちらの、HomeControllerは、初期画面表示を行います。
searchTweetsFormをマッピングしています。
indexメソッドで、初期画面表示を行っています。
SearchTweetsController
package controllers import javax.inject.{ Inject, Singleton } import forms.SearchTweets import models.Tweet import play.api.data.Form import play.api.data.Forms._ import play.api.i18n.{ I18nSupport, MessagesApi } import play.api.mvc.{ Action, AnyContent, Controller } import twitter4j._ import play.api.data.format.Formats._ @Singleton class SearchTweetsController @Inject()( val messagesApi: MessagesApi, ) extends Controller with I18nSupport { private val searchTweetsForm: Form[SearchTweets] = Form { mapping( "lat" -> of[Double], "lng" -> of[Double], "range" -> of[Double], "keyword" -> nonEmptyText )(SearchTweets.apply)(SearchTweets.unapply) } def search(): Action[AnyContent] = Action { implicit request => val twitter = new TwitterFactory().getInstance() val query = new Query() val form = searchTweetsForm.bindFromRequest.get val geo = new GeoLocation(form.lat, form.lng) query.setGeoCode(geo, form.range, Query.KILOMETERS) query.setQuery(form.keyword) query.setCount(100) var result: QueryResult = null try { result = twitter.search(query) } catch { case e: TwitterException => println("error") } val itr = result.getTweets().iterator() var tweetList: List[Tweet] = Nil while (itr.hasNext()) { val status = itr.next() val tweet = new Tweet(status.getText, status.getUser.getProfileImageURL) tweetList = tweetList.::(tweet) } Ok(views.html.index(searchTweetsForm, tweetList)) } }
こちらは、Tweetの検索処理を行います。
twitter4jの使い方などは、そこらじゅうに情報が転がっているので、説明はしません。
まとめ
とりあえず、ScalaとPlay Frameworkを使って、簡単なアプリを作ってみました。
さらなる学習のために、このアプリをより多機能にしたりしていきたいとおもいます。