Skip to content

Instantly share code, notes, and snippets.

@h0tk3y
Created January 21, 2017 22:21
Show Gist options
  • Select an option

  • Save h0tk3y/462be52d8e1aca1d4b2575ef6c8cf4f2 to your computer and use it in GitHub Desktop.

Select an option

Save h0tk3y/462be52d8e1aca1d4b2575ef6c8cf4f2 to your computer and use it in GitHub Desktop.
import com.fasterxml.jackson.core.JsonParser
import com.fasterxml.jackson.databind.DeserializationContext
import com.fasterxml.jackson.databind.JsonDeserializer
import com.fasterxml.jackson.databind.JsonNode
import com.fasterxml.jackson.databind.Module
import com.fasterxml.jackson.databind.module.SimpleModule
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
import okhttp3.OkHttpClient
import retrofit2.Retrofit
import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory
import retrofit2.converter.jackson.JacksonConverterFactory
import retrofit2.http.GET
import rx.Observable
interface TrendingMovie
interface Movies {
@GET("movies/trending")
fun trending(): Observable<List<TrendingMovie>>
}
fun trendingMovieModule(): Module = SimpleModule().apply {
val deserializer: JsonDeserializer<TrendingMovie> = object : JsonDeserializer<TrendingMovie>() {
override fun deserialize(p: JsonParser, ctxt: DeserializationContext): TrendingMovie {
val node = p.codec.readTree<JsonNode>(p)
return object : TrendingMovie {
val name = node["movie"]["title"]
val watchers = node["watchers"].intValue()
override fun toString(): String = "$name, watchers: $watchers"
}
}
}
addDeserializer(TrendingMovie::class.java, deserializer)
}
fun main(args: Array<String>) {
val mapper = jacksonObjectMapper().registerModule(trendingMovieModule())
val client = OkHttpClient.Builder().addInterceptor {
it.proceed(it.request().newBuilder()
.addHeader("Content-type", "application/json")
.addHeader("trakt-api-key", TODO("Enter your API key for api.trakt.tv"))
.addHeader("trakt-api-version", "2")
.build())
}.build()
val r = Retrofit.Builder()
.client(client)
.baseUrl("https://api.trakt.tv")
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.addConverterFactory(JacksonConverterFactory.create(mapper))
.build().create(Movies::class.java)
r.trending().flatMap { Observable.from(it) }.forEach(::println)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment