{"id":65,"date":"2009-11-28T23:11:12","date_gmt":"2009-11-28T23:11:12","guid":{"rendered":"http:\/\/www.thewiredguy.com\/wordpress\/?p=65"},"modified":"2009-11-28T23:11:12","modified_gmt":"2009-11-28T23:11:12","slug":"cross-domain-requests-in-silverlight-and-using-yahoo-pipes-as-a-proxy","status":"publish","type":"post","link":"https:\/\/inullable.in\/blog\/?p=65","title":{"rendered":"Cross-Domain requests in Silverlight and using Yahoo Pipes as a proxy"},"content":{"rendered":"<p>Last week, I have been developing this silverlight twitter application and was struck at a point, where I needed to pull RSS feeds from twitter. The code will always throw a <a href=\"http:\/\/forums.silverlight.net\/forums\/t\/11099.aspx\" target=\"_blank\">Security Exception<\/a> again and again. After digging a bit, I found out that silverlight doesn&#8217;t allow cross-domain calls to any domain you want.<\/p>\n<p>This policy has been enforced to prevent <a href=\"http:\/\/en.wikipedia.org\/wiki\/Cross-site_request_forgery\" target=\"_blank\">session riding<\/a>, for further details look this Karen Corby&#8217;s <a href=\"http:\/\/scorbs.com\/2008\/04\/15\/silverlight-http-networking-stack-part-2-cross-domain-communication-overview\/\" target=\"_blank\">blog post<\/a> on cross domain requests.<\/p>\n<p>Turns out that in silverlight, HTTP requests to non-original domains are allowed if the server has exclusively allowed to accept requests. The primary way of enabling cross domain calls is through a policy file placed at the root of the server.&nbsp; Two types of policy files are supported:<\/p>\n<ol>\n<li>Silverlight Cross Domain Policy File (clientaccesspolicy.xml) <\/li>\n<li>(A subset of the) Flash Cross Domain Policy File (crossdomain.xml)<\/li>\n<\/ol>\n<p>Now, the problem is that twitter don&#8217;t have policy files placed in the server root. Possible way to get around this is to use a proxy for requests. you can make a proxy on your server, that can on application request, fetch the RSS data from twitter and send it back to your application. EASY!<\/p>\n<p>but what if, you don&#8217;t want your own server proxy&#8230; <\/p>\n<p><strong>reasons<\/strong>:<\/p>\n<ul>\n<li>you will have to add a policy file to your server root\n<li>that will cause increase in the server bandwidth usage and server stress\n<li>it&#8217;s hell lot of work<\/li>\n<\/ul>\n<p>simple! use <a href=\"http:\/\/pipes.yahoo.com\" target=\"_blank\">Yahoo Pipes<\/a>, why?<\/p>\n<ul>\n<li>Its easy\n<li>because, they allow you to request RSS feeds from other sites (multiple sites in one request)\n<li>they have cross-domain policy files placed on there server roots, that means your silverlight application will be able to fetch the Twitter data via a yahoo pipe<\/li>\n<\/ul>\n<p><u>What is a yahoo pipe?<\/u><\/p>\n<blockquote>\n<p><strong>Content-source<\/strong>: <a title=\"http:\/\/pipes.yahoo.com\/pipes\/\" href=\"http:\/\/pipes.yahoo.com\/pipes\/\">http:\/\/pipes.yahoo.com\/pipes\/<\/a> <\/p>\n<p>Pipes is a powerful composition tool to aggregate, manipulate, and mashup content from around the web.  <\/p>\n<p>Like Unix pipes, simple commands can be combined together to create output that meets your needs:  <\/p>\n<ul>\n<li>combine many feeds into one, then sort, filter and translate it.\n<li>geocode your favorite feeds and browse the items on an interactive map.\n<li>power widgets\/badges on your web site.\n<li>grab the output of any Pipes as RSS, JSON, KML, and other formats. <\/li>\n<\/ul>\n<p>simply speaking, a yahoo pipe is url like this:<\/p>\n<\/blockquote>\n<p><a title=\"http:\/\/pipes.yahoo.com\/pipes\/pipe.info?_id=f0cf1b0851bd8243dbf8bd63c07b8d11\" href=\"http:\/\/pipes.yahooapis.com\/pipes\/pipe.info?_id=bas782j290jq9dd2nmaklfhj93ji9d3j\">http:\/\/pipes.<strong>yahooapis<\/strong>.com\/pipes\/pipe.info?_id=bas782j290jq9dd2nmaklfhj93ji9d3j<\/a><\/p>\n<p>you design its behaviour on a design surface <\/p>\n<p><a href=\"http:\/\/thewiredguy.com\/BlogImages\/CrossDomainrequestsinSilverlight_3CE1\/image.png\"><img loading=\"lazy\" border=\"0\" alt=\"image\" src=\"http:\/\/thewiredguy.com\/BlogImages\/CrossDomainrequestsinSilverlight_3CE1\/image_thumb.png\" width=\"752\" height=\"454\"><\/a> <\/p>\n<p>So, a yahoo pipe can be designed to take single\/multiple feed URLs, fetch the feeds and provide an aggregated feed which can be consumed by your silverlight application under cross domain policy.<\/p>\n<p>further, you can provide test data and see results right there.<\/p>\n<p>Run it and get the aggregated RSS URL from the run screen.<\/p>\n<p>The pipe, I used looks like this<\/p>\n<p>http:\/\/pipes.yahooapis.com\/pipes\/pipe.run?_id=f0cf1b0851bd8243dbf8bd63c07b8d11&#038;_render=rss&#038;feedUrl=&lt;some_feed_url&gt;<\/p>\n<p><a href=\"http:\/\/thewiredguy.com\/BlogImages\/CrossDomainrequestsinSilverlight_3CE1\/image_3.png\"><img loading=\"lazy\" border=\"0\" alt=\"image\" src=\"http:\/\/thewiredguy.com\/BlogImages\/CrossDomainrequestsinSilverlight_3CE1\/image_thumb_3.png\" width=\"452\" height=\"310\"><\/a> <\/p>\n<p>Now fetching the data in your silverlight application is damn easy&#8230;<\/p>\n<p>&nbsp;<\/p>\n<pre class=\"csharpcode\"><span class=\"kwrd\">private<\/span> <span class=\"kwrd\">string<\/span> proxy = <span class=\"str\">\"http:\/\/pipes.yahooapis.com\/pipes\/pipe.run?_id=f0cf1b0851bd8243dbf8bd63c07b8d11&amp;_render=rss&amp;feedUrl=\"<\/span>;\n<span class=\"kwrd\">private<\/span> <span class=\"kwrd\">string<\/span> feedUrl = <span class=\"str\">\"http:\/\/twitter.com\/statuses\/user_timeline\/22100709.rss\"<\/span>;\n\n<span class=\"kwrd\">void<\/span> DownloadFeed()\n{\n            <span class=\"kwrd\">string<\/span> url = proxy + feedUrl;\n            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(<span class=\"kwrd\">new<\/span> Uri(url));\n            request.Method = <span class=\"str\">\"GET\"<\/span>;\n            request.BeginGetResponse(<span class=\"kwrd\">new<\/span> AsyncCallback(ResponseHandler), request);\n}\n\n<span class=\"kwrd\">void<\/span> ResponseHandler(IAsyncResult asyncResult)\n{\n            <span class=\"kwrd\">try<\/span>\n            {\n                HttpWebRequest request = (HttpWebRequest)asyncResult.AsyncState;\n                HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asyncResult);\n                \n                <span class=\"kwrd\">if<\/span> (response.StatusCode == HttpStatusCode.OK)\n                {\n                    Stream stream = response.GetResponseStream();\n                    <span class=\"kwrd\">int<\/span> len = 1024;\n                    <span class=\"kwrd\">byte<\/span>[] buf = <span class=\"kwrd\">new<\/span> <span class=\"kwrd\">byte<\/span>[len];\n                    <span class=\"kwrd\">int<\/span> read = 0;\n                    xml = <span class=\"str\">\"\"<\/span>;\n                    <span class=\"kwrd\">do<\/span>\n                    {\n                        read = stream.Read(buf, 0, len);\n                        xml += Encoding.UTF8.GetString(buf, 0, read);\n\n                    }<span class=\"kwrd\">while<\/span> (read &gt; 0);\n                    stream.Close();\n\n                    ParseRSSFeed(xml);\n                }\n            }\n            <span class=\"kwrd\">catch<\/span> (System.Security.SecurityException ex)\n            {\n                <span class=\"rem\">\/\/ Do Something<\/span>\n            }\n }<\/pre>\n<pre class=\"csharpcode\">&nbsp;<\/pre>\n<pre class=\"csharpcode\">Next, you can include Linq to Xml (add System.Xml.Linq to References) to easily and quickly parse the xml to fetch the user tweets. <\/pre>\n<pre class=\"csharpcode\">You can read more about that on Scott Gu's blog post: <a href=\"http:\/\/weblogs.asp.net\/scottgu\/pages\/silverlight-tutorial-part-3-using-networking-to-retrieve-data-and-populate-a-datagrid.aspx\" target=\"_blank\">Silverlight Tutorial Part 3: Using Networking to Retrieve Data and Populate a DataGrid<\/a><\/pre>\n<pre class=\"csharpcode\">Here is, how I have done it:<\/pre>\n<pre class=\"csharpcode\">The feed  you get from twitter will look like this:<\/pre>\n<pre class=\"csharpcode\"><span class=\"kwrd\">&lt;?<\/span><span class=\"html\">xml<\/span> <span class=\"attr\">version<\/span><span class=\"kwrd\">=\"1.0\"<\/span> <span class=\"attr\">encoding<\/span><span class=\"kwrd\">=\"utf-16\"<\/span>?<span class=\"kwrd\">&gt;<\/span>\n<span class=\"kwrd\">&lt;<\/span><span class=\"html\">rss<\/span> <span class=\"attr\">xmlns:atom<\/span><span class=\"kwrd\">=\"http:\/\/www.w3.org\/2005\/Atom\"<\/span> <span class=\"attr\">version<\/span><span class=\"kwrd\">=\"2.0\"<\/span><span class=\"kwrd\">&gt;<\/span>\n    <span class=\"kwrd\">&lt;<\/span><span class=\"html\">channel<\/span><span class=\"kwrd\">&gt;<\/span>\n        <span class=\"kwrd\">&lt;<\/span><span class=\"html\">title<\/span><span class=\"kwrd\">&gt;<\/span>Twitter \/ LON3WOLF<span class=\"kwrd\">&lt;\/<\/span><span class=\"html\">title<\/span><span class=\"kwrd\">&gt;<\/span>\n        <span class=\"kwrd\">&lt;<\/span><span class=\"html\">link<\/span><span class=\"kwrd\">&gt;<\/span>http:\/\/twitter.com\/LON3WOLF<span class=\"kwrd\">&lt;\/<\/span><span class=\"html\">link<\/span><span class=\"kwrd\">&gt;<\/span>\n        <span class=\"kwrd\">&lt;<\/span><span class=\"html\">atom:link<\/span> <span class=\"attr\">type<\/span><span class=\"kwrd\">=\"application\/rss+xml\"<\/span> <span class=\"attr\">href<\/span><span class=\"kwrd\">=\"http:\/\/twitter.com\/statuses\/user_timeline\/22100709.rss\"<\/span> <span class=\"attr\">rel<\/span><span class=\"kwrd\">=\"self\"<\/span> <span class=\"kwrd\">\/&gt;<\/span>\n        <span class=\"kwrd\">&lt;<\/span><span class=\"html\">description<\/span><span class=\"kwrd\">&gt;<\/span>Twitter updates from Sanil Singh Tomar \/ LON3WOLF.<span class=\"kwrd\">&lt;\/<\/span><span class=\"html\">description<\/span><span class=\"kwrd\">&gt;<\/span>\n        <span class=\"kwrd\">&lt;<\/span><span class=\"html\">language<\/span><span class=\"kwrd\">&gt;<\/span>en-us<span class=\"kwrd\">&lt;\/<\/span><span class=\"html\">language<\/span><span class=\"kwrd\">&gt;<\/span>\n        <span class=\"kwrd\">&lt;<\/span><span class=\"html\">ttl<\/span><span class=\"kwrd\">&gt;<\/span>40<span class=\"kwrd\">&lt;\/<\/span><span class=\"html\">ttl<\/span><span class=\"kwrd\">&gt;<\/span>\n           <span class=\"kwrd\">&lt;<\/span><span class=\"html\">title<\/span><span class=\"kwrd\">&gt;<\/span>LON3WOLF: ehem... RT @Zee: awww man...RT @patrick Best toilet ever! http:\/\/twitpic.com\/rcvp2 #fb<span class=\"kwrd\">&lt;\/<\/span><span class=\"html\">title<\/span><span class=\"kwrd\">&gt;<\/span>\n        <span class=\"kwrd\">&lt;<\/span><span class=\"html\">item<\/span><span class=\"kwrd\">&gt;<\/span>\n            <span class=\"kwrd\">&lt;<\/span><span class=\"html\">title<\/span><span class=\"kwrd\">&gt;<\/span>LON3WOLF: @anilbpai you mean one that looks like xkcd, if you find any tool 4 that, then please RT :)<span class=\"kwrd\">&lt;\/<\/span><span class=\"html\">title<\/span><span class=\"kwrd\">&gt;<\/span>\n            <span class=\"kwrd\">&lt;<\/span><span class=\"html\">description<\/span><span class=\"kwrd\">&gt;<\/span>LON3WOLF: @anilbpai you mean one that looks like xkcd<span class=\"kwrd\">&lt;\/<\/span><span class=\"html\">description<\/span><span class=\"kwrd\">&gt;<\/span>\n            <span class=\"kwrd\">&lt;<\/span><span class=\"html\">pubDate<\/span><span class=\"kwrd\">&gt;<\/span>Sat, 28 Nov 2009 16:40:22 +0000<span class=\"kwrd\">&lt;\/<\/span><span class=\"html\">pubDate<\/span><span class=\"kwrd\">&gt;<\/span>\n            <span class=\"kwrd\">&lt;<\/span><span class=\"html\">guid<\/span><span class=\"kwrd\">&gt;<\/span>http:\/\/twitter.com\/LON3WOLF\/statuses\/6144843401<span class=\"kwrd\">&lt;\/<\/span><span class=\"html\">guid<\/span><span class=\"kwrd\">&gt;<\/span>\n            <span class=\"kwrd\">&lt;<\/span><span class=\"html\">link<\/span><span class=\"kwrd\">&gt;<\/span>http:\/\/twitter.com\/LON3WOLF\/statuses\/6144843401<span class=\"kwrd\">&lt;\/<\/span><span class=\"html\">link<\/span><span class=\"kwrd\">&gt;<\/span>\n        <span class=\"kwrd\">&lt;\/<\/span><span class=\"html\">item<\/span><span class=\"kwrd\">&gt;<\/span>        \n        <span class=\"kwrd\">&lt;<\/span><span class=\"html\">item<\/span><span class=\"kwrd\">&gt;<\/span>\n            <span class=\"kwrd\">&lt;<\/span><span class=\"html\">title<\/span><span class=\"kwrd\">&gt;<\/span>LON3WOLF: @anilbpai Go to ' Block ' button-<span class=\"attr\">&amp;amp;<\/span>gt; Click! Click! :)<span class=\"kwrd\">&lt;\/<\/span><span class=\"html\">title<\/span><span class=\"kwrd\">&gt;<\/span>\n            <span class=\"kwrd\">&lt;<\/span><span class=\"html\">description<\/span><span class=\"kwrd\">&gt;<\/span>LON3WOLF: @anilbpai Go to ' Block ' button-<span class=\"attr\">&amp;amp;<\/span>gt; Click! Click! :)<span class=\"kwrd\">&lt;\/<\/span><span class=\"html\">description<\/span><span class=\"kwrd\">&gt;<\/span>\n            <span class=\"kwrd\">&lt;<\/span><span class=\"html\">pubDate<\/span><span class=\"kwrd\">&gt;<\/span>Fri, 27 Nov 2009 18:38:03 +0000<span class=\"kwrd\">&lt;\/<\/span><span class=\"html\">pubDate<\/span><span class=\"kwrd\">&gt;<\/span>\n            <span class=\"kwrd\">&lt;<\/span><span class=\"html\">guid<\/span><span class=\"kwrd\">&gt;<\/span>http:\/\/twitter.com\/LON3WOLF\/statuses\/6119125496<span class=\"kwrd\">&lt;\/<\/span><span class=\"html\">guid<\/span><span class=\"kwrd\">&gt;<\/span>\n            <span class=\"kwrd\">&lt;<\/span><span class=\"html\">link<\/span><span class=\"kwrd\">&gt;<\/span>http:\/\/twitter.com\/LON3WOLF\/statuses\/6119125496<span class=\"kwrd\">&lt;\/<\/span><span class=\"html\">link<\/span><span class=\"kwrd\">&gt;<\/span>\n        <span class=\"kwrd\">&lt;\/<\/span><span class=\"html\">item<\/span><span class=\"kwrd\">&gt;<\/span>\n    <span class=\"kwrd\">&lt;\/<\/span><span class=\"html\">channel<\/span><span class=\"kwrd\">&gt;<\/span>\n<span class=\"kwrd\">&lt;\/<\/span><span class=\"html\">rss<\/span><span class=\"kwrd\">&gt;<\/span><\/pre>\n<pre class=\"csharpcode\"><span class=\"kwrd\"><font color=\"#000000\">You can use Linq to XML in following way:<\/font><\/span><\/pre>\n<pre class=\"csharpcode\"><span class=\"kwrd\">public<\/span> <span class=\"kwrd\">class<\/span> item\n{\n        <span class=\"kwrd\">public<\/span> <span class=\"kwrd\">string<\/span> title;\n        <span class=\"kwrd\">public<\/span> <span class=\"kwrd\">string<\/span> description;\n        <span class=\"kwrd\">public<\/span> <span class=\"kwrd\">string<\/span> pubDate;\n        <span class=\"kwrd\">public<\/span> <span class=\"kwrd\">string<\/span> guid;\n        <span class=\"kwrd\">public<\/span> <span class=\"kwrd\">string<\/span> link;\n}\n\n<span class=\"kwrd\">public<\/span> <span class=\"kwrd\">void<\/span> ParseRSSFeed(<span class=\"kwrd\">string<\/span> xmlContent)\n {\n\n            XDocument rss = XDocument.Parse(xmlContent);\n            \n            var tweets = from feed <span class=\"kwrd\">in<\/span> rss.Descendants(<span class=\"str\">\"channel\"<\/span>).Descendants(<span class=\"str\">\"item\"<\/span>)\n                        select <span class=\"kwrd\">new<\/span> item\n                        {\n                            guid = (<span class=\"kwrd\">string<\/span>) feed.Element(<span class=\"str\">\"guid\"<\/span>),\n                            pubDate = (<span class=\"kwrd\">string<\/span>)feed.Element(<span class=\"str\">\"pubDate\"<\/span>),\n                            title = (<span class=\"kwrd\">string<\/span>)feed.Element(<span class=\"str\">\"title\"<\/span>),\n                            description = (<span class=\"kwrd\">string<\/span>)feed.Element(<span class=\"str\">\"description\"<\/span>),\n                            link = (<span class=\"kwrd\">string<\/span>)feed.Element(<span class=\"str\">\"link\"<\/span>)\n                        };\n\n            Status = <span class=\"kwrd\">new<\/span> item[tweets.Count()];\n\n            <span class=\"rem\">\/\/Copy description to status<\/span>\n            <span class=\"kwrd\">int<\/span> count = 0;\n            <span class=\"kwrd\">foreach<\/span> (var tweet <span class=\"kwrd\">in<\/span> tweets)\n            {\n                Status[count] = tweet;\n                count++;\n            }\n }<\/pre>\n<pre class=\"csharpcode\"><strong>Links:<\/strong><\/pre>\n<p><a href=\"http:\/\/thewiredguy.com\/Codegarage\/wp-content\/uploads\/2009\/10\/page_white_swoosh.png\"><img loading=\"lazy\" border=\"0\" alt=\"page_white_swoosh\" src=\"http:\/\/thewiredguy.com\/Codegarage\/wp-content\/uploads\/2009\/10\/page_white_swoosh_thumb.png\" width=\"16\" height=\"16\"><\/a> Source Code: <a href=\"http:\/\/thewiredguy.com\/Codegarage\/?p=109\">Download<\/a><\/p>\n<p><a href=\"http:\/\/thewiredguy.com\/Codegarage\/wp-content\/uploads\/2009\/10\/application_link.png\"><img loading=\"lazy\" border=\"0\" alt=\"application_link\" src=\"http:\/\/thewiredguy.com\/Codegarage\/wp-content\/uploads\/2009\/10\/application_link_thumb.png\" width=\"16\" height=\"16\"><\/a> Application: <a href=\"http:\/\/thewiredguy.com\/Codegarage\/?p=109\">Download<\/a><\/p>\n<style type=\"text\/css\">.csharpcode, .csharpcode pre\n{\n\tfont-size: small;\n\tcolor: black;\n\tfont-family: consolas, \"Courier New\", courier, monospace;\n\tbackground-color: #ffffff;\n\t\/*white-space: pre;*\/\n}\n.csharpcode pre { margin: 0em; }\n.csharpcode .rem { color: #008000; }\n.csharpcode .kwrd { color: #0000ff; }\n.csharpcode .str { color: #006080; }\n.csharpcode .op { color: #0000c0; }\n.csharpcode .preproc { color: #cc6633; }\n.csharpcode .asp { background-color: #ffff00; }\n.csharpcode .html { color: #800000; }\n.csharpcode .attr { color: #ff0000; }\n.csharpcode .alt \n{\n\tbackground-color: #f4f4f4;\n\twidth: 100%;\n\tmargin: 0em;\n}\n.csharpcode .lnum { color: #606060; }\n<\/style>\n<style type=\"text\/css\">.csharpcode, .csharpcode pre\n{\n\tfont-size: small;\n\tcolor: black;\n\tfont-family: consolas, \"Courier New\", courier, monospace;\n\tbackground-color: #ffffff;\n\t\/*white-space: pre;*\/\n}\n.csharpcode pre { margin: 0em; }\n.csharpcode .rem { color: #008000; }\n.csharpcode .kwrd { color: #0000ff; }\n.csharpcode .str { color: #006080; }\n.csharpcode .op { color: #0000c0; }\n.csharpcode .preproc { color: #cc6633; }\n.csharpcode .asp { background-color: #ffff00; }\n.csharpcode .html { color: #800000; }\n.csharpcode .attr { color: #ff0000; }\n.csharpcode .alt \n{\n\tbackground-color: #f4f4f4;\n\twidth: 100%;\n\tmargin: 0em;\n}\n.csharpcode .lnum { color: #606060; }\n<\/style>\n<style type=\"text\/css\">.csharpcode, .csharpcode pre\n{\n\tfont-size: small;\n\tcolor: black;\n\tfont-family: consolas, \"Courier New\", courier, monospace;\n\tbackground-color: #ffffff;\n\t\/*white-space: pre;*\/\n}\n.csharpcode pre { margin: 0em; }\n.csharpcode .rem { color: #008000; }\n.csharpcode .kwrd { color: #0000ff; }\n.csharpcode .str { color: #006080; }\n.csharpcode .op { color: #0000c0; }\n.csharpcode .preproc { color: #cc6633; }\n.csharpcode .asp { background-color: #ffff00; }\n.csharpcode .html { color: #800000; }\n.csharpcode .attr { color: #ff0000; }\n.csharpcode .alt \n{\n\tbackground-color: #f4f4f4;\n\twidth: 100%;\n\tmargin: 0em;\n}\n.csharpcode .lnum { color: #606060; }\n<\/style>\n","protected":false},"excerpt":{"rendered":"<p>Last week, I have been developing this silverlight twitter application and was struck at a point, where I needed to pull RSS feeds from twitter. The code will always throw a Security Exception again and again. After digging a bit, I found out that silverlight doesn&#8217;t allow cross-domain calls to any domain you want. This [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[11,41,71,241,251,271],"tags":[],"_links":{"self":[{"href":"https:\/\/inullable.in\/blog\/index.php?rest_route=\/wp\/v2\/posts\/65"}],"collection":[{"href":"https:\/\/inullable.in\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/inullable.in\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/inullable.in\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/inullable.in\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=65"}],"version-history":[{"count":0,"href":"https:\/\/inullable.in\/blog\/index.php?rest_route=\/wp\/v2\/posts\/65\/revisions"}],"wp:attachment":[{"href":"https:\/\/inullable.in\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=65"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/inullable.in\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=65"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/inullable.in\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=65"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}