1
+ package com.androiddevs.newsflash.repository
2
+
3
+ import com.androiddevs.newsflash.data.NewsResult
4
+ import com.androiddevs.newsflash.data.NewsSources
5
+ import io.reactivex.Observable
6
+ import okhttp3.Interceptor
7
+ import okhttp3.OkHttpClient
8
+ import okhttp3.Response
9
+ import okhttp3.logging.HttpLoggingInterceptor
10
+ import retrofit2.Retrofit
11
+ import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory
12
+ import retrofit2.converter.gson.GsonConverterFactory
13
+ import retrofit2.http.GET
14
+ import retrofit2.http.Query
15
+ import java.util.concurrent.TimeUnit
16
+
17
+ interface NewsApiService {
18
+ @GET(" sources" )
19
+ fun getNewsSources (
20
+ @Query(" category" ) category : String ,
21
+ @Query(" language" ) language : String ,
22
+ @Query(" country" ) country : String
23
+ ): Observable <NewsSources .Sources >
24
+
25
+ @GET(" top-headlines" )
26
+ fun getTopHeadlines (
27
+ @Query(" country" ) country : String ,
28
+ @Query(" category" ) category : String ,
29
+ @Query(" sources" ) sources : String ,
30
+ @Query(" q" ) keyword : String ,
31
+ @Query(" pageSize" ) pageSize : Int ,
32
+ @Query(" page" ) page : Int
33
+ ): Observable <NewsResult .News >
34
+
35
+ @GET(" everything" )
36
+ fun getEverything (
37
+ @Query(" q" ) keyword : String ,
38
+ @Query(" qInTitle" ) keyWordInArtcile : String ,
39
+ @Query(" sources" ) sources : String ,
40
+ @Query(" domains" ) domain : String ,
41
+ @Query(" excludeDomains" ) excludeDomains : String ,
42
+ @Query(" from" ) from : String ,
43
+ @Query(" to" ) to : String ,
44
+ @Query(" language" ) language : String ,
45
+ @Query(" sortBy" ) sortBy : String ,
46
+ @Query(" pageSize" ) pageSize : Int ,
47
+ @Query(" page" ) page : Int ):Observable <NewsResult .News >
48
+
49
+
50
+ companion object {
51
+ fun create (): NewsApiService {
52
+
53
+ val httpLoggingInterceptor = HttpLoggingInterceptor ()
54
+ httpLoggingInterceptor.level = HttpLoggingInterceptor .Level .BODY
55
+
56
+ val okHttpClient = OkHttpClient .Builder ()
57
+ .addInterceptor(httpLoggingInterceptor)
58
+ .addInterceptor(object : Interceptor {
59
+ override fun intercept (chain : Interceptor .Chain ): Response {
60
+ val original = chain.request()
61
+
62
+ val request = original.newBuilder()
63
+ .addHeader(" X-Api-Key" , " PUT YOUR OWN API KEY HERE" )
64
+ .method(original.method, original.body)
65
+ .build()
66
+
67
+ return chain.proceed(request)
68
+ }
69
+ })
70
+ .connectTimeout(30 , TimeUnit .SECONDS )
71
+ .readTimeout(30 , TimeUnit .SECONDS )
72
+ .writeTimeout(30 , TimeUnit .SECONDS )
73
+ .build()
74
+
75
+ val retrofit = Retrofit .Builder ()
76
+ .addCallAdapterFactory(RxJava2CallAdapterFactory .create())
77
+ .addConverterFactory(GsonConverterFactory .create())
78
+ .baseUrl(" https://newsapi.org/v2/" )
79
+ .client(okHttpClient)
80
+ .build()
81
+
82
+
83
+ return retrofit.create(NewsApiService ::class .java)
84
+
85
+ }
86
+
87
+ }
88
+
89
+
90
+ }
0 commit comments