Написать GeoLocation Twitter4J в Postgres

Я извлекаю твиты, используя Twitter4J и Akka Streams. Я выбрал несколько полей, таких как userId, tweetId, tweet text и так далее. Эта сущность Tweet записывается в базу данных:

class Counter extends StatusAdapter with Databases{
  implicit val system = ActorSystem("TweetsExtractor")
  implicit val materializer = ActorMaterializer()
  implicit val executionContext = system.dispatcher
  implicit val LoggingAdapter =
    Logging(system, classOf[Counter])

  val overflowStrategy = OverflowStrategy.backpressure
  val bufferSize = 1000
  val statusSource = Source.queue[Status](
    bufferSize,
    overflowStrategy
  )

  val insertFlow: Flow[Status, Tweet, NotUsed] =
    Flow[Status].map(status => Tweet(status.getId, status.getUser.getId, status.getText, status.getLang,
      status.getFavoriteCount, status.getRetweetCount))
  val insertSink: Sink[Tweet, Future[Done]] = Sink.foreach(tweetRepository.create)
  val insertGraph = statusSource via insertFlow to insertSink
  val queueInsert = insertGraph.run()

  override def onStatus(status: Status) = 
    Await.result(queueInsert.offer(status), Duration.Inf)
}

Мое намерение состоит в том, чтобы добавить поле местоположения. Для этого в Twitter4J существует специальный тип GeoLocation, который содержит широту и долготу двойного типа. Однако, когда я пытаюсь извлечь широту и долготу непосредственно через поток, в базу данных ничего не записывается:

Flow[Status].map(status => Tweet(status.getId, status.getUser.getId, status.getText, status.getLang, status.getFavoriteCount, status.getRetweetCount, status.getGeoLocation.getLatitude, status.getGeoLocation.getLongitude))

В чем может быть причина такого поведения и как я могу это исправить?

1 ответ

Решение

То, что происходит здесь, как подтверждается в комментариях к вопросу, заключается в том, что большинство твитов не содержат прикрепленных данных геолокации, что делает эти поля пустыми и приводит к неправильному поведению.

Пара простых проверок на пустые значения должна решить проблему.

Другие вопросы по тегам