59 lines
1.4 KiB
Haxe
59 lines
1.4 KiB
Haxe
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}');
|
|
}
|
|
}
|