{"id":73000,"date":"2025-01-31T13:49:42","date_gmt":"2025-01-31T13:49:42","guid":{"rendered":"https:\/\/antonini.psc.br\/blogmed\/?p=73000"},"modified":"2025-01-31T13:51:23","modified_gmt":"2025-01-31T13:51:23","slug":"converter-voz-em-texto-e-executar-comando-por-voz-com-javascript","status":"publish","type":"post","link":"https:\/\/antonini.ddns.net\/?p=73000","title":{"rendered":"Converter voz em texto e executar comando por voz com JavaScript"},"content":{"rendered":"<p style=\"text-align: justify;\">A API Web Speech permite que aplica\u00e7\u00e3o web acessem o microfone e com isso nos possibilita o reconhecimento de fala, dai podemos transcrever em texto ou criar estruturas de comandos de voz.<!--more--> Para deixar nosso exemplo mais interessante vamos tamb\u00e9m colocar uma estrutura, exemplo de comando por voz, assim nosso projeto al\u00e9m de transcrever o que estamos falando, tamb\u00e9m ir\u00e1 executar comandos previamente definidos para executar duas fun\u00e7\u00f5es simples, que ser\u00e3o: mostrar a hora atual e abrir o YouTube em uma nova janela.<\/p>\n<p style=\"text-align: justify;\">Com este recurso podemos criar uma infinidade de aplicativos, desde um editor de texto baseado em voz, que nos permite escrever textos sem digitar, tamb\u00e9m podemos desenvolver sistemas que executam fun\u00e7\u00f5es baseado na fala do operador, sistemas que interagem conversando com o usu\u00e1rio e muitas outras aplica\u00e7\u00f5es.<\/p>\n<p style=\"text-align: center;\"><iframe loading=\"lazy\" src=\"\/\/www.youtube.com\/embed\/ofyCWCoRavA\" width=\"560\" height=\"314\" allowfullscreen=\"allowfullscreen\"><\/iframe><\/p>\n<p align=\"justify\">Ent\u00e3o vamos a dica de hoje, iniciando com um c\u00f3digo simples HTML<\/p>\n<pre class=\"wp-block-code prettyprinted\"><code class=\" prettyprinted\">   <span class=\"tag\">&lt;div<\/span> <span class=\"atn\">style<\/span><span class=\"pun\">=<\/span><span class=\"atv\">\"<\/span><span class=\"pln\">padding<\/span><span class=\"pun\">:<\/span><span class=\"lit\">20px<\/span><span class=\"atv\">\"<\/span><span class=\"tag\">&gt;<\/span>\r\n\r\n      <span class=\"tag\">&lt;h1&gt;<\/span><span class=\"pln\">Converter voz para texto<\/span><span class=\"tag\">&lt;\/h1&gt;<\/span> \r\n      <span class=\"tag\">&lt;img<\/span> <span class=\"atn\">src<\/span><span class=\"pun\">=<\/span><span class=\"atv\">\"https:\/\/www.iconpacks.net\/icons\/1\/free-microphone-icon-342-thumb.png\"<\/span> <span class=\"atn\">width<\/span><span class=\"pun\">=<\/span><span class=\"atv\">\"25px\"<\/span> <span class=\"tag\">\/&gt;<\/span>\r\n      \r\n      <span class=\"tag\">&lt;button<\/span> <span class=\"atn\">class<\/span><span class=\"pun\">=<\/span><span class=\"atv\">\"btn btn-success\"<\/span> <span class=\"atn\">id<\/span><span class=\"pun\">=<\/span><span class=\"atv\">\"btnStart\"<\/span><span class=\"tag\">&gt;<\/span><span class=\"pln\">Iniciar<\/span><span class=\"tag\">&lt;\/button&gt;<\/span>      \r\n      <span class=\"tag\">&lt;button<\/span> <span class=\"atn\">class<\/span><span class=\"pun\">=<\/span><span class=\"atv\">\"btn btn-danger\"<\/span> <span class=\"atn\">id<\/span><span class=\"pun\">=<\/span><span class=\"atv\">\"btnStop\"<\/span><span class=\"tag\">&gt;<\/span><span class=\"pln\">Parar<\/span><span class=\"tag\">&lt;\/button&gt;<\/span>      \r\n      \r\n   <span class=\"tag\">&lt;\/div&gt;<\/span>     \r\n      \r\n   <span class=\"tag\">&lt;p&gt;<\/span><span class=\"pln\">\r\n   Corpo do texto:  \r\n   <\/span><span class=\"tag\">&lt;\/p&gt;<\/span>   \r\n      \r\n   <span class=\"tag\">&lt;div<\/span> <span class=\"atn\">class<\/span><span class=\"pun\">=<\/span><span class=\"atv\">\"texto\"<\/span> <span class=\"atn\">style<\/span><span class=\"pun\">=<\/span><span class=\"atv\">\"<\/span><span class=\"pln\">padding<\/span><span class=\"pun\">:<\/span><span class=\"lit\">20px<\/span><span class=\"atv\">\"<\/span><span class=\"tag\">&gt;<\/span>    \r\n   <span class=\"tag\">&lt;\/div&gt;<\/span>  <\/code><\/pre>\n<p style=\"text-align: justify;\">Aten\u00e7\u00e3o para os dois bot\u00f5es, que iram iniciar e para a captura do microfone. Teremos um resultado parecido com isso:<\/p>\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-16953 aligncenter\" src=\"https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/08\/post1.png\" sizes=\"auto, (max-width: 466px) 100vw, 466px\" srcset=\"https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/08\/post1.png 466w, https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/08\/post1-300x171.png 300w\" alt=\"\" width=\"466\" height=\"265\"\/><\/figure>\n<p style=\"text-align: justify;\">Agora vamos para nosso c\u00f3digo java script.<\/p>\n<pre class=\"wp-block-code prettyprinted\"><code class=\" prettyprinted\">\r\n<span class=\"com\">\/\/ cria as constantes que referencia os bot\u00f5es e a \u00e1rea de texto onde iremos transcrever o \u00e1udio<\/span>\r\n<span class=\"kwd\">const<\/span><span class=\"pln\"> texto <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> document<\/span><span class=\"pun\">.<\/span><span class=\"pln\">querySelector<\/span><span class=\"pun\">(<\/span><span class=\"str\">\".texto\"<\/span><span class=\"pun\">);<\/span>\r\n<span class=\"kwd\">const<\/span><span class=\"pln\"> btnStart <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> document<\/span><span class=\"pun\">.<\/span><span class=\"pln\">querySelector<\/span><span class=\"pun\">(<\/span><span class=\"str\">\"#btnStart\"<\/span><span class=\"pun\">);<\/span>\r\n<span class=\"kwd\">const<\/span><span class=\"pln\"> btnStop <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> document<\/span><span class=\"pun\">.<\/span><span class=\"pln\">querySelector<\/span><span class=\"pun\">(<\/span><span class=\"str\">\"#btnStop\"<\/span><span class=\"pun\">);<\/span>\r\n\r\n<span class=\"com\">\/\/ configurar o webkit de reconhecimento de fala<\/span><span class=\"pln\">\r\nwindow<\/span><span class=\"pun\">.<\/span><span class=\"typ\">SpeechRecognition<\/span> <span class=\"pun\">=<\/span><span class=\"pln\"> window<\/span><span class=\"pun\">.<\/span><span class=\"typ\">SpeechRecognition<\/span> <span class=\"pun\">||<\/span><span class=\"pln\"> window<\/span><span class=\"pun\">.<\/span><span class=\"pln\">webkitSpeechRecognition<\/span><span class=\"pun\">;<\/span>\r\n<span class=\"kwd\">const<\/span><span class=\"pln\"> recognition <\/span><span class=\"pun\">=<\/span> <span class=\"kwd\">new<\/span> <span class=\"typ\">SpeechRecognition<\/span><span class=\"pun\">();<\/span><span class=\"pln\">\r\nrecognition<\/span><span class=\"pun\">.<\/span><span class=\"pln\">interimResults <\/span><span class=\"pun\">=<\/span> <span class=\"kwd\">true<\/span><span class=\"pun\">;<\/span><span class=\"pln\">\r\nrecognition<\/span><span class=\"pun\">.<\/span><span class=\"pln\">lang <\/span><span class=\"pun\">=<\/span> <span class=\"str\">\"pt-BR\"<\/span><span class=\"pun\">;<\/span>\r\n\r\n<span class=\"com\">\/\/ criando uma nova tag p<\/span>\r\n<span class=\"kwd\">let<\/span><span class=\"pln\"> p <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> document<\/span><span class=\"pun\">.<\/span><span class=\"pln\">createElement<\/span><span class=\"pun\">(<\/span><span class=\"str\">\"p\"<\/span><span class=\"pun\">);<\/span><\/code><\/pre>\n<p style=\"text-align: justify;\">Um ponto importante, at\u00e9 aqui \u00e9 definir os resultados provis\u00f3rios como verdadeiro ( recognition.interimResults = true; ). Os resultados provis\u00f3rios visto nesta linha nos permitem obter os resultados quando falamos, ent\u00e3o \u00e9 algo como em tempo real. Se definirmos como false, ele simplesmente esperar\u00e1 at\u00e9 terminarmos de falar e retornar\u00e1 o resultado, mas para este tutorial, queremos ter nossos resultados enquanto falamos.<\/p>\n<p style=\"text-align: justify;\">Seguimos agora com um bloco de c\u00f3digo onde vamos monitorar o nosso reconhecimento de voz.<\/p>\n<pre class=\"wp-block-code prettyprinted\"><code class=\" prettyprinted\"><span class=\"com\">\/\/ crie um ouvinte de eventos para nosso reconhecimento<\/span><span class=\"pln\">\r\nrecognition<\/span><span class=\"pun\">.<\/span><span class=\"pln\">addEventListener<\/span><span class=\"pun\">(<\/span><span class=\"str\">\"result\"<\/span><span class=\"pun\">,<\/span> <span class=\"pun\">(<\/span><span class=\"pln\">e<\/span><span class=\"pun\">)<\/span> <span class=\"pun\">=&gt;<\/span> <span class=\"pun\">{<\/span>\r\n  <span class=\"com\">\/\/ mapeamento atrav\u00e9s da lista de fala para juntar palavras<\/span>\r\n  <span class=\"kwd\">const<\/span><span class=\"pln\"> text <\/span><span class=\"pun\">=<\/span> <span class=\"typ\">Array<\/span><span class=\"pun\">.<\/span><span class=\"kwd\">from<\/span><span class=\"pun\">(<\/span><span class=\"pln\">e<\/span><span class=\"pun\">.<\/span><span class=\"pln\">results<\/span><span class=\"pun\">)<\/span>\r\n    <span class=\"pun\">.<\/span><span class=\"pln\">map<\/span><span class=\"pun\">((<\/span><span class=\"pln\">result<\/span><span class=\"pun\">)<\/span> <span class=\"pun\">=&gt;<\/span><span class=\"pln\"> result<\/span><span class=\"pun\">[<\/span><span class=\"lit\">0<\/span><span class=\"pun\">])<\/span>\r\n    <span class=\"pun\">.<\/span><span class=\"pln\">map<\/span><span class=\"pun\">((<\/span><span class=\"pln\">result<\/span><span class=\"pun\">)<\/span> <span class=\"pun\">=&gt;<\/span><span class=\"pln\"> result<\/span><span class=\"pun\">.<\/span><span class=\"pln\">transcript<\/span><span class=\"pun\">)<\/span>\r\n    <span class=\"pun\">.<\/span><span class=\"kwd\">join<\/span><span class=\"pun\">(<\/span><span class=\"str\">\"\"<\/span><span class=\"pun\">);<\/span>\r\n \r\n\r\n  <span class=\"com\">\/\/ para iniciar um novo par\u00e1grafo<\/span>\r\n  <span class=\"kwd\">if<\/span> <span class=\"pun\">(<\/span><span class=\"pln\">e<\/span><span class=\"pun\">.<\/span><span class=\"pln\">results<\/span><span class=\"pun\">[<\/span><span class=\"lit\">0<\/span><span class=\"pun\">].<\/span><span class=\"pln\">isFinal<\/span><span class=\"pun\">)<\/span> <span class=\"pun\">{<\/span>\r\n    \r\n    <span class=\"kwd\">let<\/span><span class=\"pln\"> isCommand <\/span><span class=\"pun\">=<\/span> <span class=\"kwd\">false<\/span><span class=\"pun\">;<\/span>\r\n\r\n    <span class=\"com\">\/\/ aqui vamos testar criar nosso camando por voz<\/span>\r\n    <span class=\"kwd\">if<\/span> <span class=\"pun\">(<\/span><span class=\"pln\">text<\/span><span class=\"pun\">.<\/span><span class=\"pln\">includes<\/span><span class=\"pun\">(<\/span><span class=\"str\">\"Hora Certa\"<\/span><span class=\"pun\">)<\/span> <span class=\"pun\">||<\/span><span class=\"pln\"> text<\/span><span class=\"pun\">.<\/span><span class=\"pln\">includes<\/span><span class=\"pun\">(<\/span><span class=\"str\">\"hora certa\"<\/span><span class=\"pun\">)<\/span> <span class=\"pun\">)<\/span> <span class=\"pun\">{<\/span><span class=\"pln\">\r\n      \r\n      isCommand <\/span><span class=\"pun\">=<\/span> <span class=\"kwd\">true<\/span><span class=\"pun\">;<\/span>\r\n      \r\n      <span class=\"com\">\/\/ Obtem a hora atual<\/span>\r\n      <span class=\"kwd\">var<\/span><span class=\"pln\"> data <\/span><span class=\"pun\">=<\/span> <span class=\"kwd\">new<\/span> <span class=\"typ\">Date<\/span><span class=\"pun\">();<\/span>\r\n      \r\n      <span class=\"kwd\">var<\/span><span class=\"pln\"> hora    <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> data<\/span><span class=\"pun\">.<\/span><span class=\"pln\">getHours<\/span><span class=\"pun\">();<\/span>          \r\n      <span class=\"kwd\">var<\/span><span class=\"pln\"> min     <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> data<\/span><span class=\"pun\">.<\/span><span class=\"pln\">getMinutes<\/span><span class=\"pun\">();<\/span>        \r\n      <span class=\"kwd\">var<\/span><span class=\"pln\"> seg     <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> data<\/span><span class=\"pun\">.<\/span><span class=\"pln\">getSeconds<\/span><span class=\"pun\">();<\/span>        \r\n           \r\n\r\n      <span class=\"kwd\">var<\/span><span class=\"pln\"> str_hora <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> hora <\/span><span class=\"pun\">+<\/span> <span class=\"str\">':'<\/span> <span class=\"pun\">+<\/span><span class=\"pln\"> min <\/span><span class=\"pun\">+<\/span> <span class=\"str\">':'<\/span> <span class=\"pun\">+<\/span><span class=\"pln\"> seg<\/span><span class=\"pun\">;<\/span>\r\n      <span class=\"com\">\/\/ Mostra o resultado<\/span><span class=\"pln\">\r\n      alert<\/span><span class=\"pun\">(<\/span><span class=\"str\">'Hora certa: '<\/span> <span class=\"pun\">+<\/span><span class=\"pln\"> str_hora<\/span><span class=\"pun\">);<\/span>\r\n      \r\n    <span class=\"pun\">}<\/span>\r\n    <span class=\"kwd\">if<\/span> <span class=\"pun\">(<\/span><span class=\"pln\">text<\/span><span class=\"pun\">.<\/span><span class=\"pln\">includes<\/span><span class=\"pun\">(<\/span><span class=\"str\">\"Abrir YouTube\"<\/span><span class=\"pun\">)<\/span> <span class=\"pun\">||<\/span><span class=\"pln\"> text<\/span><span class=\"pun\">.<\/span><span class=\"pln\">includes<\/span><span class=\"pun\">(<\/span><span class=\"str\">\"abrir youtube\"<\/span><span class=\"pun\">)<\/span> <span class=\"pun\">)<\/span> <span class=\"pun\">{<\/span><span class=\"pln\">      \r\n      isCommand <\/span><span class=\"pun\">=<\/span> <span class=\"kwd\">true<\/span><span class=\"pun\">;<\/span><span class=\"pln\">    \r\n      window<\/span><span class=\"pun\">.<\/span><span class=\"pln\">open<\/span><span class=\"pun\">(<\/span><span class=\"str\">'https:\/\/youtube.com\/'<\/span><span class=\"pun\">,<\/span> <span class=\"str\">'_blank'<\/span><span class=\"pun\">);<\/span>              \r\n    <span class=\"pun\">}<\/span>    \r\n    \r\n    <span class=\"kwd\">if<\/span><span class=\"pun\">(!<\/span><span class=\"pln\">isCommand<\/span><span class=\"pun\">){<\/span>\r\n    \t<span class=\"com\">\/\/ se n\u00e3o houve identifica\u00e7\u00e3o de algum comando escreve o texto na \u00e1rea esperada<\/span><span class=\"pln\">\r\n    \tp<\/span><span class=\"pun\">.<\/span><span class=\"pln\">innerText <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> text<\/span><span class=\"pun\">;<\/span><span class=\"pln\">\r\n    \ttexto<\/span><span class=\"pun\">.<\/span><span class=\"pln\">appendChild<\/span><span class=\"pun\">(<\/span><span class=\"pln\">p<\/span><span class=\"pun\">);<\/span>  \r\n    <span class=\"pun\">}<\/span>\r\n    <span class=\"com\">\/\/ recria o par\u00e1grafo    <\/span><span class=\"pln\">\r\n    p <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> document<\/span><span class=\"pun\">.<\/span><span class=\"pln\">createElement<\/span><span class=\"pun\">(<\/span><span class=\"str\">\"p\"<\/span><span class=\"pun\">);<\/span>\r\n    \r\n  <span class=\"pun\">}<\/span>\r\n<span class=\"pun\">});<\/span><\/code><\/pre>\n<p style=\"text-align: justify;\">Neste bloco, a cada consolida\u00e7\u00e3o de um par\u00e1grafo vamos testar se foi falado algum dos nossos comandos que s\u00e3o: \u201cHora Certa\u201d e \u201cAbrir YouTube\u201d, que iram executar respectivamente a exibi\u00e7\u00e3o da hora atual e o outro ir\u00e1 abrir o YouTube em uma nova aba.<\/p>\n<p style=\"text-align: justify;\">Vamos finalizar nosso c\u00f3digo java script com a adi\u00e7\u00e3o dos eventos aos bot\u00f5es e a nossa inst\u00e2ncia do reconhecimento de fala.<\/p>\n<pre class=\"wp-block-code prettyprinted\"><code class=\" prettyprinted\"><span class=\"com\">\/\/ terminar a sess\u00e3o antiga para iniciar uma nova<\/span><span class=\"pln\">\r\nrecognition<\/span><span class=\"pun\">.<\/span><span class=\"pln\">addEventListener<\/span><span class=\"pun\">(<\/span><span class=\"str\">\"end\"<\/span><span class=\"pun\">,<\/span> <span class=\"pun\">()<\/span> <span class=\"pun\">=&gt;<\/span> <span class=\"pun\">{<\/span><span class=\"pln\">\r\n  recognition<\/span><span class=\"pun\">.<\/span><span class=\"pln\">start<\/span><span class=\"pun\">();<\/span>\r\n<span class=\"pun\">});<\/span><span class=\"pln\">\r\n\r\nbtnStart<\/span><span class=\"pun\">.<\/span><span class=\"pln\">addEventListener<\/span><span class=\"pun\">(<\/span><span class=\"str\">\"click\"<\/span><span class=\"pun\">,<\/span> <span class=\"pun\">()<\/span> <span class=\"pun\">=&gt;<\/span> <span class=\"pun\">{<\/span><span class=\"pln\">\r\n  recognition<\/span><span class=\"pun\">.<\/span><span class=\"pln\">start<\/span><span class=\"pun\">();<\/span>\r\n<span class=\"pun\">});<\/span><span class=\"pln\">\r\n\r\nbtnStop<\/span><span class=\"pun\">.<\/span><span class=\"pln\">addEventListener<\/span><span class=\"pun\">(<\/span><span class=\"str\">\"click\"<\/span><span class=\"pun\">,<\/span> <span class=\"pun\">()<\/span> <span class=\"pun\">=&gt;<\/span> <span class=\"pun\">{<\/span><span class=\"pln\">\r\n  recognition<\/span><span class=\"pun\">.<\/span><span class=\"pln\">abort<\/span><span class=\"pun\">();<\/span>\r\n<span class=\"pun\">});<\/span>  <\/code><\/pre>\n<p style=\"text-align: justify;\">Agora vamos testar nossa aplica\u00e7\u00e3o e ver os resultados.<\/p>\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-16956 aligncenter\" src=\"https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/08\/post2-1024x354.png\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" srcset=\"https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/08\/post2-1024x354.png 1024w, https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/08\/post2-300x104.png 300w, https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/08\/post2-768x265.png 768w, https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/08\/post2.png 1166w\" alt=\"\" width=\"1024\" height=\"354\"\/><\/figure>\n<p>Observe que nossa aplica\u00e7\u00e3o transcreveu nossa fala e ao falar \u201chora certa\u201d nosso sistema executou o comando esperado e exibiu o hor\u00e1rio atual.<\/p>\n<p>Agora vamos testar em um dispositivo m\u00f3vel.<\/p>\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-16957 aligncenter\" src=\"https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/08\/post3.png\" sizes=\"auto, (max-width: 331px) 100vw, 331px\" srcset=\"https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/08\/post3.png 733w, https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/08\/post3-300x226.png 300w\" alt=\"\" width=\"331\" height=\"249\"\/><\/figure>\n<p style=\"text-align: justify;\">Funcionando como esperado! Este foi apenas um exemplo simples, mas que demostra o reconhecimento de fala com Java script utilizando recursos nativos, a partir dai surgem possibilidades infinitas de aplica\u00e7\u00f5es que podem usufruir deste recurso, esperamos ter ajudado e siga nos para mais dicas como esta.<\/p>\n<p style=\"text-align: center;\">[<a href=\"javascript:history.go(-1)\">Voltar<\/a>]<\/p>\n","protected":false},"excerpt":{"rendered":"<p>A API Web Speech permite que aplica\u00e7\u00e3o web acessem o microfone e com isso nos possibilita o reconhecimento de fala, dai podemos transcrever em texto ou criar estruturas de comandos de voz.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[24],"tags":[],"class_list":["post-73000","post","type-post","status-publish","format-standard","hentry","category-informatica"],"_links":{"self":[{"href":"https:\/\/antonini.ddns.net\/index.php?rest_route=\/wp\/v2\/posts\/73000","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/antonini.ddns.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/antonini.ddns.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/antonini.ddns.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/antonini.ddns.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=73000"}],"version-history":[{"count":2,"href":"https:\/\/antonini.ddns.net\/index.php?rest_route=\/wp\/v2\/posts\/73000\/revisions"}],"predecessor-version":[{"id":73002,"href":"https:\/\/antonini.ddns.net\/index.php?rest_route=\/wp\/v2\/posts\/73000\/revisions\/73002"}],"wp:attachment":[{"href":"https:\/\/antonini.ddns.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=73000"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/antonini.ddns.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=73000"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/antonini.ddns.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=73000"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}