2013-04-12 4 views
0

Я использую пример из @diegolparra для поиска в twitter и/или потоковой передачи.Нужна помощь, доступ к более высоким уровням поиска json/twitter

package controllers 

import play.api.mvc.{WebSocket, Action, Controller} 
import play.api.libs.functional.syntax._ 
import play.api.libs.json._ 
import play.api.libs.concurrent.Execution.Implicits.defaultContext 
import play.api.libs.ws.WS 
import play.api.libs.iteratee.{Iteratee, Concurrent, Enumerator} 
import play.api.libs.oauth.{OAuthCalculator, RequestToken, ConsumerKey} 

case class Tweet(from: String, text: String) 

object Tweets extends Controller { 
    implicit val tweetReads = (
    (__ \ "from_user_name").read[String] and 
    (__ \ "text").read[String] 
    )(Tweet) 

    def tweetList(query: String) = Action { 
    Async { 
     val results = 50 
     val responsePromise = 
     WS.url("http://search.twitter.com/search.json") 
      .withQueryString("q" -> query, "rpp" -> results.toString).get 

     responsePromise.map { 
     response => 
      val tweets = Json.parse(response.body).\("results").as[Seq[Tweet]] 
      Ok(views.html.tweetlist(tweets)) 
     } 
    } 
    } 

    val consumerKey =   ConsumerKey("EBcP4MM9VnI64L8RZLO7g","SVi7XyyNpWzidR2Zx2HVNZ7kZTwFGxpqGKqhOeA") 

    val accessToken = RequestToken("1228081488-sLSztNAm0ST2kssCkBNRyhSsmk8SP5dtcbX1ZE2", "GxHUymXdyTYRZxw4bbTbgN8Xh53jKxC1KwvgsVwUU") 

    def stream(keywords: String) = WebSocket.using[String] { request => 
    val out: Enumerator[String] = Concurrent.unicast[String](onStart = pushee => { 
     def twitterIteratee = Iteratee.foreach[Array[Byte]]{ ba => 
     val msg = new String(ba, "UTF-8") 
     pushee.push(msg) 
     println(msg) 
     } 
     WS.url("https://stream.twitter.com/1.1/statuses/filter.json?track=" + keywords) 
     .sign(OAuthCalculator(consumerKey, accessToken)) 
     .get(headers=> twitterIteratee) 
    }) 

    val in = Iteratee.ignore[String] 
    (in, out) 
    } 
} 

В этом примере вы получите результат поиска twitter по полям, from_user_name и текст. Теперь мне нужно получить доступ к дате create_at и еще одному уровню (пользователю узла), чтобы получить от пользователя: profile_image_url и lang.

Пожалуйста, любая помощь?

Спасибо.

ответ

0

В Devoxx France Гийом Борт продемонстрировал пример получения твитов, получающих некоторые «глубокие» сведения. Вы можете найти здесь код: https://github.com/adericbourg/devoxxfr2013/blob/master/app/controllers/Application.scala

Он не отображает свойства, которые вам нужны, но используя этот образец и документацию по API Twitter, вы можете получить то, что вам нужно.

Надеюсь, что это поможет, так что.

+0

Благодарим за помощь @ Албан, я посмотрю ... – Eusthace

 Смежные вопросы

  • Нет связанных вопросов^_^