Created
January 21, 2017 22:21
-
-
Save h0tk3y/462be52d8e1aca1d4b2575ef6c8cf4f2 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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