feat: add unsplash images source
This commit is contained in:
62
src/app/haxe/ru/m/api/UnsplashApi.hx
Normal file
62
src/app/haxe/ru/m/api/UnsplashApi.hx
Normal file
@@ -0,0 +1,62 @@
|
||||
package ru.m.api;
|
||||
|
||||
import hw.net.JsonLoader;
|
||||
import promhx.Promise;
|
||||
|
||||
typedef UnsplashImage = {
|
||||
var id:String;
|
||||
var width:Int;
|
||||
var height:Int;
|
||||
var urls:{
|
||||
raw:String,
|
||||
full:String,
|
||||
regular:String,
|
||||
small:String,
|
||||
thumb:String,
|
||||
};
|
||||
}
|
||||
|
||||
typedef UnsplashResponse = {
|
||||
var total: Int;
|
||||
var total_pages: Int;
|
||||
var results: Array<UnsplashImage>;
|
||||
}
|
||||
|
||||
class UnsplashApi {
|
||||
private var baseUrl:String = "https://api.unsplash.com";
|
||||
private var key:String;
|
||||
|
||||
public function new(key:String) {
|
||||
this.key = key;
|
||||
}
|
||||
|
||||
private function buildQuery(queryMap:Map<String, Dynamic>):String {
|
||||
return [for (k in queryMap.keys()) '${k}=${queryMap.get(k)}'].join("&");
|
||||
}
|
||||
|
||||
private function buildRequest(queryMap:Map<String, Dynamic>):String {
|
||||
queryMap.set("client_id", key);
|
||||
var query = buildQuery(queryMap);
|
||||
return '${baseUrl}/search/photos?${query}';
|
||||
}
|
||||
|
||||
public function getPage(page:Int, perPage:Int, query:String):Promise<UnsplashResponse> {
|
||||
return new JsonLoader<UnsplashResponse>()
|
||||
.GET(buildRequest([
|
||||
"per_page" => perPage,
|
||||
"page" => page,
|
||||
"order_by" => "relevant",
|
||||
"orientation" => "landscape",
|
||||
"query" => query,
|
||||
]));
|
||||
}
|
||||
|
||||
public function get(id:String):Promise<UnsplashImage> {
|
||||
var queryMap = [
|
||||
"client_id" => key,
|
||||
];
|
||||
var query = buildQuery(queryMap);
|
||||
return new JsonLoader<UnsplashImage>()
|
||||
.GET('${baseUrl}/photos/${id}?${query}');
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user