{"id":5959,"date":"2019-12-27T12:25:41","date_gmt":"2019-12-27T12:25:41","guid":{"rendered":"https:\/\/max-drake.cc\/?p=5959"},"modified":"2022-03-28T04:56:04","modified_gmt":"2022-03-28T04:56:04","slug":"pyrevit-first-tutorial-part-1","status":"publish","type":"post","link":"https:\/\/max-drake.cc\/?p=5959","title":{"rendered":"PyRevit first tutorial- Part 1"},"content":{"rendered":"\n<p>After AutoCad, that had LISP, where you could write some simple code and get some useful tailored tools that helped your efficiency, I find Revit tailoring a lot more difficult. It is more sophisticated and so programatically there are more challenges, so the code needs to be a bit more complex, but some simple Keyboard Shortcuts to change colours\/linetypes to your personal pre-sets would be handy. I personally like Keyboard shortcuts as I don&#8217;t have to move the mouse from its location in the model space to get something from a pulldown menu. <\/p>\n\n\n\n<h4 class=\"wp-block-heading\">PyRevit<\/h4>\n\n\n\n<p>I&#8217;ve used the PyRevit Add-in for a while, the Pattern app I found really good on a project i was working on, I used it for a tile layout and loved it. <\/p>\n\n\n\n<p>I&#8217;ve made a couple of attempts to go through Ehsan Iran-Nejad&#8217;s PyRevit tutorials but was a bit blown away by them, only getting as far as t2nd tutorial. This time I perservered and also didn&#8217;t skip through them as I normally do. I am really impressed with the thought that has gone into this tool and just how adaptable it is. I highly recomment you watch the videos in the order that he has created them. He has a bit of a halting style but if you listen to what he is saying <em>(I couldn&#8217;t grasp some of the issues the first couple of times I watched the videos<\/em>) You&#8217;ll be richly rewarded with a comprehensive overview of both the Python, Revit, Revit API and coding methods that , this time around for me, make such a lot of sense. <\/p>\n\n\n\n\n  <!DOCTYPE html><html> <head><meta http-equiv=\"content-type\" content=\"text\/html; charset=\"> \n    <\/head> <body> <div class=\"su-box su-box-style-glass\" id=\"\" style=\"border-color:#0f5897;border-radius:5px;max-width:none\"><div class=\"su-box-title\" style=\"background-color:#428bca;color:#FFFFFF;border-top-left-radius:3px;border-top-right-radius:3px\">PowerKey4Revit                               Free 30 day Trial<\/div><div class=\"su-box-content su-u-clearfix su-u-trim\" style=\"border-bottom-left-radius:3px;border-bottom-right-radius:3px\">\n\t<div class=\"su-list\" style=\"margin-left:0px\">\n<ul>\n<li><i class=\"sui sui-star\" style=\"color:#428bca\"><\/i> Speed up the tedious stuff and enjoy designing and documentation more<\/li>\n \t<li><i class=\"sui sui-star\" style=\"color:#428bca\"><\/i> Works in all versions of Revit<\/li>\n<li><i class=\"sui sui-star\" style=\"color:#428bca\"><\/i> Information to PROVE your increased speed<\/li>\n<\/ul>\n<\/div>\n\t\n\t<a href=\"https:\/\/datacapture.tk\" class=\"su-button su-button-style-glass\" style=\"color:#FFFFFF;background-color:#428bca;border-color:#3570a2;border-radius:6px\" target=\"_blank\" rel=\"noopener noreferrer\"><span style=\"color:#FFFFFF;padding:0px 18px;font-size:14px;line-height:28px;border-color:#7baeda;border-radius:6px;text-shadow:none\"> PowerKey4Revit Free 30 day Trial<\/span><\/a>\n<div class=\"su-spacer\" style=\"height:20px\"><\/div> \n\t\n<div class=\"su-spoiler su-spoiler-style-modern-light su-spoiler-icon-plus-circle my-custom-spoiler su-spoiler-closed\" data-scroll-offset=\"0\" data-anchor-in-url=\"no\"><div class=\"su-spoiler-title\" tabindex=\"0\" role=\"button\"><span class=\"su-spoiler-icon\"><\/span>PowerKey4Revit VIDEO <\/div><div class=\"su-spoiler-content su-u-clearfix su-u-trim\"><div class=\"su-youtube su-u-responsive-media-yes\"><iframe width=\"600\" height=\"400\" data-src=\"https:\/\/www.youtube.com\/embed\/1eFJAzWhOLU?\" frameborder=\"0\" allowfullscreen allow=\"autoplay; encrypted-media; picture-in-picture\" title=\"\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" data-load-mode=\"1\"><\/iframe><\/div><\/div><\/div>\n\t\t<\/div><\/div><\/body> <\/html>\n\n\n\n<p>Here is link to the <strong><a href=\"https:\/\/www.youtube.com\/watch?v=vsXsc2PYLCU&amp;list=PLc_1PNcpnV5742XyF8z7xyL9OF8XJNYnv\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"tutorial playlist (opens in a new tab)\">tutorial playlist<\/a><\/strong>.<\/p>\n\n\n\n<p>Maybe this time around I can actually do something that I want to do, as far as coding goes. <\/p>\n\n\n\n<h4 class=\"wp-block-heading\">C#<\/h4>\n\n\n\n<p>First off, C#. I did try and do some C# programming and did a few MicroSoft Courses on the subject. At the end of a lot of experimenting I only got one bit of code to partially run, so not a great success. Due to the lack of success I sort of stopped doing it. I also paid\/downloaded a book and tried to follow on with that tutorial.<\/p>\n\n\n\n<p>You need to compile the code, create a .DLL and then load that somewhere where Revit can find it before you can Test\/Run it. A bit of a tedious method when testing a bit of code. <\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Python<\/h4>\n\n\n\n<p>Python I have used successfully for a 360 Panorama setup, and once that process was developed it worked very smoothly.  I&#8217;ve done a few tutorials with Python and go to monthly Python meetups in Wellington. They do some cool stuff in Python and its pretty versatile. <\/p>\n\n\n\n<p>So using Python as an interface is something I&#8217;m more comfortable with. But it does distance you from the Revit API as that is based on C#, C++ or VB, so all Microsoft oriented programmes. So there is a bit of an interface issue in that all the API doc info is written around using  C#, C++ or VB.<\/p>\n\n\n\n<p>On the positive side, you don&#8217;t need to compile it, like you do with C# for Revit API. So you can alter the code , use the  Interactive  Python Shell Add-in to Revit:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"544\" height=\"270\" data-src=\"https:\/\/max-drake.cc\/wp-content\/uploads\/2019\/12\/2019-12-28-12_17_37-Autodesk-Revit-2015-3D-View_-3D-Process-20191006.rvt_.jpg\" alt=\"\" class=\"wp-image-5960 lazyload\" data-srcset=\"https:\/\/max-drake.cc\/wp-content\/uploads\/2019\/12\/2019-12-28-12_17_37-Autodesk-Revit-2015-3D-View_-3D-Process-20191006.rvt_.jpg 544w, https:\/\/max-drake.cc\/wp-content\/uploads\/2019\/12\/2019-12-28-12_17_37-Autodesk-Revit-2015-3D-View_-3D-Process-20191006.rvt_-300x149.jpg 300w, https:\/\/max-drake.cc\/wp-content\/uploads\/2019\/12\/2019-12-28-12_17_37-Autodesk-Revit-2015-3D-View_-3D-Process-20191006.rvt_-100x50.jpg 100w, https:\/\/max-drake.cc\/wp-content\/uploads\/2019\/12\/2019-12-28-12_17_37-Autodesk-Revit-2015-3D-View_-3D-Process-20191006.rvt_-201x100.jpg 201w\" data-sizes=\"(max-width: 544px) 100vw, 544px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 544px; --smush-placeholder-aspect-ratio: 544\/270;\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"869\" height=\"712\" data-src=\"https:\/\/max-drake.cc\/wp-content\/uploads\/2019\/12\/2019-12-28-12_18_03-Autodesk-Revit-2015-3D-View_-3D-Process-20191006.rvt_.jpg\" alt=\"\" class=\"wp-image-5961 lazyload\" data-srcset=\"https:\/\/max-drake.cc\/wp-content\/uploads\/2019\/12\/2019-12-28-12_18_03-Autodesk-Revit-2015-3D-View_-3D-Process-20191006.rvt_.jpg 869w, https:\/\/max-drake.cc\/wp-content\/uploads\/2019\/12\/2019-12-28-12_18_03-Autodesk-Revit-2015-3D-View_-3D-Process-20191006.rvt_-300x246.jpg 300w, https:\/\/max-drake.cc\/wp-content\/uploads\/2019\/12\/2019-12-28-12_18_03-Autodesk-Revit-2015-3D-View_-3D-Process-20191006.rvt_-768x629.jpg 768w, https:\/\/max-drake.cc\/wp-content\/uploads\/2019\/12\/2019-12-28-12_18_03-Autodesk-Revit-2015-3D-View_-3D-Process-20191006.rvt_-100x82.jpg 100w, https:\/\/max-drake.cc\/wp-content\/uploads\/2019\/12\/2019-12-28-12_18_03-Autodesk-Revit-2015-3D-View_-3D-Process-20191006.rvt_-122x100.jpg 122w, https:\/\/max-drake.cc\/wp-content\/uploads\/2019\/12\/2019-12-28-12_18_03-Autodesk-Revit-2015-3D-View_-3D-Process-20191006.rvt_-781x640.jpg 781w, https:\/\/max-drake.cc\/wp-content\/uploads\/2019\/12\/2019-12-28-12_18_03-Autodesk-Revit-2015-3D-View_-3D-Process-20191006.rvt_-640x524.jpg 640w\" data-sizes=\"(max-width: 869px) 100vw, 869px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 869px; --smush-placeholder-aspect-ratio: 869\/712;\" \/><\/figure>\n\n\n\n<p>And just test the code.  As  Ehsan say&#8217;s this is more of a test environment, where you can develop the code to do something, and if you wanted to make a commercial application then you can always re-write it in C# to compile. That being said, this is the level of access that I want ot use to test out ideas, and you can do it so quickly and responsively. <\/p>\n\n\n\n<h3 class=\"wp-block-heading\">PyRevit first tutorial: Getting all Wall Volume from Model<\/h3>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe title=\"Python for Revit: Basics of collecting data from Revit database\" width=\"678\" height=\"381\" data-src=\"https:\/\/www.youtube.com\/embed\/PfCn7OrY_-A?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" data-load-mode=\"1\"><\/iframe>\n<\/div><\/figure>\n\n\n\n<p>So I followed his tutorial above, and it all ran fine apart from I couldn&#8217;t get the:<\/p>\n\n\n\n<p><em>print(&#8220;Total wall volume is:()&#8221;.format(total_vol))<\/em> code all in one line working, so broke it down to  2 lines and it worked fine: <\/p>\n\n\n\n<p>print(&#8220;Total wall volume is:&#8221;)<br> print(total_vol) <\/p>\n\n\n\n<p>I must admit, most of the stuff in Python I&#8217;ve been doing has been in 3.4, so going back to 2.7 I know there are a couple of minor differences, one of them being<strong> print<\/strong>, so I may need to go and check on those.  <\/p>\n\n\n\n<h4 class=\"wp-block-heading\">AddinTab<\/h4>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe title=\"How to pyRevit: Adding a python tool to pyRevit\" width=\"678\" height=\"381\" data-src=\"https:\/\/www.youtube.com\/embed\/WJgmFkGHVPU?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" data-load-mode=\"1\"><\/iframe>\n<\/div><\/figure>\n\n\n\n<p>I then followed the next video on how to adding Python tools, both a tab and button to tab bar. This is so cool. Your own code in your own tab, so you can just go and hit the button. <\/p>\n\n\n\n<p>The other thing you can do is assign a Keyboard Shortcut to your button, so you can quickly access the tool via keys. This is such a handy way to test out your code. <\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Seeing other code by using ALT+ LeftMouseClick on button<\/h4>\n\n\n\n<p>A real issue I have is continuity. I follow the basic tutorial then flounder trying to do anything else. So its really helpful to be able to look at others code and see how they solved a problem, or a similar issue. This gives me a way forward to try and find a method for my solution. Its usually a hack, but it allows me to run something. If its useful I can always refine it later, if not, I just move on to something else. <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"431\" data-src=\"https:\/\/max-drake.cc\/wp-content\/uploads\/2019\/12\/2019-12-28-12_43_42-Autodesk-Revit-2015-3D-View_-3D-Process-20191006.rvt_-1024x431.jpg\" alt=\"\" class=\"wp-image-5962 lazyload\" data-srcset=\"https:\/\/max-drake.cc\/wp-content\/uploads\/2019\/12\/2019-12-28-12_43_42-Autodesk-Revit-2015-3D-View_-3D-Process-20191006.rvt_-1024x431.jpg 1024w, https:\/\/max-drake.cc\/wp-content\/uploads\/2019\/12\/2019-12-28-12_43_42-Autodesk-Revit-2015-3D-View_-3D-Process-20191006.rvt_-300x126.jpg 300w, https:\/\/max-drake.cc\/wp-content\/uploads\/2019\/12\/2019-12-28-12_43_42-Autodesk-Revit-2015-3D-View_-3D-Process-20191006.rvt_-768x323.jpg 768w, https:\/\/max-drake.cc\/wp-content\/uploads\/2019\/12\/2019-12-28-12_43_42-Autodesk-Revit-2015-3D-View_-3D-Process-20191006.rvt_-100x42.jpg 100w, https:\/\/max-drake.cc\/wp-content\/uploads\/2019\/12\/2019-12-28-12_43_42-Autodesk-Revit-2015-3D-View_-3D-Process-20191006.rvt_-238x100.jpg 238w, https:\/\/max-drake.cc\/wp-content\/uploads\/2019\/12\/2019-12-28-12_43_42-Autodesk-Revit-2015-3D-View_-3D-Process-20191006.rvt_-640x269.jpg 640w, https:\/\/max-drake.cc\/wp-content\/uploads\/2019\/12\/2019-12-28-12_43_42-Autodesk-Revit-2015-3D-View_-3D-Process-20191006.rvt_.jpg 1373w\" data-sizes=\"(max-width: 1024px) 100vw, 1024px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1024px; --smush-placeholder-aspect-ratio: 1024\/431;\" \/><\/figure>\n\n\n\n<p>So you can load some samples that others have, if they are useful, the hold Alt + Left mouse and open the location of that code and look at it, and experiment with it too. I think you need to put some sort of acknowlegement in of where you have got that information and acknowledging the creator of the code. <\/p>\n\n\n\n<h3 class=\"wp-block-heading\">The beauty of PyRevit extensions &amp; code- Copying\/adding to your own toolbar<\/h3>\n\n\n\n<p>So there is the PyRevit tab, and there are other extensions that you can find on Github, and there are a lot of examples of solutions that people have developed to meet some process in Revit. You can copy usdeful bits of their code and put them on your Ribbon Add-in so that you can use their tools, or adapt them to your own purpose. So there is a lot of generosity out there of people working in this environment. <\/p>\n\n\n\n<p>So this allows you to use the tools and practice with them to get familiar with them and understand how they have got to that solution.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Revit API documentation<\/h4>\n\n\n\n<p>In the tutorial video Ehsan points out a whole load of resources that he uses. The wbsite for the Revit API&#8217;s is a great one, <strong><a rel=\"noreferrer noopener\" aria-label=\"RevitApiDocs (opens in a new tab)\" href=\"https:\/\/www.revitapidocs.com\/\" target=\"_blank\">RevitApiDocs<\/a><\/strong><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">DataBases &amp; Transactions<\/h3>\n\n\n\n<p> Ehsan is a genius, I love his explanation of databases. I was familiar with CRUD but not ACID (although I&#8217;ve seen references to it), so the video below makes so much sense. <\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe title=\"Python for Revit: Revit document as a database\" width=\"678\" height=\"381\" data-src=\"https:\/\/www.youtube.com\/embed\/giVBwptFhpQ?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" data-load-mode=\"1\"><\/iframe>\n<\/div><\/figure>\n\n\n\n<p>Follwoing on from the Database explanation of the video above to then talk about Transactions in the video below is such a great lead-in to the subject, and I can understand the process and why it is used now. <\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe title=\"Python for Revit: Basics of Updating parameters and Deleting elements\" width=\"678\" height=\"381\" data-src=\"https:\/\/www.youtube.com\/embed\/UjfwCj1yS44?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" data-load-mode=\"1\"><\/iframe>\n<\/div><\/figure>\n\n\n\n<p>So my next goal is to be able to use it properly. Thank you Ehsan. <\/p>\n\n\n\n<h3 class=\"wp-block-heading\">End comment<\/h3>\n\n\n\n<p>A really amazing resource and lots of code that I can look at and hopefully learn from such that I can create some tools in Revit that I can use. <\/p>\n\n\n\n<p>I&#8217;m still trying to think of a colour selection tool, but that needs a bit of research. Maybe some simple Keyboard Shortcuts to some pre-sets woyuld be a good stepping stone. <\/p>\n\n\n\n<p>I really liked what <strong><a href=\"https:\/\/www.linkedin.com\/pulse\/why-how-i-do-pyrevit-anton-bondarchuk\/\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"Anton Bondarchuk has created with PyRevit (opens in a new tab)\">Anton Bondarchuk has created with PyRevit<\/a><\/strong>. <\/p>\n","protected":false},"excerpt":{"rendered":"<p>After AutoCad, that had LISP, where you could write some simple code and get some useful tailored tools that helped your efficiency, I find Revit tailoring a lot more difficult. It is more sophisticated and so programatically there are more challenges, so the code needs to be a bit more complex, but some simple Keyboard [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":5967,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[35,204,31,36,4],"tags":[],"class_list":["post-5959","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-api_json","category-automation","category-bim","category-databases","category-drawings"],"featured_image_src":"https:\/\/max-drake.cc\/wp-content\/uploads\/2019\/12\/2019-12-28-13_03_23-pyrevit.api-\u2014-pyRevit-4.7.4-documentation.jpg","featured_image_src_square":"https:\/\/max-drake.cc\/wp-content\/uploads\/2019\/12\/2019-12-28-13_03_23-pyrevit.api-\u2014-pyRevit-4.7.4-documentation.jpg","author_info":{"display_name":"Max Drake","author_link":"https:\/\/max-drake.cc\/?author=1"},"_links":{"self":[{"href":"https:\/\/max-drake.cc\/index.php?rest_route=\/wp\/v2\/posts\/5959","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/max-drake.cc\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/max-drake.cc\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/max-drake.cc\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/max-drake.cc\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=5959"}],"version-history":[{"count":0,"href":"https:\/\/max-drake.cc\/index.php?rest_route=\/wp\/v2\/posts\/5959\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/max-drake.cc\/index.php?rest_route=\/wp\/v2\/media\/5967"}],"wp:attachment":[{"href":"https:\/\/max-drake.cc\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=5959"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/max-drake.cc\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=5959"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/max-drake.cc\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=5959"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}