{"id":1589,"date":"2013-11-13T11:19:19","date_gmt":"2013-11-13T10:19:19","guid":{"rendered":"http:\/\/blog.modelical.com\/?p=82"},"modified":"2022-04-28T17:24:29","modified_gmt":"2022-04-28T15:24:29","slug":"precuelarevitapi","status":"publish","type":"post","link":"https:\/\/www.modelical.com\/es\/precuelarevitapi\/","title":{"rendered":"Revit API. Introducci\u00f3n II"},"content":{"rendered":"<h2>Programaci\u00f3n Orientada a Objetos<\/h2>\n<p>Hace ya alg\u00fan tiempo me aventur\u00e9 a dar los primeros pasos en la API de Revit. Como todo el mundo, comenc\u00e9 siguiendo el tutorial <a href=\"http:\/\/usa.autodesk.com\/adsk\/servlet\/index?siteID=123112&#038;id=16777469\">&#8220;My First Plug In&#8221;<\/a> en la p\u00e1gina de Autodesk. Hice el tutorial completo, vi los videos, le\u00ed la documentaci\u00f3n y mi p\u00e1nico ante la complejidad de la API creci\u00f3 unos cuantos puntos. \u00a0Teniendo en cuenta que ya dispon\u00eda de una considerable experiencia trabajando con Revit\u00a0\u00bfQu\u00e9 era lo que fallaba?<\/p>\n<p><img decoding=\"async\" width=\"400\" height=\"254\" class=\"aligncenter wp-image-4386 size-full\" alt=\"25054382\" src=\"https:\/\/www.modelical.com\/wp-content\/uploads\/2015\/11\/25054382.jpg\" \/><\/p>\n<p>Pues fallaba el dominio de la programaci\u00f3n orientada a objetos. Anteriormente hab\u00eda programado rutinas para resolver distintos tipos de problemas, pero nunca hab\u00eda trabajado con un lenguaje orientado a objetos. Por tanto, faltaba comprender lo que es una clase y lo que es un m\u00e9todo. Faltaba saber c\u00f3mo se estructura la informaci\u00f3n y las implicaciones que tiene definir un m\u00e9todo de una u otra manera. Por tanto, mi primer consejo para empezar a trabajar con la API de Revit es sencillo\u00a0pero ambicioso: Aprende a manejarte con la programaci\u00f3n orientada a objetos y, por supuesto, aprende a manejarte con Revit.<\/p>\n<p>Si ya conoces algo de programaci\u00f3n estructurada y eres capaz de definir bucles, crear subrutinas, etc, ya tienes mucho avanzado, s\u00f3lo deber\u00e1s acostumbrarte a la sintaxis del lenguaje que elijas (en el caso de la API de Revit C#.NET o VB.NET) y entender las reglas b\u00e1sicas de la programaci\u00f3n orientada a objetos. Yo me he decantado por C#, por lo que los ejemplos y explicaciones que se expongan aqu\u00ed estar\u00e1n programadas en este lenguaje. Uno de los conceptos principales de la programaci\u00f3n orientada a objetos es la clase. Una clase podr\u00eda definirse como un objeto. Por as\u00ed decirlo, es una manera de crear un\u00a0&#8220;contenedor de informaci\u00f3n&#8221; sobre ese objeto. La utilidad de esta forma de estructurar la informaci\u00f3n y la forma de manejarla, se ve mejor a trav\u00e9s de un sencillo ejemplo. Vamos a crear una clase que sea un punto en el espacio, llamada &#8220;Point3D&#8221;. La informaci\u00f3n b\u00e1sica de ese objeto son sus coordenadas (x,y,z), por lo que dentro de la clase se definen las tres variables.<\/p>\n<pre>    class Point3D\r\n    {\r\n        public double x;\r\n        public double y;\r\n        public double z;\r\n        }\r\n\r\n    }<\/pre>\n<p ><span style=\"line-height: 1.714285714; font-size: 1rem;\">Con esto, lo que hemos hecho es definir la estructura de un contenedor de puntos, de modo que ahora es posible crear un punto empleando la clase definida. Para ello, hay que &#8220;instanciar&#8221; la clase, que no es m\u00e1s que crear un punto objeto Point3D con nombre y apellidos:<\/span><\/p>\n<pre>    Point3D punto1 = new Point3D();<\/pre>\n<p style=\"text-align: justify;\">Una vez creado el ejemplar punto1, podemos dar valor a sus variables accediendo a ellas a trav\u00e9s del propio ejemplar escribiendo un punto y el nombre de la variable:<\/p>\n<pre> \r\n\tpunto1.x = 2.5;\r\n    punto1.y = 2.5;\r\n    punto1.z = 2.5;\r\n<\/pre>\n<p>Adem\u00e1s, dentro de una clase pueden definirse m\u00e9todos, que no son m\u00e1s que funciones relaticionadas al tipo de objeto que se ha creado. La definici\u00f3n de los m\u00e9todos se puede hacer de dos maneras:<\/p>\n<p>1.\u00a0Haciendo que la funci\u00f3n tenga que ser llamada desde un ejemplar concreto, esto quiere decir que en nuestro ejemplo el m\u00e9todo s\u00f3lo podr\u00eda ser llamada desde &#8220;punto1&#8221;. Ejemplo: punto1.MetodoQueQueremosUsar<\/p>\n<p>2. Haciendo que el m\u00e9todo pueda ser llamado desde la clase, sin necesidad de hacerlo desde una instancia. Para ello, deberemos incluir la palabra &#8220;static&#8221; en la declaraci\u00f3n del m\u00e9todo. Ejemplo:\u00a0Point3D.MetodoQueQueremosUsar<\/p>\n<p>En el siguiente bloque de c\u00f3digo se muestra la clase empleada como ejemplo m\u00e1s arriba, completada con la implementaci\u00f3n de un m\u00e9todo de cada tipo.<\/p>\n<pre>    \r\n\tclass Point3D\r\n    {\r\n        public double x;\r\n        public double y;\r\n        public double z;\r\n\r\n        public double Distance(Point3D p)\r\n        {\r\n            double d = Math.Sqrt(Math.Pow(x - p.x, 2) + Math.Pow(y - p.y, 2) + Math.Pow(z - p.z, 2));\r\n            return d;\r\n\r\n        }\r\n\r\n        public static Point3D MeanPoint(Point3D p1, Point3D p2)\r\n        {\r\n            Point3D meanP = new Point3D();\r\n\r\n            meanP.x = (p1.x+p2.x)\/2;\r\n            meanP.y = (p1.y+p2.y)\/2;\r\n            meanP.z = (p1.z+p2.z)\/2;\r\n\r\n            return meanP;\r\n\r\n        }\r\n\r\n    }\r\n<\/pre>\n<p>Como hemos dicho, en el primer caso para calcular la distancia de un punto p1 a un punto p2, deber\u00edamos llamar al m\u00e9todo desde uno de los puntos, por ejemplo: double dist = p1.Distance(p2);.<\/p>\n<p>Para emplear el segundo m\u00e9todo, bastar\u00eda con llamarlo desde la clase: double midPt = Point3D.MeanPoint(p1,p2);.<\/p>\n<p>Existe una gran cantidad de manuales de aprendizaje de C#, si vas a empezar de cero te recomiendo\u00a0\u00a0<a href=\"http:\/\/www.dummies.com\/how-to\/content\/c-2010-allinone-for-dummies.html\">C# 2010 All-In-One For Dummies<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Programaci\u00f3n Orientada a Objetos Hace ya alg\u00fan tiempo me aventur\u00e9 a dar los primeros pasos en la API de Revit. Como todo el mundo, comenc\u00e9 siguiendo el tutorial &#8220;My First Plug In&#8221; en la p\u00e1gina de Autodesk. Hice el tutorial completo, vi los videos, le\u00ed la documentaci\u00f3n y mi p\u00e1nico ante la complejidad de la [&hellip;]<\/p>\n","protected":false},"author":62,"featured_media":27207,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[704],"tags":[748,757],"class_list":["post-1589","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-guias","tag-tecnologia-c","tag-tecnologia-revit-api"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.9 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>[:en]Revit API. Introducci\u00f3n II - Modelical [:][:es]Revit API. Programaci\u00f3n Orientada a Objetos - Modelical [:]<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.modelical.com\/es\/precuelarevitapi\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"[:en]Revit API. Introducci\u00f3n II - Modelical [:][:es]Revit API. Programaci\u00f3n Orientada a Objetos - Modelical [:]\" \/>\n<meta property=\"og:description\" content=\"Programaci\u00f3n Orientada a Objetos Hace ya alg\u00fan tiempo me aventur\u00e9 a dar los primeros pasos en la API de Revit. Como todo el mundo, comenc\u00e9 siguiendo el tutorial &#8220;My First Plug In&#8221; en la p\u00e1gina de Autodesk. Hice el tutorial completo, vi los videos, le\u00ed la documentaci\u00f3n y mi p\u00e1nico ante la complejidad de la [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.modelical.com\/es\/precuelarevitapi\/\" \/>\n<meta property=\"og:site_name\" content=\"Modelical\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Modelical\/\" \/>\n<meta property=\"article:published_time\" content=\"2013-11-13T10:19:19+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-04-28T15:24:29+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.modelical.com\/wp-content\/uploads\/Posts_45_RevitApi.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"600\" \/>\n\t<meta property=\"og:image:height\" content=\"375\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Javier Gimenez Vila\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@modelical\" \/>\n<meta name=\"twitter:site\" content=\"@modelical\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Javier Gimenez Vila\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.modelical.com\\\/es\\\/precuelarevitapi\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.modelical.com\\\/es\\\/precuelarevitapi\\\/\"},\"author\":{\"name\":\"Javier Gimenez Vila\",\"@id\":\"https:\\\/\\\/www.modelical.com\\\/es\\\/#\\\/schema\\\/person\\\/aa5c84e0a8d9a65825c686c813c16346\"},\"headline\":\"Revit API. Introducci\u00f3n II\",\"datePublished\":\"2013-11-13T10:19:19+00:00\",\"dateModified\":\"2022-04-28T15:24:29+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.modelical.com\\\/es\\\/precuelarevitapi\\\/\"},\"wordCount\":682,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/www.modelical.com\\\/es\\\/precuelarevitapi\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.modelical.com\\\/wp-content\\\/uploads\\\/2013\\\/11\\\/RevitAPI-IntroduccionII-400x250-1.png\",\"keywords\":[\"Tec C#\",\"Tec Revit Api\"],\"articleSection\":[\"Guias\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.modelical.com\\\/es\\\/precuelarevitapi\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.modelical.com\\\/es\\\/precuelarevitapi\\\/\",\"url\":\"https:\\\/\\\/www.modelical.com\\\/es\\\/precuelarevitapi\\\/\",\"name\":\"[:en]Revit API. Introducci\u00f3n II - Modelical [:][:es]Revit API. Programaci\u00f3n Orientada a Objetos - Modelical [:]\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.modelical.com\\\/es\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.modelical.com\\\/es\\\/precuelarevitapi\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.modelical.com\\\/es\\\/precuelarevitapi\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.modelical.com\\\/wp-content\\\/uploads\\\/2013\\\/11\\\/RevitAPI-IntroduccionII-400x250-1.png\",\"datePublished\":\"2013-11-13T10:19:19+00:00\",\"dateModified\":\"2022-04-28T15:24:29+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.modelical.com\\\/es\\\/#\\\/schema\\\/person\\\/aa5c84e0a8d9a65825c686c813c16346\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.modelical.com\\\/es\\\/precuelarevitapi\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/www.modelical.com\\\/es\\\/precuelarevitapi\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.modelical.com\\\/wp-content\\\/uploads\\\/2013\\\/11\\\/RevitAPI-IntroduccionII-400x250-1.png\",\"contentUrl\":\"https:\\\/\\\/www.modelical.com\\\/wp-content\\\/uploads\\\/2013\\\/11\\\/RevitAPI-IntroduccionII-400x250-1.png\",\"width\":400,\"height\":250},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.modelical.com\\\/es\\\/#website\",\"url\":\"https:\\\/\\\/www.modelical.com\\\/es\\\/\",\"name\":\"Modelical\",\"description\":\"We build information\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.modelical.com\\\/es\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.modelical.com\\\/es\\\/#\\\/schema\\\/person\\\/aa5c84e0a8d9a65825c686c813c16346\",\"name\":\"Javier Gimenez Vila\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/e7bf2aa96ec5fbb01291216adddb0f852224296cc43a4d6f1d4cf01175725a64?s=96&d=initials&r=g&initials=ja\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/e7bf2aa96ec5fbb01291216adddb0f852224296cc43a4d6f1d4cf01175725a64?s=96&d=initials&r=g&initials=ja\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/e7bf2aa96ec5fbb01291216adddb0f852224296cc43a4d6f1d4cf01175725a64?s=96&d=initials&r=g&initials=ja\",\"caption\":\"Javier Gimenez Vila\"},\"url\":\"https:\\\/\\\/www.modelical.com\\\/es\\\/author\\\/javi\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"[:en]Revit API. Introducci\u00f3n II - Modelical [:][:es]Revit API. Programaci\u00f3n Orientada a Objetos - Modelical [:]","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.modelical.com\/es\/precuelarevitapi\/","og_locale":"es_ES","og_type":"article","og_title":"[:en]Revit API. Introducci\u00f3n II - Modelical [:][:es]Revit API. Programaci\u00f3n Orientada a Objetos - Modelical [:]","og_description":"Programaci\u00f3n Orientada a Objetos Hace ya alg\u00fan tiempo me aventur\u00e9 a dar los primeros pasos en la API de Revit. Como todo el mundo, comenc\u00e9 siguiendo el tutorial &#8220;My First Plug In&#8221; en la p\u00e1gina de Autodesk. Hice el tutorial completo, vi los videos, le\u00ed la documentaci\u00f3n y mi p\u00e1nico ante la complejidad de la [&hellip;]","og_url":"https:\/\/www.modelical.com\/es\/precuelarevitapi\/","og_site_name":"Modelical","article_publisher":"https:\/\/www.facebook.com\/Modelical\/","article_published_time":"2013-11-13T10:19:19+00:00","article_modified_time":"2022-04-28T15:24:29+00:00","og_image":[{"width":600,"height":375,"url":"https:\/\/www.modelical.com\/wp-content\/uploads\/Posts_45_RevitApi.jpg","type":"image\/jpeg"}],"author":"Javier Gimenez Vila","twitter_card":"summary_large_image","twitter_creator":"@modelical","twitter_site":"@modelical","twitter_misc":{"Escrito por":"Javier Gimenez Vila","Tiempo de lectura":"4 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.modelical.com\/es\/precuelarevitapi\/#article","isPartOf":{"@id":"https:\/\/www.modelical.com\/es\/precuelarevitapi\/"},"author":{"name":"Javier Gimenez Vila","@id":"https:\/\/www.modelical.com\/es\/#\/schema\/person\/aa5c84e0a8d9a65825c686c813c16346"},"headline":"Revit API. Introducci\u00f3n II","datePublished":"2013-11-13T10:19:19+00:00","dateModified":"2022-04-28T15:24:29+00:00","mainEntityOfPage":{"@id":"https:\/\/www.modelical.com\/es\/precuelarevitapi\/"},"wordCount":682,"commentCount":0,"image":{"@id":"https:\/\/www.modelical.com\/es\/precuelarevitapi\/#primaryimage"},"thumbnailUrl":"https:\/\/www.modelical.com\/wp-content\/uploads\/2013\/11\/RevitAPI-IntroduccionII-400x250-1.png","keywords":["Tec C#","Tec Revit Api"],"articleSection":["Guias"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.modelical.com\/es\/precuelarevitapi\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.modelical.com\/es\/precuelarevitapi\/","url":"https:\/\/www.modelical.com\/es\/precuelarevitapi\/","name":"[:en]Revit API. Introducci\u00f3n II - Modelical [:][:es]Revit API. Programaci\u00f3n Orientada a Objetos - Modelical [:]","isPartOf":{"@id":"https:\/\/www.modelical.com\/es\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.modelical.com\/es\/precuelarevitapi\/#primaryimage"},"image":{"@id":"https:\/\/www.modelical.com\/es\/precuelarevitapi\/#primaryimage"},"thumbnailUrl":"https:\/\/www.modelical.com\/wp-content\/uploads\/2013\/11\/RevitAPI-IntroduccionII-400x250-1.png","datePublished":"2013-11-13T10:19:19+00:00","dateModified":"2022-04-28T15:24:29+00:00","author":{"@id":"https:\/\/www.modelical.com\/es\/#\/schema\/person\/aa5c84e0a8d9a65825c686c813c16346"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.modelical.com\/es\/precuelarevitapi\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.modelical.com\/es\/precuelarevitapi\/#primaryimage","url":"https:\/\/www.modelical.com\/wp-content\/uploads\/2013\/11\/RevitAPI-IntroduccionII-400x250-1.png","contentUrl":"https:\/\/www.modelical.com\/wp-content\/uploads\/2013\/11\/RevitAPI-IntroduccionII-400x250-1.png","width":400,"height":250},{"@type":"WebSite","@id":"https:\/\/www.modelical.com\/es\/#website","url":"https:\/\/www.modelical.com\/es\/","name":"Modelical","description":"We build information","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.modelical.com\/es\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Person","@id":"https:\/\/www.modelical.com\/es\/#\/schema\/person\/aa5c84e0a8d9a65825c686c813c16346","name":"Javier Gimenez Vila","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/secure.gravatar.com\/avatar\/e7bf2aa96ec5fbb01291216adddb0f852224296cc43a4d6f1d4cf01175725a64?s=96&d=initials&r=g&initials=ja","url":"https:\/\/secure.gravatar.com\/avatar\/e7bf2aa96ec5fbb01291216adddb0f852224296cc43a4d6f1d4cf01175725a64?s=96&d=initials&r=g&initials=ja","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/e7bf2aa96ec5fbb01291216adddb0f852224296cc43a4d6f1d4cf01175725a64?s=96&d=initials&r=g&initials=ja","caption":"Javier Gimenez Vila"},"url":"https:\/\/www.modelical.com\/es\/author\/javi\/"}]}},"_links":{"self":[{"href":"https:\/\/www.modelical.com\/es\/wp-json\/wp\/v2\/posts\/1589","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.modelical.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.modelical.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.modelical.com\/es\/wp-json\/wp\/v2\/users\/62"}],"replies":[{"embeddable":true,"href":"https:\/\/www.modelical.com\/es\/wp-json\/wp\/v2\/comments?post=1589"}],"version-history":[{"count":0,"href":"https:\/\/www.modelical.com\/es\/wp-json\/wp\/v2\/posts\/1589\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.modelical.com\/es\/wp-json\/wp\/v2\/media\/27207"}],"wp:attachment":[{"href":"https:\/\/www.modelical.com\/es\/wp-json\/wp\/v2\/media?parent=1589"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.modelical.com\/es\/wp-json\/wp\/v2\/categories?post=1589"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.modelical.com\/es\/wp-json\/wp\/v2\/tags?post=1589"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}