feat: add unsplash images source

This commit is contained in:
2023-01-05 21:00:40 +03:00
parent 3379eed4a9
commit ac1b9b63a2
15 changed files with 212 additions and 18 deletions

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