Nationalize.io (Independent Publisher) (#1688)
This commit is contained in:
Родитель
a9a21686f2
Коммит
cb780e83dc
|
@ -0,0 +1,20 @@
|
|||
# Nationalize.io
|
||||
Nationalize.io predicts the nationality of a person given their name. Use the API for analytics, ad segmenting, demographic statistics etc. The API is free for up to 1000 names/day.
|
||||
|
||||
## Publisher: Tomasz Poszytek
|
||||
|
||||
## Prerequisites
|
||||
No prerequisites.
|
||||
|
||||
## Supported Operations
|
||||
### Check name(s) nationality
|
||||
Action returns predicted nationalities for a given name or list of names. In case you want to check nationality for a list of names, provide them delimited with comma. Max. 10 names at a time! List will be truncated to first 10 items in case more names are provided.
|
||||
|
||||
## Obtaining Credentials
|
||||
If you would like to use the free version of API (up to 1000 names per day) just type **"none"** (w/o quotes) as the API key, when creating a connection. However, if you would like to check more than 1k names per month, please check subscription plans: https://store.nationalize.io/.
|
||||
|
||||
## Known Issues and Limitations
|
||||
No issues or limitations at the moment of api creation.
|
||||
|
||||
## Getting Started
|
||||
Visit https://nationalize.io/ to test the api on your own.
|
|
@ -0,0 +1,136 @@
|
|||
{
|
||||
"swagger": "2.0",
|
||||
"info": {
|
||||
"title": "Nationalize_io",
|
||||
"description": "Nationalize.io predicts the nationality of a person given their name. Use the API for analytics, ad segmenting, demographic statistics etc. The API is free for up to 1000 names/day.",
|
||||
"version": "1.0",
|
||||
"contact": {
|
||||
"name": "Tomasz Poszytek",
|
||||
"url": "https://aka.ms/poszytek",
|
||||
"email": "tomasz@poszytek.eu"
|
||||
}
|
||||
},
|
||||
"x-ms-connector-metadata": [
|
||||
{
|
||||
"propertyName": "Website",
|
||||
"propertyValue": "https://nationalize.io/"
|
||||
},
|
||||
{
|
||||
"propertyName": "Privacy policy",
|
||||
"propertyValue": "https://nationalize.io/"
|
||||
},
|
||||
{
|
||||
"propertyName": "Categories",
|
||||
"propertyValue": "AI;Data"
|
||||
}
|
||||
],
|
||||
"host": "api.genderize.io",
|
||||
"basePath": "/",
|
||||
"schemes": [
|
||||
"https"
|
||||
],
|
||||
"consumes": ["application/json"],
|
||||
"produces": ["application/json"],
|
||||
"paths": {
|
||||
"/": {
|
||||
"get": {
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "200",
|
||||
"schema": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "Checked name.",
|
||||
"title": "Name",
|
||||
"x-ms-visibility": "important"
|
||||
},
|
||||
"country": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"country_id": {
|
||||
"type": "string",
|
||||
"description": "Country ISO code.",
|
||||
"title": "Name"
|
||||
},
|
||||
"probability": {
|
||||
"type": "number",
|
||||
"format": "float",
|
||||
"description": "The certainty of the assigned nationality.",
|
||||
"title": "Probability"
|
||||
}
|
||||
}
|
||||
},
|
||||
"description": "List of checked countries.",
|
||||
"title": "Countries"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"headers": {
|
||||
"X-Rate-Limit-Limit": {
|
||||
"description": "The amount of names available in the current time window",
|
||||
"type": "integer",
|
||||
"x-ms-visibility": "advanced"
|
||||
},
|
||||
"X-Rate-Reset": {
|
||||
"description": "The number of names left in the current time window ",
|
||||
"type": "integer",
|
||||
"x-ms-visibility": "advanced"
|
||||
},
|
||||
"X-Rate-Limit-Remaining": {
|
||||
"description": "Seconds remaining until a new time window opens",
|
||||
"type": "integer",
|
||||
"x-ms-visibility": "advanced"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"summary": "Check name(s) nationality",
|
||||
"description": "Check nationality of a single name or multiple names. For multiple names - separate them with comma.",
|
||||
"operationId": "CheckNamesNationality",
|
||||
"parameters": [
|
||||
{
|
||||
"name": "name",
|
||||
"in": "query",
|
||||
"required": true,
|
||||
"type": "string",
|
||||
"description": "Name(s) to check the nationality. For multiple, separate with comma. Up to 10 names at a time.",
|
||||
"x-ms-summary": "Name(s)",
|
||||
"x-ms-visibility": "important"
|
||||
},
|
||||
{
|
||||
"name": "Accept",
|
||||
"in": "header",
|
||||
"required": true,
|
||||
"type": "string",
|
||||
"default": "application/json",
|
||||
"x-ms-visibility": "internal"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"/m/": {}
|
||||
},
|
||||
"definitions": {},
|
||||
"parameters": {},
|
||||
"responses": {},
|
||||
"securityDefinitions": {
|
||||
"API Key": {
|
||||
"type": "apiKey",
|
||||
"in": "query",
|
||||
"name": "apikey"
|
||||
}
|
||||
},
|
||||
"security": [
|
||||
{
|
||||
"API Key": []
|
||||
}
|
||||
],
|
||||
"tags": []
|
||||
}
|
|
@ -0,0 +1,27 @@
|
|||
{
|
||||
"properties": {
|
||||
"connectionParameters": {
|
||||
"api_key": {
|
||||
"type": "securestring",
|
||||
"uiDefinition": {
|
||||
"displayName": "Provide your API key. Type \"none\" if you are using free plan.",
|
||||
"description": "Provide your API key. Type \"none\" if you are using free plan.",
|
||||
"tooltip": "Provide your API key. Type \"none\" if you are using free plan.",
|
||||
"constraints": {
|
||||
"tabIndex": 2,
|
||||
"clearText": false,
|
||||
"required": "true"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"iconBrandColor": "#da3b01",
|
||||
"scriptOperations": [
|
||||
"CheckNamesNationality"
|
||||
],
|
||||
"capabilities": [],
|
||||
"policyTemplateInstances": [],
|
||||
"publisher": "Tomasz Poszytek",
|
||||
"stackOwner": "nationalize.io"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,60 @@
|
|||
using System.Net;
|
||||
using System.Web;
|
||||
|
||||
public class Script : ScriptBase
|
||||
{
|
||||
|
||||
public override async Task<HttpResponseMessage> ExecuteAsync()
|
||||
{
|
||||
return await this.HandleForwardOperation().ConfigureAwait(false);
|
||||
}
|
||||
|
||||
private async Task<HttpResponseMessage> HandleForwardOperation()
|
||||
{
|
||||
// get current request Uri
|
||||
var strRequestUri = this.Context.Request.RequestUri.AbsoluteUri;
|
||||
/*
|
||||
* url?name=x&country_id=y&apikey=z
|
||||
* after split:
|
||||
* 0: url
|
||||
* 1: name
|
||||
* 2: apikey
|
||||
*/
|
||||
string[] parts = strRequestUri.ToString().Split(new char[] {'?','&'});
|
||||
|
||||
int noOfParts = parts.Count();
|
||||
|
||||
// init request Uri params
|
||||
string reqName = "";
|
||||
string reqApiKey= "";
|
||||
|
||||
// build a request string for names
|
||||
string[] reqNameParts = parts[1].Split('=');
|
||||
string[] reqNames = (HttpUtility.UrlDecode(reqNameParts[1])).Split(',');
|
||||
int loopNo = 0;
|
||||
foreach (string reqNamePart in reqNames)
|
||||
{
|
||||
reqName = reqName + "name[]=" + reqNamePart.Trim() + "&";
|
||||
loopNo++;
|
||||
// Max. 10 names
|
||||
if (loopNo == 10) break;
|
||||
}
|
||||
// remove last &
|
||||
reqName = reqName.Remove(reqName.Length-1);
|
||||
|
||||
reqApiKey = "&"+parts[2];
|
||||
// if api key is none - remove it from the request URI,
|
||||
// to make a free request, otherwise use apikey
|
||||
string[] reqApiKeyParts = reqApiKey.Split('=');
|
||||
if (reqApiKeyParts[1].Contains("none")) {
|
||||
reqApiKey = "";
|
||||
}
|
||||
|
||||
// change request Uri in the request object
|
||||
this.Context.Request.RequestUri = new Uri($"https://api.nationalize.io/?{reqName+reqApiKey}");
|
||||
|
||||
// Use the context to an HTTP request
|
||||
HttpResponseMessage response = await this.Context.SendAsync(this.Context.Request, this.CancellationToken).ConfigureAwait(continueOnCapturedContext: false);
|
||||
return response;
|
||||
}
|
||||
}
|
Загрузка…
Ссылка в новой задаче