Created
March 7, 2025 01:07
-
-
Save usergood/4cf638616e2bfd90b618d59dd4df70f2 to your computer and use it in GitHub Desktop.
Heim Demo openapi
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name = "demo-geolocation" | |
component_target = 'demo-geolocation:1.0.0' | |
[[trigger.http]] | |
type = "http" | |
path = "/demo/extract-geo-location" | |
method = "POST" | |
[[trigger.http]] | |
type = "http" | |
path = "/demo/get-country" | |
method = "POST" | |
[[trigger.http]] | |
type = "http" | |
path = "/demo/sun-times" | |
method = "POST" | |
[capabilities] | |
allowed-outgoing-url = ["https://api.sunrise-sunset.org/*", "https://api.opencagedata.com/*"] |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
meta { | |
name: Extract Geo-Location from Image | |
type: http | |
seq: 1 | |
} | |
post { | |
url: http://127.0.0.1:3000/demo/extract-geo-location | |
body: json | |
auth: none | |
} | |
headers { | |
Authorization: mysecret-token | |
} | |
body:json { | |
{ | |
"image": "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" | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using DemoGeolocationWorld.wit.imports.heim.demoGeolocation.v1_0_0; | |
namespace DemoGeolocationWorld.wit.exports.heim.demoGeolocation.v1_0_0; | |
public partial class GeoLocationImpl : IGeoLocation | |
{ | |
public static bool Authorized(string AuthToken) | |
{ | |
if (AuthToken == "mysecret-token") | |
{ | |
return true; | |
} | |
return false; | |
} | |
// Extract Geo-Location from Image | |
public static async Task<ITypes.GeoLocationResponse> ExtractGeoLocationAsync( | |
string Authorization, | |
ITypes.ExtractGeoLocationRequestBody extractGeoLocationRequestBody) | |
{ | |
#pragma warning disable CS8600 // Converting null literal or possible null value to non-nullable type | |
#pragma warning disable CS8603 // Possible null reference return | |
ITypes.GeoLocationResponse return_value = null; | |
if (!Authorized(Authorization)) | |
{ | |
return await Task.FromResult(return_value); | |
} | |
// Decode the base64 string to a byte array | |
byte[] imageBytes = Convert.FromBase64String(extractGeoLocationRequestBody.image); | |
// Create a MemoryStream from the byte array | |
using (var stream = new MemoryStream(imageBytes)) | |
{ | |
var directories = MetadataExtractor.ImageMetadataReader.ReadMetadata(stream); | |
foreach (var directory in directories) | |
{ | |
var gpsDirectory = directory as MetadataExtractor.Formats.Exif.GpsDirectory; | |
if (gpsDirectory != null) | |
{ | |
var geoLocation = gpsDirectory.GetGeoLocation(); | |
if (geoLocation != null) | |
{ | |
return await Task.FromResult( | |
new ITypes.GeoLocationResponse( | |
geoLocation.Latitude, | |
geoLocation.Longitude)); | |
} | |
} | |
} | |
} | |
return return_value; | |
#pragma warning restore CS8600 // Converting null literal or possible null value to non-nullable type | |
#pragma warning restore CS8603 // Possible null reference return | |
} | |
// Retrieve Country Name from Coordinates | |
public static async Task<ITypes.CountryResponse> GetCountryFromCoordinatesAsync( | |
string Authorization, | |
ITypes.Coordinates getCountryFromCoordinatesRequestBody) | |
{ | |
#pragma warning disable CS8600 // Converting null literal or possible null value to non-nullable type | |
#pragma warning disable CS8603 // Possible null reference return | |
ITypes.CountryResponse return_value = null; | |
if (!Authorized(Authorization)) | |
{ | |
return await Task.FromResult(return_value); | |
} | |
var httpClient = new HttpClient(); | |
var apiKey = "API-KEY"; // Replace with your API key | |
var url = $"https://api.opencagedata.com/geocode/v1/json"+ | |
$"?q={getCountryFromCoordinatesRequestBody.latitude}+{getCountryFromCoordinatesRequestBody.longitude}" + | |
$"&key={apiKey}"; | |
var response = await httpClient.GetStringAsync(url); | |
using (System.Text.Json.JsonDocument doc = System.Text.Json.JsonDocument.Parse(response)) | |
{ | |
var country = doc.RootElement | |
.GetProperty("results")[0] | |
.GetProperty("components") | |
.GetProperty("country") | |
.GetString(); | |
return await Task.FromResult(new ITypes.CountryResponse(country)); | |
} | |
#pragma warning restore CS8600 // Converting null literal or possible null value to non-nullable type | |
#pragma warning restore CS8603 // Possible null reference return | |
} | |
// Retrieve Sun Rise and Set Times | |
public static async Task<ITypes.SunTimesResponse> GetSunTimesAsync( | |
string Authorization, | |
ITypes.SunTimesRequest sunTimesRequest) | |
{ | |
#pragma warning disable CS8602 | |
#pragma warning disable CS8600 // Converting null literal or possible null value to non-nullable type | |
#pragma warning disable CS8603 // Possible null reference return | |
#pragma warning disable CS8604 // Possible null reference return | |
ITypes.SunTimesResponse return_value = null; | |
if (!Authorized(Authorization)) | |
{ | |
return await Task.FromResult(return_value); | |
} | |
var formattedDate = DateTime.Parse(sunTimesRequest.date).ToString("yyyy-MM-dd"); | |
var url = $"https://api.sunrise-sunset.org/json" + | |
$"?lat={sunTimesRequest.coordinates.latitude}" + | |
$"&lng={sunTimesRequest.coordinates.longitude}" + | |
$"&date={formattedDate}&formatted=0"; | |
var httpClient = new HttpClient(); | |
var response = await httpClient.GetStringAsync(url); | |
using (System.Text.Json.JsonDocument doc = System.Text.Json.JsonDocument.Parse(response)) | |
{ | |
var sunrise = doc.RootElement | |
.GetProperty("results") | |
.GetProperty("sunrise") | |
.GetString(); | |
var sunset = doc.RootElement | |
.GetProperty("results") | |
.GetProperty("sunset") | |
.GetString(); | |
return new ITypes.SunTimesResponse(sunrise, sunset); | |
} | |
#pragma warning restore CS8604 | |
#pragma warning restore CS8600 | |
#pragma warning restore CS8603 | |
#pragma warning restore CS8602 | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"openapi": "3.0.3", | |
"info": { | |
"title": "Demo Geolocation", | |
"version": "1.0.0", | |
"description": "API for geolocation services including image processing, country retrieval, and sun timing." | |
}, | |
"tags": [ | |
{ | |
"name": "geo-location", | |
"description": "Operations related to geolocation services." | |
} | |
], | |
"components": { | |
"schemas": { | |
"Coordinates": { | |
"type": "object", | |
"properties": { | |
"latitude": { | |
"type": "number", | |
"format": "double", | |
"description": "Latitude of the location." | |
}, | |
"longitude": { | |
"type": "number", | |
"format": "double", | |
"description": "Longitude of the location." | |
} | |
}, | |
"required": ["latitude", "longitude"] | |
}, | |
"GeoLocationResponse": { | |
"type": "object", | |
"properties": { | |
"latitude": { | |
"type": "number", | |
"format": "double" | |
}, | |
"longitude": { | |
"type": "number", | |
"format": "double" | |
} | |
} | |
}, | |
"CountryResponse": { | |
"type": "object", | |
"properties": { | |
"country": { | |
"type": "string", | |
"description": "Name of the country." | |
} | |
} | |
}, | |
"SunTimesResponse": { | |
"type": "object", | |
"properties": { | |
"sunrise": { | |
"type": "string", | |
"format": "time", | |
"description": "Time of sunrise." | |
}, | |
"sunset": { | |
"type": "string", | |
"format": "time", | |
"description": "Time of sunset." | |
} | |
} | |
}, | |
"SunTimesRequest": { | |
"type": "object", | |
"properties": { | |
"coordinates": { | |
"$ref": "#/components/schemas/Coordinates" | |
}, | |
"date": { | |
"type": "string", | |
"format": "date", | |
"description": "Date for which to retrieve sun times." | |
} | |
} | |
} | |
} | |
}, | |
"paths": { | |
"/extract-geo-location": { | |
"post": { | |
"tags": ["geo-location"], | |
"summary": "Extract Geo-Location from Image", | |
"operationId": "extractGeoLocation", | |
"parameters": [ | |
{ | |
"name": "Authorization", | |
"in": "header", | |
"required": true, | |
"schema": { | |
"type": "string" | |
} | |
} | |
], | |
"requestBody": { | |
"required": true, | |
"content": { | |
"application/json": { | |
"schema": { | |
"type": "object", | |
"properties": { | |
"image": { | |
"type": "string", | |
"format": "binary", | |
"description": "Base64 encoded image." | |
} | |
}, | |
"required": ["image"] | |
} | |
} | |
}, | |
"examples": { | |
"example1": { | |
"value": { | |
"image": "iVBORw0KGgoAAAANSUhEUgAAAAUA..." | |
} | |
} | |
} | |
}, | |
"responses": { | |
"200": { | |
"description": "Geo-Location coordinates extracted successfully.", | |
"content": { | |
"application/json": { | |
"schema": { | |
"$ref": "#/components/schemas/GeoLocationResponse" | |
} | |
} | |
} | |
} | |
} | |
} | |
}, | |
"/get-country": { | |
"post": { | |
"tags": ["geo-location"], | |
"summary": "Retrieve Country Name from Coordinates", | |
"operationId": "getCountryFromCoordinates", | |
"parameters": [ | |
{ | |
"name": "Authorization", | |
"in": "header", | |
"required": true, | |
"schema": { | |
"type": "string" | |
} | |
} | |
], | |
"requestBody": { | |
"required": true, | |
"content": { | |
"application/json": { | |
"schema": { | |
"$ref": "#/components/schemas/Coordinates" | |
} | |
} | |
}, | |
"examples": { | |
"example1": { | |
"value": { | |
"latitude": 37.7749, | |
"longitude": -122.4194 | |
} | |
} | |
} | |
}, | |
"responses": { | |
"200": { | |
"description": "Country name retrieved successfully.", | |
"content": { | |
"application/json": { | |
"schema": { | |
"$ref": "#/components/schemas/CountryResponse" | |
} | |
} | |
} | |
} | |
} | |
} | |
}, | |
"/sun-times": { | |
"post": { | |
"tags": ["geo-location"], | |
"summary": "Retrieve Sun Rise and Set Times", | |
"operationId": "getSunTimes", | |
"parameters": [ | |
{ | |
"name": "Authorization", | |
"in": "header", | |
"required": true, | |
"schema": { | |
"type": "string" | |
} | |
} | |
], | |
"requestBody": { | |
"required": true, | |
"content": { | |
"application/json": { | |
"schema": { | |
"$ref": "#/components/schemas/SunTimesRequest" | |
} | |
} | |
}, | |
"examples": { | |
"example1": { | |
"value": { | |
"suntimesrequest": { | |
"coordinates": { | |
"latitude": 37.7749, | |
"longitude": -122.4194 | |
}, | |
"date": "2023-10-01" | |
} | |
} | |
} | |
} | |
}, | |
"responses": { | |
"200": { | |
"description": "Sun rise and set times retrieved successfully.", | |
"content": { | |
"application/json": { | |
"schema": { | |
"$ref": "#/components/schemas/SunTimesResponse" | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
meta { | |
name: Retrieve Country Name from Coordinates | |
type: http | |
seq: 2 | |
} | |
post { | |
url: http://127.0.0.1:3000/demo/get-country | |
body: json | |
auth: none | |
} | |
headers { | |
Authorization: mysecret-token | |
} | |
body:json { | |
{ | |
"latitude": 59.274, | |
"longitude": 15.2136 | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
meta { | |
name: Retrieve Sun Rise and Set Times | |
type: http | |
seq: 3 | |
} | |
post { | |
url: http://127.0.0.1:3000/demo/sun-times | |
body: json | |
auth: none | |
} | |
headers { | |
Authorization: mysecret-token | |
} | |
body:json { | |
{ | |
"coordinates": { | |
"latitude": 59.274, | |
"longitude": 15.2136 | |
}, | |
"date": "2025-03-06" | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment