function goCodeGen(endpoint, parameters) { if(endpoint == undefined) { console.log(parameters); console.log(endpoint); } var isMainEndpoint = endpoint.startsWith("https://api.audd.io/"); var packageApi = { 'recognize': { 'params': ['url', 'return', 'additionalParams'], 'types': ['string', 'string', 'map[string]string'], 'resultDemo': 'fmt.Printf("%s - %s.\\nTimecode: %s, album: %s. ℗ %s, %s\\n\\n"+\n "Listen: %s\\nOr directly on:\\n- Apple Music: %s, \\n- Spotify: %s",\n result.Artist, result.Title, result.Timecode, result.Album,\n result.Label, result.ReleaseDate, result.SongLink,\n result.AppleMusic.URL, result.Spotify.ExternalUrls.Spotify)', }, 'recognizeWithOffset': { 'func': 'RecognizeHummingByUrl', 'params': ['url'], 'types': ['string'], }, 'findLyrics': { 'params': ['q', 'additionalParams'], 'types': ['string', 'map[string]string'], 'resultDemo': 'if len(result) == 0 {\n fmt.Println("AudD can\'t find any lyrics by this query")\n return\n}\nfirstSong := result[0]\nfmt.Printf("First match: %s - %s\\n\\n%s", firstSong.Artist, firstSong.Title, firstSong.Lyrics)', }, 'setCallbackUrl': { 'params': ['url', 'additionalParams'], 'types': ['string', 'map[string]string'], 'returnsOnlyError': true, }, 'addStream': { 'params': ['url', 'radio_id', 'callbacks', 'additionalParams'], 'types': ['string', 'int', 'string', 'map[string]string'], 'returnsOnlyError': true, }, 'setStreamUrl': { 'params': ['url', 'radio_id', 'additionalParams'], 'types': ['string', 'int', 'map[string]string'], 'returnsOnlyError': true, }, 'deleteStream': { 'params': ['radio_id', 'additionalParams'], 'types': ['int', 'map[string]string'], 'returnsOnlyError': true, }, 'getCallbackUrl': { 'params': [], 'types': [], }, 'getStreams': { 'params': [], 'types': [], }, 'enterprise.audd.io': { 'func': 'RecognizeLongAudio', 'params': ['url', 'additionalParams'], 'types': ['string', 'map[string]string'], }, }; var typesDefaults = {'string': '""', 'int': '0', 'map[string]string': 'nil'}; if(endpoint == "https://enterprise.audd.io/") { isMainEndpoint = true; } var method = endpoint.replace('https://', '').replace('api.audd.io', '').replace(/\//g, ''); if(method == '') method = 'recognize'; if(packageApi[method] === undefined) isMainEndpoint = false; if(isMainEndpoint) { var ApiToken = parameters.filter(value => value.name == "api_token")[0].example; var codeResult = 'package main\n\nimport (\n "fmt"\n "encoding/json"\n "github.com/AudDMusic/audd-go"\n)\n\nfunc main() {\n'; codeResult += ' client := audd.NewClient("'+ApiToken+'")\n'; if(method == 'enterprise.audd.io') { codeResult += ' client.SetEndpoint(audd.EnterpriseAPIEndpoint)\n'; } func = packageApi[method]; var funcName = method[0].toUpperCase() + method.slice(1); if(func.func !== undefined) funcName = func.func; var params = Object(); for(var i = 0; i < parameters.length; i++) { if(parameters[i].example !== undefined && parameters[i].name !== 'api_token') { params[parameters[i].name] = parameters[i].example; } } var hasAdditionalParams = -1; var funcParameters = Array(); for(var i = 0; i < func.params.length; i++) { if(params[func.params[i]] === undefined) { if(func.params[i] == 'additionalParams') hasAdditionalParams = i; funcParameters[i] = typesDefaults[func.types[i]]; continue; } var parameterSpelling = (func.types[i] == 'string' ? '"':'')+params[func.params[i]]+(func.types[i] == 'string' ? '"':''); if(params[func.params[i]].length > 19) { funcParameters[i] = func.params[i].replace(/\s(.)/g, function(a) { return a.toUpperCase(); }) .replace(/\s/g, '') .replace(/^(.)/, function(b) { return b.toLowerCase(); }); funcParameters[i] = funcParameters[i][0].toUpperCase() + funcParameters[i].slice(1); codeResult += ' '+funcParameters[i] + ' := '+parameterSpelling+'\n'; delete params[func.params[i]]; continue; } funcParameters[i] = parameterSpelling; delete params[func.params[i]]; } if(hasAdditionalParams != -1) { var anythingLeft = false; var mapList = ""; for (var name in params) { anythingLeft = true; mapList += ' '+'"'+name+'": "'+params[name]+'",\n'; } if(anythingLeft) { mapList = ' data := map[string]string {\n'+mapList+' }\n'; codeResult += mapList; funcParameters[hasAdditionalParams] = 'data'; } } var funcPronounce = 'client.'+funcName+'('+funcParameters.join(', ')+')'; if(func.returnsOnlyError !== undefined) { if(func.returnsOnlyError === true) { codeResult += ' err := '+funcPronounce+'\n'; codeResult += ' if err != nil {\n panic(err)\n }\n}'; return codeResult; } } codeResult += ' result, err := '+funcPronounce+'\n'; codeResult += ' if err != nil {\n panic(err)\n }\n'; if(func.resultDemo !== undefined) { if(func.resultDemo != "") { codeResult += ' '+func.resultDemo.replace(/\n/g, '\n '); codeResult += '\n}'; return codeResult; } } codeResult += ' b, _ := json.Marshal(result)\n'; codeResult += ' fmt.Println(string(b))\n}'; return codeResult; } return 'package main\n\nimport (\n "fmt"\n "io"\n "net/http"\n "net/url"\n)\n\nfunc main() {\n data := url.Values{\n'+parameters.map(value => { return (' "'+value.name+'": {"'+value.example+'"},');}).join("\n")+'\n }\n response, _ := http.PostForm("'+endpoint+'", data)\n defer response.Body.Close()\n body, _ := io.ReadAll(response.Body)\n fmt.Println(string(body))\n}'; }; function goCodeGenFiles(endpoint, parameters) { var isMainEndpoint = endpoint.startsWith("https://api.audd.io/"); var packageApi = { 'recognize': { 'params': ['file', 'return', 'additionalParams'], 'types': ['file', 'string', 'map[string]string'], 'resultDemo': 'fmt.Printf("%s - %s.\\nTimecode: %s, album: %s. ℗ %s, %s\\n\\n"+\n "Listen: %s\\nOr directly on:\\n- Apple Music: %s, \\n- Spotify: %s",\n result.Artist, result.Title, result.Timecode, result.Album,\n result.Label, result.ReleaseDate, result.SongLink,\n result.AppleMusic.URL, result.Spotify.ExternalUrls.Spotify)', }, 'recognizeWithOffset': { 'func': 'RecognizeHumming', 'params': ['file'], 'types': ['file'], }, 'enterprise.audd.io': { 'func': 'RecognizeLongAudio', 'params': ['file', 'additionalParams'], 'types': ['file', 'map[string]string'], }, }; var typesDefaults = {'string': '""', 'int': '0', 'map[string]string': 'nil'}; if(endpoint == "https://enterprise.audd.io/") { isMainEndpoint = true; } var method = endpoint.replace('https://', '').replace('api.audd.io', '').replace(/\//g, ''); if(method == '') method = 'recognize'; if(packageApi[method] === undefined) isMainEndpoint = false; if(isMainEndpoint) { var ApiToken = parameters.filter(value => value.name == "api_token")[0].example; var codeResult = 'package main\n\nimport (\n "fmt"\n "github.com/AudDMusic/audd-go"\n "os"\n)\n\nfunc main() {\n'; codeResult += ' client := audd.NewClient("'+ApiToken+'")\n'; if(method == 'enterprise.audd.io') { codeResult += ' client.SetEndpoint(audd.EnterpriseAPIEndpoint)\n'; codeResult += ' // experimental uploading doesn\'t store files in the memory, could be faster\n // client.UseExperimentalUploading()\n'; } if(method == 'upload.audd.io') { codeResult += ' client.SetEndpoint("https://upload.audd.io/")\n'; codeResult += ' // experimental uploading doesn\'t store files in the memory, could be faster\n // client.UseExperimentalUploading()\n'; } func = packageApi[method]; var funcName = method[0].toUpperCase() + method.slice(1); if(func.func !== undefined) funcName = func.func; var params = Object(); for(var i = 0; i < parameters.length; i++) { if(parameters[i].example !== undefined && parameters[i].name !== 'api_token') { params[parameters[i].name] = parameters[i].example; } } var hasAdditionalParams = -1; var funcParameters = Array(); for(var i = 0; i < func.params.length; i++) { if(params[func.params[i]] === undefined) { if(func.params[i] == 'additionalParams') hasAdditionalParams = i; funcParameters[i] = typesDefaults[func.types[i]]; continue; } if(func.types[i] == "file") { if(func.params[i] == "file") funcParameters[i] = "file"; else { funcParameters[i] = func.params[i].replace(/\s(.)/g, function(a) { return a.toUpperCase(); }) .replace(/\s/g, '') .replace(/^(.)/, function(b) { return b.toLowerCase(); }); funcParameters[i] = funcParameters[i][0].toUpperCase() + funcParameters[i].slice(1); } codeResult += ' '+funcParameters[i] + ', err := os.Open("'+params[func.params[i]]+'")\n'; codeResult += ' if err != nil {\n panic(err)\n }\n'; delete params[func.params[i]]; continue; } var parameterSpelling = (func.types[i] == 'string' ? '"':'')+params[func.params[i]]+(func.types[i] == 'string' ? '"':''); if(params[func.params[i]].length > 19) { funcParameters[i] = func.params[i].replace(/\s(.)/g, function(a) { return a.toUpperCase(); }) .replace(/\s/g, '') .replace(/^(.)/, function(b) { return b.toLowerCase(); }); funcParameters[i] = funcParameters[i][0].toUpperCase() + funcParameters[i].slice(1); codeResult += ' '+funcParameters[i] + ' := '+parameterSpelling+'\n'; delete params[func.params[i]]; continue; } funcParameters[i] = parameterSpelling; delete params[func.params[i]]; } if(hasAdditionalParams != -1) { var anythingLeft = false; var mapList = ""; for (var name in params) { anythingLeft = true; mapList += ' '+'"'+name+'": "'+params[name]+'",\n'; } if(anythingLeft) { mapList = ' data := map[string]string {\n'+mapList+' }\n'; codeResult += mapList; funcParameters[hasAdditionalParams] = 'data'; } } var funcPronounce = 'client.'+funcName+'('+funcParameters.join(', ')+')'; if(func.returnsOnlyError !== undefined) { if(func.returnsOnlyError === true) { codeResult += ' err := '+funcPronounce+'\n'; codeResult += ' if err != nil {\n panic(err)\n }\n}'; return codeResult; } } codeResult += ' result, err := '+funcPronounce+'\n'; codeResult += ' if err != nil {\n panic(err)\n }\n'; if(func.resultDemo !== undefined) { if(func.resultDemo != "") { codeResult += ' '+func.resultDemo.replace(/\n/g, '\n '); codeResult += '\n}'; return codeResult; } } codeResult += ' b, _ := json.Marshal(result)\n'; codeResult += ' fmt.Println(string(b))\n}'; return codeResult; } var filePath = parameters.filter(value => value.name == "file")[0].example; return 'sorry, there was an error with the code generatation. probably we don\'t have the method in the published library. if you need a code example, please contact us.'; };