Files
puzzlez/src/app/haxe/ru/m/api/UnsplashApi.hx
2024-02-12 00:59:07 +03:00

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}');
}
}