<?xml version="1.0" encoding="UTF-8" standalone="yes"?><oembed><version><![CDATA[1.0]]></version><provider_name><![CDATA[CloudForms Now]]></provider_name><provider_url><![CDATA[http://cloudformsblog.redhat.com]]></provider_url><author_name><![CDATA[Victor Estival Lopez]]></author_name><author_url><![CDATA[https://cloudformsblog.redhat.com/author/vestival271017/]]></author_url><title><![CDATA[Playing with REST&nbsp;API]]></title><type><![CDATA[link]]></type><html><![CDATA[<h1><b>Overview</b></h1>
<p><span style="font-weight:400;">In this article, I will describe how REST API works natively in Red Hat CloudForms.</span></p>
<p><span style="font-weight:400;">REST stands for Representational State Transfer. REST is a web standard based architecture and uses HTTP protocol for data communication. It revolves around resources where every component is a resource and is accessed by a common interface using HTTP standards method.  </span></p>
<p><span style="font-weight:400;">Red Hat CloudForms provides APIs to integrate external systems and initiate provisioning via CloudForms. In CloudForms, REST can be accessed by adding “/api” prefix to the URL.  </span></p>
<p>&nbsp;</p>
<pre>https://&lt;IP or hostname of appliance&gt; /api/</pre>
<p><!--more--></p>
<h2><b>How to play</b></h2>
<p><span style="font-weight:400;">In order to work with REST APIs, there are various REST API client tools  :</span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<ul>
<li><b>Internet Browser : <span style="font-weight:400;">Put a REST API call into the browser Address Bar</span></b></li>
</ul>
<p><img data-attachment-id="2518" data-permalink="https://cloudformsblog.redhat.com/2018/07/30/playing-with-rest-api/screen-shot-2018-07-06-at-14-05-31/" data-orig-file="https://cloudformsredhat.files.wordpress.com/2018/07/screen-shot-2018-07-06-at-14-05-31.png" data-orig-size="1880,312" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Screen Shot 2018-07-06 at 14.05.31" data-image-description="" data-medium-file="https://cloudformsredhat.files.wordpress.com/2018/07/screen-shot-2018-07-06-at-14-05-31.png?w=300" data-large-file="https://cloudformsredhat.files.wordpress.com/2018/07/screen-shot-2018-07-06-at-14-05-31.png?w=1024" class="alignnone size-large wp-image-2518" src="https://cloudformsredhat.files.wordpress.com/2018/07/screen-shot-2018-07-06-at-14-05-31.png?w=1024" alt="" srcset="https://cloudformsredhat.files.wordpress.com/2018/07/screen-shot-2018-07-06-at-14-05-31.png?w=1024 1024w, https://cloudformsredhat.files.wordpress.com/2018/07/screen-shot-2018-07-06-at-14-05-31.png?w=150 150w, https://cloudformsredhat.files.wordpress.com/2018/07/screen-shot-2018-07-06-at-14-05-31.png?w=300 300w, https://cloudformsredhat.files.wordpress.com/2018/07/screen-shot-2018-07-06-at-14-05-31.png?w=768 768w, https://cloudformsredhat.files.wordpress.com/2018/07/screen-shot-2018-07-06-at-14-05-31.png 1880w" sizes="(max-width: 1024px) 100vw, 1024px" /></p>
<p>&nbsp;</p>
<ul>
<li><b>CURL :  <span style="font-weight:400;">Command line tool for HTTP client</span></b></li>
</ul>
<p>&nbsp;</p>
<pre>curl -k -u username:password -X GET "Accept: application/json" https://&lt;IP or hostname of appliance&gt;/api/</pre>
<p>&nbsp;</p>
<ul>
<li><b><br />
Insomnia : <span style="font-weight:400;">A powerful REST API client with cookie management, code generation, authentication for Linux, Mac and Window etc.</span></b></li>
</ul>
<p>&nbsp;</p>
<p><img data-attachment-id="2519" data-permalink="https://cloudformsblog.redhat.com/2018/07/30/playing-with-rest-api/screen-shot-2018-07-06-at-14-06-19/" data-orig-file="https://cloudformsredhat.files.wordpress.com/2018/07/screen-shot-2018-07-06-at-14-06-19.png" data-orig-size="1888,814" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Screen Shot 2018-07-06 at 14.06.19" data-image-description="" data-medium-file="https://cloudformsredhat.files.wordpress.com/2018/07/screen-shot-2018-07-06-at-14-06-19.png?w=300" data-large-file="https://cloudformsredhat.files.wordpress.com/2018/07/screen-shot-2018-07-06-at-14-06-19.png?w=1024" class="alignnone size-large wp-image-2519" src="https://cloudformsredhat.files.wordpress.com/2018/07/screen-shot-2018-07-06-at-14-06-19.png?w=1024" alt="" srcset="https://cloudformsredhat.files.wordpress.com/2018/07/screen-shot-2018-07-06-at-14-06-19.png?w=1024 1024w, https://cloudformsredhat.files.wordpress.com/2018/07/screen-shot-2018-07-06-at-14-06-19.png?w=150 150w, https://cloudformsredhat.files.wordpress.com/2018/07/screen-shot-2018-07-06-at-14-06-19.png?w=300 300w, https://cloudformsredhat.files.wordpress.com/2018/07/screen-shot-2018-07-06-at-14-06-19.png?w=768 768w, https://cloudformsredhat.files.wordpress.com/2018/07/screen-shot-2018-07-06-at-14-06-19.png 1888w" sizes="(max-width: 1024px) 100vw, 1024px" /></p>
<h2><b>HTTP Methods</b></h2>
<p><span style="font-weight:400;">Red Hat CloudForms API uses JSON (Javascript Object Notation Format) for data exchange format.  JSON is a commonly used format for data exchange and storing. The primary or most commonly used HTTP verbs are POST, GET, PUT, PATCH, OPTIONS, HEAD and DELETE. These correspond to create, read, update, delete (or CRUD) operations respectively. </span></p>
<p>&nbsp;</p>
<table style="height:auto;" border="1" width="auto">
<tbody>
<tr>
<td><span style="font-weight:400;">Method</span></td>
<td><span style="font-weight:400;">DEFINITION</span></td>
<td><span style="font-weight:400;">Example (Using CURL)</span></td>
</tr>
<tr>
<td><span style="font-weight:400;">GET</span></td>
<td><span style="font-weight:400;">Return a specific resource </span></td>
<td><span style="font-weight:400;">curl -k -u user:password -X GET &#8220;Accept: application/json&#8221; </span></p>
<p><span style="font-weight:400;"><a href="https://&lt;IP&gt;/api/providers/" rel="nofollow">https://&lt;IP&gt;/api/providers/</a></span></td>
</tr>
<tr>
<td><span style="font-weight:400;">POST</span></td>
<td><span style="font-weight:400;">Perform an action on the resource</span></td>
<td><span style="font-weight:400;">curl -k &#8211;user user:password -i -X POST -H &#8220;Accept: application/json&#8221; -d &#8216; { &#8220;type&#8221; : &#8220;ManageIQ::Providers::Redhat::InfraManager&#8221;, &#8220;name&#8221; : &#8220;RHEVM Provider&#8221;, &#8220;hostname&#8221; : &#8220;hostname of provider&#8221;, &#8220;ipaddress&#8221; : &#8220;IP&#8221;, &#8220;credentials&#8221; : { &#8220;userid&#8221; : “username”, &#8220;password&#8221; : &#8220;*****&#8221;}}&#8217; </span></p>
<p><span style="font-weight:400;"><a href="https://&lt;IP&gt;/api/providers" rel="nofollow">https://&lt;IP&gt;/api/providers</a></span></td>
</tr>
<tr>
<td><span style="font-weight:400;">PUT</span></td>
<td><span style="font-weight:400;">Update or replace  a resource</span></td>
<td><span style="font-weight:400;">curl -k &#8211;user username:password -i -X PUT -H &#8220;Accept: application/json&#8221;</span><span style="font-weight:400;"><br />
</span><span style="font-weight:400;">-d &#8216;{ &#8220;name&#8221; : &#8220;updated service name&#8221; }&#8217;</span><span style="font-weight:400;"><br />
</span><span style="font-weight:400;">    http://&lt;IP&gt;/api/services/&lt;service_id&gt;</span></td>
</tr>
<tr>
<td><span style="font-weight:400;">DELETE</span></td>
<td><span style="font-weight:400;">Delete a resource</span></td>
<td><span style="font-weight:400;">curl -k &#8211;user user:password -i -X DELETE -H &#8220;Accept: application/json&#8221; </span></p>
<p><span style="font-weight:400;"><a href="https://&lt;IP&gt;/api/providers/&lt;provider_id&#038;gt" rel="nofollow">https://&lt;IP&gt;/api/providers/&lt;provider_id&#038;gt</a>;</span></td>
</tr>
<tr>
<td><span style="font-weight:400;">OPTIONS</span></td>
<td><span style="font-weight:400;">Get the metadata</span></td>
<td><span style="font-weight:400;">curl -k &#8211;user username:password -X OPTIONS &#8220;Accept: application/json&#8221; </span></p>
<p><span style="font-weight:400;"><a href="https://&lt;IP&gt;/api/providers/" rel="nofollow">https://&lt;IP&gt;/api/providers/</a></span></td>
</tr>
<tr>
<td><span style="font-weight:400;">HEAD</span></td>
<td><span style="font-weight:400;">Same as GET, but transfers the status line and header section only.</span></td>
<td><span style="font-weight:400;">HEAD method is identical to GET except that the server MUST NOT return a message body in response.This method is often used for testing hypertext links for validity, accessibility, and recent modification.</span></td>
</tr>
<tr>
<td><span style="font-weight:400;">PATCH</span></td>
<td><span style="font-weight:400;">Update or modify a resource </span></td>
<td><span style="font-weight:400;">curl -k &#8211;user username:password -i -X PATCH -H &#8220;Accept: application/json&#8221;</span><span style="font-weight:400;"><br />
</span><span style="font-weight:400;">-d ‘[</span><span style="font-weight:400;">{ &#8220;action&#8221;: &#8220;edit&#8221;, &#8220;path&#8221;: &#8220;name&#8221;, &#8220;value&#8221;: &#8220;A new Service name&#8221; },</span><span style="font-weight:400;">{ &#8220;action&#8221;: &#8220;add&#8221;, &#8220;path&#8221;: &#8220;description&#8221;, &#8220;value&#8221;: &#8220;A Description for the new Service&#8221; },</span><span style="font-weight:400;"><br />
</span><span style="font-weight:400;">  { &#8220;action&#8221;: &#8220;remove&#8221;, &#8220;path&#8221;: &#8220;display&#8221; }</span><span style="font-weight:400;"><br />
</span><span style="font-weight:400;">]’</span><span style="font-weight:400;"><br />
</span><span style="font-weight:400;">    http://&lt;IP&gt;/api/services/&lt;service_id&gt;</span></td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<h2><b>Updating resources</b></h2>
<p><span style="font-weight:400;">As shown in the above table, there are a couple of ways to update attributes in a resource. You can update a resource with PUT or PATCH method. Now, the question is When to use PUT and When PATCH?</span></p>
<p>&nbsp;</p>
<p><span style="font-weight:400;">For Example </span></p>
<p><span style="font-weight:400;">“When a client needs to replace an existing Resource entirely, they can use PUT. When they’re doing a partial update, they can use HTTP PATCH.”</span></p>
<p><span style="font-weight:400;">For instance, when updating a single field of the Resource, sending the complete Resource representation might be cumbersome and utilizes a lot of unnecessary bandwidth. In such cases, the semantics of PATCH make a lot more sense.</span></p>
<p>&nbsp;</p>
<p><b>How to authenticate REST APIs</b></p>
<p><span style="font-weight:400;">REST APIs authentication can be done by two ways :</span></p>
<p>&nbsp;</p>
<ul>
<li style="font-weight:400;"><b>Basic Authentication :</b><span style="font-weight:400;"> The most simple way to deal with authentication is to use HTTP basic authentication in which the username and password credentials are passed with each HTTP request.</span></li>
</ul>
<p><img data-attachment-id="2523" data-permalink="https://cloudformsblog.redhat.com/2018/07/30/playing-with-rest-api/screen-shot-2018-07-06-at-14-12-10/" data-orig-file="https://cloudformsredhat.files.wordpress.com/2018/07/screen-shot-2018-07-06-at-14-12-10.png" data-orig-size="1874,208" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Screen Shot 2018-07-06 at 14.12.10" data-image-description="" data-medium-file="https://cloudformsredhat.files.wordpress.com/2018/07/screen-shot-2018-07-06-at-14-12-10.png?w=300" data-large-file="https://cloudformsredhat.files.wordpress.com/2018/07/screen-shot-2018-07-06-at-14-12-10.png?w=1024" class="alignnone size-large wp-image-2523" src="https://cloudformsredhat.files.wordpress.com/2018/07/screen-shot-2018-07-06-at-14-12-10.png?w=1024" alt="" srcset="https://cloudformsredhat.files.wordpress.com/2018/07/screen-shot-2018-07-06-at-14-12-10.png?w=1024 1024w, https://cloudformsredhat.files.wordpress.com/2018/07/screen-shot-2018-07-06-at-14-12-10.png?w=150 150w, https://cloudformsredhat.files.wordpress.com/2018/07/screen-shot-2018-07-06-at-14-12-10.png?w=300 300w, https://cloudformsredhat.files.wordpress.com/2018/07/screen-shot-2018-07-06-at-14-12-10.png?w=768 768w, https://cloudformsredhat.files.wordpress.com/2018/07/screen-shot-2018-07-06-at-14-12-10.png 1874w" sizes="(max-width: 1024px) 100vw, 1024px" /></p>
<ul>
<li style="font-weight:400;"><b>Token Based Authentication:</b><span style="font-weight:400;"> For multiple API calls to the appliance, it is recommended to use this approach. In this approach, client requests a token for the username and password. Then the token is used instead of username and password for each API call. </span></li>
</ul>
<p>&nbsp;</p>
<p><b>Acquiring a Token : </b></p>
<p>Request:</p>
<pre> curl -k -u user:password -X GET "Accept: application/json" https://&lt;IP&gt;/api/auth</pre>
<p>Response:</p>
<pre>{"auth_token":"4cb1fb32508350796caf32c12808fee2","token_ttl":600,"expires_on":"2017-12-01T11:25:06Z"}</pre>
<p>&nbsp;</p>
<p><b>Query with Token</b></p>
<pre>curl -k -i -X GET "Accept: application/json" -H “X-Auth-Token: “token” https://&lt;IP&gt;/api/hosts</pre>
<p><b style="font-family:-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell, 'Helvetica Neue', sans-serif;"><br />
Delete a Token</b></p>
<pre>curl -k -i -X DELETE -H "Accept: application/json" -H "X-Auth-Token: 21fe54dd14dc89c219d62f651497a54" https://&lt;IP&gt;/api/auth</pre>
<p><span style="font-weight:400;"><br />
Moreover, the duration of token is about 10 minutes and we can change/modify the duration from CloudForms operational portal by navigating to </span><i style="font-family:-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell, 'Helvetica Neue', sans-serif;"><span>Configuration -&gt; Server -&gt; Advanced -&gt; api: -&gt; token_ttl</span></i></p>
<p><img data-attachment-id="2524" data-permalink="https://cloudformsblog.redhat.com/2018/07/30/playing-with-rest-api/screen-shot-2018-07-06-at-14-16-02/" data-orig-file="https://cloudformsredhat.files.wordpress.com/2018/07/screen-shot-2018-07-06-at-14-16-02.png" data-orig-size="1588,1122" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Screen Shot 2018-07-06 at 14.16.02" data-image-description="" data-medium-file="https://cloudformsredhat.files.wordpress.com/2018/07/screen-shot-2018-07-06-at-14-16-02.png?w=300" data-large-file="https://cloudformsredhat.files.wordpress.com/2018/07/screen-shot-2018-07-06-at-14-16-02.png?w=1024" class="alignnone size-large wp-image-2524" src="https://cloudformsredhat.files.wordpress.com/2018/07/screen-shot-2018-07-06-at-14-16-02.png?w=1024" alt="" srcset="https://cloudformsredhat.files.wordpress.com/2018/07/screen-shot-2018-07-06-at-14-16-02.png?w=1024 1024w, https://cloudformsredhat.files.wordpress.com/2018/07/screen-shot-2018-07-06-at-14-16-02.png?w=150 150w, https://cloudformsredhat.files.wordpress.com/2018/07/screen-shot-2018-07-06-at-14-16-02.png?w=300 300w, https://cloudformsredhat.files.wordpress.com/2018/07/screen-shot-2018-07-06-at-14-16-02.png?w=768 768w, https://cloudformsredhat.files.wordpress.com/2018/07/screen-shot-2018-07-06-at-14-16-02.png 1588w" sizes="(max-width: 1024px) 100vw, 1024px" /></p>
<h2><b>Query Specification</b></h2>
<p>&nbsp;</p>
<p><span style="font-weight:400;">Query specification identifies the controls available when querying collections. While querying, we can specify control attributes in the GET URL as value paris. There are three main techniques comes under query specifications. Let&#8217;s take a look on them.</span></p>
<p>&nbsp;</p>
<p><b>Paging : </b><span style="font-weight:400;">In this capability, there are two attributes available as offset and limit. Offset means first item to return and limit means the number of items to return.</span></p>
<p><b>Sorting: </b><span style="font-weight:400;">In sorting, we can sort the attributes by order , options and attributes. For example: by specifying “sort_by=atr1,atr2” , “sort_order=asc or des”</span></p>
<p><b>Filtering:  </b><span style="font-weight:400;">This helps user to filter the data according to the use case. The syntax for filters is :</span></p>
<p><span style="font-family:Consolas, Monaco, monospace;">filter[]=attribute op value</span></p>
<p><span style="font-family:Consolas, Monaco, monospace;">where op means operators </span></p>
<p>&nbsp;</p>
<h2><b>Return Codes</b></h2>
<p>&nbsp;</p>
<p><b>Success :  </b><span style="font-weight:400;">200 : OK, 201 : Created, 202 : Accepted, 204 : No content</span></p>
<p>&nbsp;</p>
<p><b>Client Errors: </b><span style="font-weight:400;">400 : Bad Request, 401 : Unauthorized, 403 : Forbidden, 404 : Not Found, 415 : Unsupported Media Type</span></p>
<p>&nbsp;</p>
<p><b>Server Errors: </b><span style="font-weight:400;">500 : Internal Server error</span></p>
<p>&nbsp;</p>
<h2><b>Troubleshooting </b></h2>
<p><span style="font-weight:400;">A good place to troubleshoot is to look into standard log files under /var/www/miq/vmdb/log on the CloudForms appliance. All the </span><i><span style="font-weight:400;">api </span></i><span style="font-weight:400;">related logs are recorded under </span><i><span style="font-weight:400;">/var/www/miq/vmdb/log/api.log. </span></i><span style="font-weight:400;">In order to dig deeper, changing the level of log is much recommended. You can change the log level by navigating to Configuration → Server → Advanced → :level_api: debug.</span></p>
<p><img data-attachment-id="2524" data-permalink="https://cloudformsblog.redhat.com/2018/07/30/playing-with-rest-api/screen-shot-2018-07-06-at-14-16-02/" data-orig-file="https://cloudformsredhat.files.wordpress.com/2018/07/screen-shot-2018-07-06-at-14-16-02.png" data-orig-size="1588,1122" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Screen Shot 2018-07-06 at 14.16.02" data-image-description="" data-medium-file="https://cloudformsredhat.files.wordpress.com/2018/07/screen-shot-2018-07-06-at-14-16-02.png?w=300" data-large-file="https://cloudformsredhat.files.wordpress.com/2018/07/screen-shot-2018-07-06-at-14-16-02.png?w=1024" class="alignnone size-large wp-image-2524" src="https://cloudformsredhat.files.wordpress.com/2018/07/screen-shot-2018-07-06-at-14-16-02.png?w=1024" alt="" srcset="https://cloudformsredhat.files.wordpress.com/2018/07/screen-shot-2018-07-06-at-14-16-02.png?w=1024 1024w, https://cloudformsredhat.files.wordpress.com/2018/07/screen-shot-2018-07-06-at-14-16-02.png?w=150 150w, https://cloudformsredhat.files.wordpress.com/2018/07/screen-shot-2018-07-06-at-14-16-02.png?w=300 300w, https://cloudformsredhat.files.wordpress.com/2018/07/screen-shot-2018-07-06-at-14-16-02.png?w=768 768w, https://cloudformsredhat.files.wordpress.com/2018/07/screen-shot-2018-07-06-at-14-16-02.png 1588w" sizes="(max-width: 1024px) 100vw, 1024px" /></p>
<h2><b>Conclusion</b></h2>
<p><span style="font-weight:400;">I hope after reading this article you will get basic understanding about how CloudForms can be managed via REST API’s. You can find the full Rest API </span><a href="https://access.redhat.com/documentation/en-us/red_hat_cloudforms/4.6/html/red_hat_cloudforms_rest_api/"><span style="font-weight:400;">documentation</span></a><span style="font-weight:400;"> here.</span></p>
]]></html><thumbnail_url><![CDATA[https://cloudformsredhat.files.wordpress.com/2018/07/laptop-762548_640.jpg?fit=440%2C330]]></thumbnail_url><thumbnail_width><![CDATA[440]]></thumbnail_width><thumbnail_height><![CDATA[293]]></thumbnail_height></oembed>