<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Paul Donnelly &#187; yahoo</title>
	<atom:link href="http://paul.donnelly.org/tag/yahoo/feed/" rel="self" type="application/rss+xml" />
	<link>http://paul.donnelly.org</link>
	<description>my personal blog and netstream</description>
	<lastBuildDate>Thu, 01 Sep 2011 18:44:19 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<item>
		<title>YQL and JSONP-X (aka. json-p-x, jsonpx, json-px)</title>
		<link>http://paul.donnelly.org/2009/07/08/yql-and-jsonp-x/</link>
		<comments>http://paul.donnelly.org/2009/07/08/yql-and-jsonp-x/#comments</comments>
		<pubDate>Wed, 08 Jul 2009 22:23:34 +0000</pubDate>
		<dc:creator>Paul Donnelly</dc:creator>
				<category><![CDATA[yahoo]]></category>
		<category><![CDATA[pipes]]></category>
		<category><![CDATA[yql]]></category>

		<guid isPermaLink="false">http://paul.donnelly.org/?p=96</guid>
		<description><![CDATA[With all the buzz about YQL&#8217;s new Insert/Update/Delete, a new feature JSONP-X was also released at the same time. JSONP-X is essentially an escaped XML string as a JSON result wrapped in a javascript callback function. To access this functionality consider this example: http://query.yahooapis.com/v1/public/yql?q=&#60;my yql query&#62;&#38;format=xml&#38;callback=mycallback and a basic structure: myJSCallbackFunction({ "query": {yql meta data [...]]]></description>
			<content:encoded><![CDATA[<p>With all the buzz about YQL&#8217;s new Insert/Update/Delete, a new feature JSONP-X was also released at the same time.</p>
<p>JSONP-X is essentially an <em>escaped XML string as a JSON result wrapped in a javascript callback function</em>. To access this functionality consider this example:<br />
http://query.yahooapis.com/v1/public/yql?q=&lt;my yql query&gt;&amp;format=xml&amp;callback=mycallback</p>
<p>and a basic structure:</p>
<pre>myJSCallbackFunction({
    "query": {yql meta data here},
    "results": ["&lt;escaped xml/html here&gt;"]
});</pre>
<p>The power of YQL&#8217;s JSONP-X really comes into play when page scraping a website. It allows you to extract HTML &#8211; keeping the HTML structure in the JSON results and using Javascript to innerHTML the results into your webpage. This makes badging much easier. (YQL and Pipes <strong>respect</strong> robots.txt so html scraping will only work on sites that are happy to have their content indexed by search engines and cached elsewhere.)</p>
<p>I&#8217;m a cycling fan and the Tour de France is the World Series of cycling. So I wanted to create a badge that leveraged the new JSONP-X feature to extract the nice results module on <a href="http://www.letour.fr/us/homepage_courseTDF.html" target="_blank">http://www.letour.fr/us/homepage_courseTDF.html</a></p>
<p>For the impatient, here is the final example page: <a href="http://paul.donnelly.org/demos/YQL_JSONP-X.html" target="_blank">http://paul.donnelly.org/demos/YQL_JSONP-X.html</a></p>
<p><a href="http://paul.donnelly.org/blog/wp-content/uploads/2009/07/letour.png"><img class="alignnone size-medium wp-image-98" title="letour" src="http://paul.donnelly.org/blog/wp-content/uploads/2009/07/letour-300x129.png" alt="" width="300" height="129" /></a></p>
<p>First of all page scraping www.letour.fr to get this module wasn&#8217;t exactly straight forward. Upon further inspection of this page, that module is created dynamically based on the current stage.</p>
<p><a href="http://developer.yahoo.com/yql/console/?q=select%20*%20from%20html%20where%20url%3D%22http%3A%2F%2Fwww.letour.fr%2Fus%2Fhomepage_courseTDF.html%22%20and%20xpath%20%3D%20%27%2F%2Fdiv[%40id%3D%22maillotDyn%22]%27" target="_blank">select * from html where url=&#8221;http://www.letour.fr/us/homepage_courseTDF.html&#8221; and xpath = &#8216;//div[@id="maillotDyn"]&#8216;</a></p>
<p>The above query yielded an empty div.</p>
<p>Upon further poking of the page I found that this function:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">maillotFunc <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	makeRequest<span style="color: #009900;">&#40;</span>prefixPath <span style="color: #339933;">+</span> <span style="color: #3366CC;">'blocPorteursMaillots.html?'</span><span style="color: #339933;">+</span>timestamp<span style="color: #339933;">,</span> <span style="color: #3366CC;">'maillotDyn'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'HTML'</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>created the module.</p>
<p>Now that I found the function I knew the html page that I needed to scrape.</p>
<p>But what is the &#8220;prefixPath&#8221;. Apparently this was generated dynamically on the front page and was defined in the Javascript. I could create a YQL Execute statement that regex&#8217;s that script node or&#8230;wait..</p>
<p>I also noticed that href paths to various links had the dynamically created &#8220;prefixPath&#8221; as well, for example:</p>
<div style="overflow:auto">
<pre>&lt;li class="level2"&gt;&lt;a href="/2009/TDF/LIVE/us/500/classement/index.html"&gt;Standings&lt;/a&gt;&lt;/li&gt;</pre>
</div>
<p>Ah, yes I can use that path to construct &#8220;<a href="http://www.letour.fr/2009/TDF/LIVE/us/500/blocPorteursMaillots.html" target="_blank">http://www.letour.fr/2009/TDF/LIVE/us/500/blocPorteursMaillots.html</a>&#8221; the final endpoint.</p>
<p>OK, so lets create a YQL query that fetchs me one of those links:</p>
<p><a href="http://developer.yahoo.com/yql/console/?q=select%20*%20from%20html%20where%20url%3D%22http%3A%2F%2Fwww.letour.fr%2Fus%2Fhomepage_courseTDF.html%22%20and%20xpath%20%3D%20%22%2F%2Fli[%40class%3D%27level2%27][2]%2Fa%22">select * from html where url=&#8221;http://www.letour.fr/us/homepage_courseTDF.html&#8221; and xpath = &#8220;//li[@class='level2'][2]/a&#8221;</a></p>
<p>Great, now I have a nice result that gives me my prefix. So now, how do I go about regexing that path out and construct the final and complete URL that I need? I guess I&#8217;ll have to create a YQL execute statement that performs the regex. But wait. I&#8217;m feeling kind of lazy this morning and don&#8217;t want to spend alot of time on this.</p>
<p>I can use Yahoo Pipes to leverage my regex! Get the cleaned up results from Yahoo Pipes as JSON and then do my final JSONP-X call. Check out the Pipe <a href="http://pipes.yahoo.com/pipes/pipe.edit?_id=KBC0Ye1r3hGpf2CaqevxTA" target="_blank">here</a>.</p>
<p><a href="http://paul.donnelly.org/blog/wp-content/uploads/2009/07/pipesyql.png"><img class="alignnone size-medium wp-image-109" title="pipesyql" src="http://paul.donnelly.org/blog/wp-content/uploads/2009/07/pipesyql-300x175.png" alt="" width="300" height="175" /></a></p>
<p>In my Pipe, I use the YQL module to get the prefixPath from the A tag. I then use the Regex module to construct the final URL I want YQL to scrape. (In [item.href] Replace [^(.*?)/classement.*] with [http://www.letour.fr$1/blocPorteursMaillots.html])</p>
<p>Sweet. I then can use <a href="http://pipes.yahoo.com/pipes/pipe.run?_id=KBC0Ye1r3hGpf2CaqevxTA&amp;_render=json">http://pipes.yahoo.com/pipes/pipe.run?_id=KBC0Ye1r3hGpf2CaqevxTA&amp;_render=json</a> as a way to get to my final URL via a sub select.</p>
<p>This is the final YQL statement I used: <a href="http://developer.yahoo.com/yql/console/?q=select%20*%20from%20html%20where%20url%20in%20%28select%20href%20from%20json%20where%20url%3D%22http%3A%2F%2Fpipes.yahoo.com%2Fpipes%2Fpipe.run%3F_id%3DKBC0Ye1r3hGpf2CaqevxTA%26_render%3Djson%22%20and%20itemPath%20%3D%20%22json.value.items%22%29%20and%20xpath%20%3D%20%22%2Fhtml%2Fbody%2Fdiv%22" target="_blank">select * from html where url in (select href from json where url=&#8221;http://pipes.yahoo.com/pipes/pipe.run?_id=KBC0Ye1r3hGpf2CaqevxTA&amp;_render=json&#8221; and itemPath = &#8220;json.value.items&#8221;) and xpath = &#8220;/html/body/div&#8221;</a></p>
<p>and this is the JSONP-X call: <a href="http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20html%20where%20url%20in%20%28select%20href%20from%20json%20where%20url%3D%22http%3A%2F%2Fpipes.yahoo.com%2Fpipes%2Fpipe.run%3F_id%3DKBC0Ye1r3hGpf2CaqevxTA%26_render%3Djson%22%20and%20itemPath%20%3D%20%22json.value.items%22%29%20and%20xpath%20%3D%20%22%2Fhtml%2Fbody%2Fdiv%22&amp;format=xml&amp;callback=phoningHome" target="_blank">http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20html%20where%20url%20in%20%28select%20href%20from%20json%20where%20url%3D%22http%3A%2F%2Fpipes.yahoo.com%2Fpipes%2Fpipe.run%3F_id%3DKBC0Ye1r3hGpf2CaqevxTA%26_render%3Djson%22%20and%20itemPath%20%3D%20%22json.value.items%22%29%20and%20xpath%20%3D%20%22%2Fhtml%2Fbody%2Fdiv%22&amp;format=xml&amp;callback=phoningHome</a></p>
<p>and the JSONP-X structure:</p>
<div style="overflow:auto">
<pre>phoningHome({
    "query": {
        "count": "1",
        "created": "2009-07-10T07:09:52Z",
        "lang": "en-US",
        "updated": "2009-07-10T07:09:52Z",
        "uri": "http://query.yahooapis.com/v1/yql?q=select+*+from+html+where+url+in+%28select+href+from+json+where+url%3D%22http%3A%2F%2Fpipes.yahoo.com%2Fpipes%2Fpipe.run%3F_id%3DKBC0Ye1r3hGpf2CaqevxTA%26_render%3Djson%22+and+itemPath+%3D+%22json.value.items%22%29+and+xpath+%3D+%22%2Fhtml%2Fbody%2Fdiv%22",
        "diagnostics": {
            "publiclyCallable": "true",
            "url": [{
                "execution-time": "14",
                "content": "http://pipes.yahoo.com/pipes/pipe.run?_id=KBC0Ye1r3hGpf2CaqevxTA&amp;_render=json"
            },
            {
                "execution-time": "350",
                "content": "http://www.letour.fr/2009/TDF/LIVE/us/700/blocPorteursMaillots.html"
            }],
            "user-time": "370",
            "service-time": "364",
            "build-version": "2174"
        }
    },
    "results": ["&lt;div id=\"maillots\"&gt;\n    &lt;h2&gt;Jersey holders&lt;\/h2&gt;\n    &lt;noscript&gt;\n      &lt;div class=\"errormes\"&gt;\n        &lt;p&gt;Activate Javascript/Flash for the automatic refresh and\n        the display of the tabs.&lt;\/p&gt;\n      &lt;\/div&gt;\n    &lt;\/noscript&gt; \n    &lt;div id=\"porteurmaillotGeneral\"&gt;\n      &lt;ul&gt;\n        &lt;li class=\"jaune\"&gt;\n          &lt;a href=\"/2009/TDF/RIDERS/us/coureurs/33.html\" onclick=\"SesameCoureur('/2009/TDF/RIDERS/us/coureurs/33.html');return false;\"&gt;CANCELLARA\n          F.&lt;\/a&gt;\n          &lt;a class=\"cob\" href=\"/2009/TDF/RIDERS/us/coureurs/33.html\" onclick=\"SesameCoureur('/2009/TDF/RIDERS/us/coureurs/33.html');return false;\"&gt;SAX&lt;\/a&gt;\n        &lt;\/li&gt;\n        &lt;li class=\"vert\"&gt;\n          &lt;a href=\"/2009/TDF/RIDERS/us/coureurs/71.html\" onclick=\"SesameCoureur('/2009/TDF/RIDERS/us/coureurs/71.html');return false;\"&gt;CAVENDISH\n          M.&lt;\/a&gt;\n          &lt;a class=\"cob\" href=\"/2009/TDF/RIDERS/us/coureurs/71.html\" onclick=\"SesameCoureur('/2009/TDF/RIDERS/us/coureurs/71.html');return false;\"&gt;THR&lt;\/a&gt;\n        &lt;\/li&gt;\n        &lt;li class=\"apois\"&gt;\n          &lt;a href=\"/2009/TDF/RIDERS/us/coureurs/122.html\" onclick=\"SesameCoureur('/2009/TDF/RIDERS/us/coureurs/122.html');return false;\"&gt;AUGE\n          S.&lt;\/a&gt;\n          &lt;a class=\"cob\" href=\"/2009/TDF/RIDERS/us/coureurs/122.html\" onclick=\"SesameCoureur('/2009/TDF/RIDERS/us/coureurs/122.html');return false;\"&gt;COF&lt;\/a&gt;\n        &lt;\/li&gt;\n        &lt;li class=\"blanc\"&gt;\n          &lt;a href=\"/2009/TDF/RIDERS/us/coureurs/76.html\" onclick=\"SesameCoureur('/2009/TDF/RIDERS/us/coureurs/76.html');return false;\"&gt;MARTIN\n          T.&lt;\/a&gt;\n          &lt;a class=\"cob\" href=\"/2009/TDF/RIDERS/us/coureurs/76.html\" onclick=\"SesameCoureur('/2009/TDF/RIDERS/us/coureurs/76.html');return false;\"&gt;THR&lt;\/a&gt;\n        &lt;\/li&gt;\n      &lt;\/ul&gt;\n    &lt;\/div&gt;&lt;\/div&gt;"]
});</pre>
</div>
<p>Like I said, letour.fr didn&#8217;t make it easy, but most websites are much easier to scrape if it&#8217;s static html.</p>
<p>Now the easy part. Here&#8217;s the JS source that makes the YQL JSONP-X call, parses it and innerHTML&#8217;s the escaped HTML into a div.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> sURL <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20html%20where%20url%20in%20%28select%20href%20from%20json%20where%20url%3D%22http%3A%2F%2Fpipes.yahoo.com%2Fpipes%2Fpipe.run%3F_id%3DKBC0Ye1r3hGpf2CaqevxTA%26_render%3Djson%22%20and%20itemPath%20%3D%20%22json.value.items%22%29%20and%20xpath%20%3D%20%22%2Fhtml%2Fbody%2Fdiv%22&amp;amp;format=xml&amp;amp;callback=phoningHome&quot;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #003366; font-weight: bold;">var</span> transactionObj <span style="color: #339933;">=</span> YAHOO.<span style="color: #660066;">util</span>.<span style="color: #660066;">Get</span>.<span style="color: #660066;">script</span><span style="color: #009900;">&#40;</span>sURL<span style="color: #339933;">,</span> <span style="color: #009900;">&#123;</span>
    onSuccess <span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>o<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>o.<span style="color: #660066;">purge</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
    onFailure <span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>YAHOO.<span style="color: #660066;">util</span>.<span style="color: #660066;">Dom</span>.<span style="color: #660066;">get</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;badge&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">innerHTML</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;error&quot;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
    scope     <span style="color: #339933;">:</span> <span style="color: #000066; font-weight: bold;">this</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #003366; font-weight: bold;">var</span> phoningHome <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>r<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #006600; font-style: italic;">//the callback function</span>
     YAHOO.<span style="color: #660066;">util</span>.<span style="color: #660066;">Dom</span>.<span style="color: #660066;">get</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;badge&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">innerHTML</span> <span style="color: #339933;">=</span> r.<span style="color: #660066;">results</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span></pre></div></div>

<p>And finally, the final example page <a href="http://paul.donnelly.org/demos/YQL_JSONP-X.html" target="_blank">here</a>, and <a href="view-source:http://paul.donnelly.org/demos/YQL_JSONP-X.html" target="_blank">source</a>.</p>
<p>Footnotes:</p>
<p>The main trouble with this method is, you have manually copy over the CSS from the site you are scraping from if you want to render their styling. If you copy over their entire style sheet, you also want to make sure it doesn&#8217;t clash with your existing styles.</p>
<p>Also, it&#8217;s quite easy for the publisher you are scraping from to insert a nasty &lt;script&gt; tag with javascript that does malicious things to your users or page &#8211; so be wary. If you want sanitized HTML output, add the <a href="http://developer.yahoo.com/yql/guide/sorting.html" target="_blank">sanitize </a>option at the end of your YQL query. As of this writing there is a bug if you want to sanitize the entire output &#8211; instead of using sanitize() use: sanitize(field=&#8221;)</p>
<p>If the html you are scraping from uses relative links, (most will) &#8211; I found using the &lt;base&gt; tag useful to ensure these links actually work -or you can regex the results and modify the links that way.</p>
<p>The example page I created is best used if &lt;iframed&gt; as a badge.</p>



Share:


	<a rel="nofollow" id="email" target="_blank" href="mailto:?subject=YQL%20and%20JSONP-X%20%28aka.%20json-p-x%2C%20jsonpx%2C%20json-px%29&amp;body=http%3A%2F%2Fpaul.donnelly.org%2F2009%2F07%2F08%2Fyql-and-jsonp-x%2F" title="E-mail this story to a friend!"><img src="http://paul.donnelly.org/blog/wp-content/plugins/sociable/images/email_link.png" title="E-mail this story to a friend!" alt="E-mail this story to a friend!" class="sociable-hovers" /></a>
	<a rel="nofollow" id="del.icio.us" target="_blank" href="http://delicious.com/post?url=http%3A%2F%2Fpaul.donnelly.org%2F2009%2F07%2F08%2Fyql-and-jsonp-x%2F&amp;title=YQL%20and%20JSONP-X%20%28aka.%20json-p-x%2C%20jsonpx%2C%20json-px%29&amp;notes=With%20all%20the%20buzz%20about%20YQL%27s%20new%20Insert%2FUpdate%2FDelete%2C%20a%20new%20feature%20JSONP-X%20was%20also%20released%20at%20the%20same%20time.%0D%0A%0D%0AJSONP-X%20is%20essentially%20an%20escaped%20XML%20string%20as%20a%20JSON%20result%20wrapped%20in%20a%20javascript%20callback%20function.%20To%20access%20this%20functionality" title="del.icio.us"><img src="http://paul.donnelly.org/blog/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a>
	<a rel="nofollow" id="yahoobuzz" target="_blank" href="http://buzz.yahoo.com/submit/?submitUrl=http%3A%2F%2Fpaul.donnelly.org%2F2009%2F07%2F08%2Fyql-and-jsonp-x%2F&amp;submitHeadline=YQL%20and%20JSONP-X%20%28aka.%20json-p-x%2C%20jsonpx%2C%20json-px%29&amp;submitSummary=With%20all%20the%20buzz%20about%20YQL%27s%20new%20Insert%2FUpdate%2FDelete%2C%20a%20new%20feature%20JSONP-X%20was%20also%20released%20at%20the%20same%20time.%0D%0A%0D%0AJSONP-X%20is%20essentially%20an%20escaped%20XML%20string%20as%20a%20JSON%20result%20wrapped%20in%20a%20javascript%20callback%20function.%20To%20access%20this%20functionality&amp;submitCategory=science&amp;submitAssetType=text" title="Yahoo! Buzz"><img src="http://paul.donnelly.org/blog/wp-content/plugins/sociable/images/yahoobuzz.png" title="Yahoo! Buzz" alt="Yahoo! Buzz" class="sociable-hovers" /></a>
	<a rel="nofollow" id="twitthis" target="_blank" href="" title="TwitThis"><img src="http://paul.donnelly.org/blog/wp-content/plugins/sociable/images/" title="TwitThis" alt="TwitThis" class="sociable-hovers" /></a>
	<a rel="nofollow" id="digg" target="_blank" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fpaul.donnelly.org%2F2009%2F07%2F08%2Fyql-and-jsonp-x%2F&amp;title=YQL%20and%20JSONP-X%20%28aka.%20json-p-x%2C%20jsonpx%2C%20json-px%29&amp;bodytext=With%20all%20the%20buzz%20about%20YQL%27s%20new%20Insert%2FUpdate%2FDelete%2C%20a%20new%20feature%20JSONP-X%20was%20also%20released%20at%20the%20same%20time.%0D%0A%0D%0AJSONP-X%20is%20essentially%20an%20escaped%20XML%20string%20as%20a%20JSON%20result%20wrapped%20in%20a%20javascript%20callback%20function.%20To%20access%20this%20functionality" title="Digg"><img src="http://paul.donnelly.org/blog/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a>
	<a rel="nofollow" id="facebook" target="_blank" href="http://www.facebook.com/share.php?u=http%3A%2F%2Fpaul.donnelly.org%2F2009%2F07%2F08%2Fyql-and-jsonp-x%2F&amp;t=YQL%20and%20JSONP-X%20%28aka.%20json-p-x%2C%20jsonpx%2C%20json-px%29" title="Facebook"><img src="http://paul.donnelly.org/blog/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a>
	<a rel="nofollow" id="dzone" target="_blank" href="http://www.dzone.com/links/add.html?url=http%3A%2F%2Fpaul.donnelly.org%2F2009%2F07%2F08%2Fyql-and-jsonp-x%2F&amp;title=YQL%20and%20JSONP-X%20%28aka.%20json-p-x%2C%20jsonpx%2C%20json-px%29" title="DZone"><img src="http://paul.donnelly.org/blog/wp-content/plugins/sociable/images/dzone.png" title="DZone" alt="DZone" class="sociable-hovers" /></a>
	<a rel="nofollow" id="print" target="_blank" href="http://www.printfriendly.com/print?url=http%3A%2F%2Fpaul.donnelly.org%2F2009%2F07%2F08%2Fyql-and-jsonp-x%2F&amp;partner=sociable" title="Print this article!"><img src="http://paul.donnelly.org/blog/wp-content/plugins/sociable/images/printfriendly.png" title="Print this article!" alt="Print this article!" class="sociable-hovers" /></a>


<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://paul.donnelly.org/2009/07/08/yql-and-jsonp-x/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Top 10 YQL execute links</title>
		<link>http://paul.donnelly.org/2009/05/02/top-10-yql-execute-links/</link>
		<comments>http://paul.donnelly.org/2009/05/02/top-10-yql-execute-links/#comments</comments>
		<pubDate>Sat, 02 May 2009 18:42:39 +0000</pubDate>
		<dc:creator>Paul Donnelly</dc:creator>
				<category><![CDATA[yahoo]]></category>
		<category><![CDATA[yql]]></category>

		<guid isPermaLink="false">http://paul.donnelly.org/?p=88</guid>
		<description><![CDATA[Some links about YQL&#8217;s new execute feature: http://developer.yahoo.net/blogs/theater/archives/2009/04/yql_execute_screencast.html http://www.yqlblog.net/blog/2009/04/29/do-it-your-way-with-execute-and-open-data-tables/ http://developer.yahoo.net/blog/archives/2009/04/yql_execute.html http://www.readwriteweb.com/archives/theres_a_great_amount_of.php http://ajaxian.com/archives/yql-execute-now-allows-you-to-convert-scraped-data-with-server-side-javascript http://simonwillison.net/2009/Apr/29/yql/ http://blog.programmableweb.com/2009/04/30/yahoos-yql-makes-the-internet-your-database/ http://www.cio.com/article/491215/Yahoo_Extends_YQL_Web_Data_Query_Platform http://radar.oreilly.com/2009/04/four-short-links-30-apr-2009.html http://www.pcworld.com/businesscenter/article/164067/yahoo_extends_yql_web_data_query_platform.html]]></description>
			<content:encoded><![CDATA[<p>Some links about YQL&#8217;s new execute feature:</p>
<ul>
<li><a href="http://developer.yahoo.net/blogs/theater/archives/2009/04/yql_execute_screencast.html">http://developer.yahoo.net/blogs/theater/archives/2009/04/yql_execute_screencast.html</a></li>
<li><a href="http://www.yqlblog.net/blog/2009/04/29/do-it-your-way-with-execute-and-open-data-tables/">http://www.yqlblog.net/blog/2009/04/29/do-it-your-way-with-execute-and-open-data-tables/</a></li>
<li><a href="http://developer.yahoo.net/blog/archives/2009/04/yql_execute.html">http://developer.yahoo.net/blog/archives/2009/04/yql_execute.html</a></li>
<hr />
<li><a href="http://www.readwriteweb.com/archives/theres_a_great_amount_of.php">http://www.readwriteweb.com/archives/theres_a_great_amount_of.php</a></li>
<li><a href="http://ajaxian.com/archives/yql-execute-now-allows-you-to-convert-scraped-data-with-server-side-javascript">http://ajaxian.com/archives/yql-execute-now-allows-you-to-convert-scraped-data-with-server-side-javascript</a></li>
<li><a href="http://simonwillison.net/2009/Apr/29/yql/">http://simonwillison.net/2009/Apr/29/yql/</a></li>
<li><a href="http://blog.programmableweb.com/2009/04/30/yahoos-yql-makes-the-internet-your-database/">http://blog.programmableweb.com/2009/04/30/yahoos-yql-makes-the-internet-your-database/</a></li>
<li><a href="http://www.cio.com/article/491215/Yahoo_Extends_YQL_Web_Data_Query_Platform">http://www.cio.com/article/491215/Yahoo_Extends_YQL_Web_Data_Query_Platform</a></li>
<li><a href="http://radar.oreilly.com/2009/04/four-short-links-30-apr-2009.html">http://radar.oreilly.com/2009/04/four-short-links-30-apr-2009.html</a></li>
<li><a href="http://www.pcworld.com/businesscenter/article/164067/yahoo_extends_yql_web_data_query_platform.html">http://www.pcworld.com/businesscenter/article/164067/yahoo_extends_yql_web_data_query_platform.html</a></li>
</ul>
<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://paul.donnelly.org/2009/05/02/top-10-yql-execute-links/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Yahoo Pipes will not be effected by the closing of Brickhouse</title>
		<link>http://paul.donnelly.org/2008/12/10/yahoo-pipes-will-not-be-effected-by-the-closing-of-brickhouse/</link>
		<comments>http://paul.donnelly.org/2008/12/10/yahoo-pipes-will-not-be-effected-by-the-closing-of-brickhouse/#comments</comments>
		<pubDate>Wed, 10 Dec 2008 19:45:31 +0000</pubDate>
		<dc:creator>Paul Donnelly</dc:creator>
				<category><![CDATA[yahoo]]></category>
		<category><![CDATA[pipes]]></category>

		<guid isPermaLink="false">http://paul.donnelly.org/?p=83</guid>
		<description><![CDATA[There has been some confusion around the net. http://www.techcrunch.com/2008/12/09/yahoo-to-close-brickhouse-by-end-of-year/ http://twitter.com/ccarmichael/statuses/1049692691 http://twitter.com/armoredtech/status/1049651550 http://twitter.com/clintlalonde/statuses/1049663508 http://twitter.com/armoredtech/statuses/1049650384 Yahoo Pipes will not be effected by the closing of Brickhouse. Pipes is currently under the Yahoo Open Social group. So don&#8217;t worry, your Pipes will still be around. Good luck to all the team members in Brickhouse and all of my [...]]]></description>
			<content:encoded><![CDATA[<p>There has been some confusion around the net.</p>
<p><a href="http://www.techcrunch.com/2008/12/09/yahoo-to-close-brickhouse-by-end-of-year/">http://www.techcrunch.com/2008/12/09/yahoo-to-close-brickhouse-by-end-of-year/</a><br />
<a href="http://twitter.com/ccarmichael/statuses/1049692691">http://twitter.com/ccarmichael/statuses/1049692691</a><br />
<a href="http://twitter.com/armoredtech/status/1049651550">http://twitter.com/armoredtech/status/1049651550</a><br />
<a href="http://twitter.com/clintlalonde/statuses/1049663508">http://twitter.com/clintlalonde/statuses/1049663508</a><br />
<a href="http://twitter.com/armoredtech/statuses/1049650384">http://twitter.com/armoredtech/statuses/1049650384</a></p>
<p>Yahoo Pipes will <strong>not</strong> be effected by the closing of Brickhouse. Pipes is currently under the Yahoo Open Social group. So don&#8217;t worry, your Pipes will still be around.</p>
<p>Good luck to all the team members in Brickhouse and all of my Yahoo co-workers that got laid off today.</p>
<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://paul.donnelly.org/2008/12/10/yahoo-pipes-will-not-be-effected-by-the-closing-of-brickhouse/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

