<?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>Jeez Tech &#187; YQL</title>
	<atom:link href="http://jeez.eu/tag/yql/feed/" rel="self" type="application/rss+xml" />
	<link>http://jeez.eu</link>
	<description>Jeez Aggressive Technology</description>
	<lastBuildDate>Mon, 24 May 2010 13:41:51 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='jeez.eu' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
		<item>
		<title>Technologies That Will Change The Web</title>
		<link>http://jeez.eu/2009/11/01/technologies-that-will-change-the-web/</link>
		<comments>http://jeez.eu/2009/11/01/technologies-that-will-change-the-web/#comments</comments>
		<pubDate>Sun, 01 Nov 2009 16:24:48 +0000</pubDate>
		<dc:creator>Kerasiotis Vasileios</dc:creator>
				<category><![CDATA[Services]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Google Wave]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Opera]]></category>
		<category><![CDATA[Service]]></category>
		<category><![CDATA[Social Media]]></category>
		<category><![CDATA[YQL]]></category>

		<guid isPermaLink="false">http://jeez.eu/?p=730</guid>
		<description><![CDATA[Some years ago, the mp3 format was invented. It was a market killer invention since there was a [...]]]></description>
			<content:encoded><![CDATA[<p>Some years ago, the mp3 format was invented. It was a market killer invention since there was a whole bunch of new products and hardware that came out to support it. We saw mp3 players in our rooms, cars and phones. We also saw companies distributing paid music rise and each teen has it&#8217;s mp3 player along with his/her books. Each time a killer invention comes out, there is a whole bunch of other products in the market to support it.</p>
<p>The Web, was another killer invension. Some new technologies that recently came out promise to re-invent the web and we will make an effort to showcase them here. We will also try to imagine some supporting products that these technologies might produce.</p>
<h3><a title="Yahoo Query Language" href="http://developer.yahoo.com/yql/guide/yql_guide.pdf" target="_blank">Select * from internet with YQL</a></h3>
<p><a href="http://jeez.eu/wp-content/uploads/2009/11/yql.gif" rel="lightbox[730]"><img class="alignnone size-full wp-image-733" title="yql" src="http://jeez.eu/wp-content/uploads/2009/11/yql.gif" alt="yql" width="563" height="235" /></a></p>
<p>One of the most promising technologies out there, is Yahoo&#8217;s YQL. Many people including me, believe that this platform is the next big thing. You can do thousand of diferrent things with YQL in so many diferrent areas that the moto is really &#8220;select * from internet&#8221;. The philosofy behind YQL is that anyone can make his data available for everyone in a specific way, so specific that someone who wants to access these data, should just use an SQL-syntax like language to get do it.</p>
<p>So YQL turns the web into a monsterous database waiting there for us to query it. How is this possible? Each web service should produce a <a title="Datatables" href="http://www.datatables.org/" target="_blank">datatable</a> with a specific format, which then other people can use to extract, insert or update data. We see <a title="Community Tables" href="http://developer.yahoo.com/yql/console/?q=show%20tables&amp;env=store://datatables.org/alltableswithkeys" target="_blank">hundreds of community tables</a> available in the YQL console.</p>
<p>In what way could YQL change the web? What if you used YQL to create a hotel booking site? Hotels could create datatables that would make hotels reservations, available rooms and pricing info available. Then we could do a YQL statement like this to get available rooms in San Fransisco:</p>
<pre class="brush: sql;">SELECT * FROM hotels.rooms.sf WHERE room=open</pre>
<p>The above example is fictional. YQL could be used in any way you would use a typical SQL database. Our article about <a href="http://jeez.eu/2009/09/25/using-yql-to-manage-your-yahoo-meme-account/" target="_blank">how to use yql to manage your meme account</a> will get you into it even faster.</p>
<h3><a title="Opera Unite" href="http://unite.opera.com/" target="_blank">Take the web back with Opera Unite</a></h3>
<p><a href="http://jeez.eu/wp-content/uploads/2009/11/opera-unite-screen.png" rel="lightbox[730]"><img class="alignnone size-large wp-image-734" title="opera-unite-screen" src="http://jeez.eu/wp-content/uploads/2009/11/opera-unite-screen-600x436.png" alt="opera-unite-screen" width="600" height="436" /></a></p>
<p>Opera Unite is able to turn your browser (Opera) into a web server. This means you can share content directly with friends without having to upload anything to a Web site. Opera Unite is a Web server running inside the Opera Web browser, allowing the user to install applications and share these applications with their friends and colleagues (or everyone, if they wish). The Opera Unite server provides a proxy between the server and its clients (found at operaunite.com) to avoid the need for any special firewall configuration.</p>
<p>So in other words, you run your own hosting service. You can use standard techniques like JavaScript and HTML to <a title="Opera Unite Developer API" href="http://dev.opera.com/articles/view/opera-unite-developer-primer/" target="_blank">create applications</a> and then publish them for the world to see right from your own browser. There are already a <a title="Opera Unite Applications" href="http://unite.opera.com/applications/" target="_blank">some applications</a> that utilize the Opera Unite API and my favorite one is <a title="Twicli Unite" href="http://unite.opera.com/application/382/" target="_blank">Twicli</a>.</p>
<p>Most of the Opera Unite use cases could be for social networking but it could be used as a collaboration tool too.</p>
<h3><a title="Google Wave" href="http://wave.google.com" target="_blank">Collaborate with Google Wave</a></h3>
<p><a href="http://jeez.eu/wp-content/uploads/2009/11/google_wave.png" rel="lightbox[730]"><img class="alignnone size-full wp-image-735" title="google_wave" src="http://jeez.eu/wp-content/uploads/2009/11/google_wave.png" alt="google_wave" width="500" height="326" /></a></p>
<p>Google Wave is an online tool for real-time communication and collaboration. A wave can be both a conversation and a document where people can discuss and work together using richly formatted text, photos, videos, maps, and more. With Google wave the possibilities are endless since the wave API allows you to build anything you want.</p>
<p>Google Wave supports <a href="http://wave.google.com/help/wave/extensions.html" target="_blank">robots, gadgets,extensions</a> and embeding that makes it so powerful for online collaboration that any other tool could be. We recently posted a <a href="http://jeez.eu/2009/10/11/creating-a-google-wave-extension-in-5-steps/" target="_blank">tutorial on how to create a feed reader extension</a> for Google Wave too.</p>
<p>Recently<a title="Google Wave Use Cases: Arts &amp; Filmmaking" href="http://www.readwriteweb.com/archives/google_wave_use_cases_arts_filmmaking.php" target="_blank"> there was a post in the ReadWriteWeb blog</a> with a use case of Google Wave for artists and Filmmaking and everyday there are new ideas on how Wave could be used.</p>
<h3><a title="Pubsubhubbub" href="http://code.google.com/p/pubsubhubbub/" target="_blank">Re-inventing RSS with PubSubHubBub</a></h3>
<p><a href="http://jeez.eu/wp-content/uploads/2009/11/pushbutton-delivery.png" rel="lightbox[730]"><img class="alignnone size-full wp-image-736" title="pushbutton-delivery" src="http://jeez.eu/wp-content/uploads/2009/11/pushbutton-delivery.png" alt="pushbutton-delivery" width="450" height="300" /></a></p>
<p>Except it&#8217;s strange name, this protocol promises to deliver updates from feeds without polling. So it basically allows us to be informed if our favorite blog has updated news without the need to reload this blog&#8217;s feed. It uses this flow (taken from <a href="http://www.scripting.com/stories/2009/07/10/googlesPubsubhubbub.html" target="_blank">Scripting.com</a>):</p>
<ol>
<li>Any feed that wants to participate in this network must add a bit to the feed that indicates which ping server is handling notifications on its behalf. There can be more than one.</li>
<li>When a subscribing application initially parses the feed and notices this bit, it sends a notification to each server saying &#8220;I want to be notified when this feed updates&#8221;.</li>
<li>When the feed updates, it pings each of the servers it has registered with saying &#8220;I have updated&#8221;.</li>
<li>The server then pings each of the subscribers saying &#8220;He updated&#8221;.</li>
</ol>
<p>At Scripting.com they say that this protocol could be used to create a Twitter-like service without Twitter&#8217;s limitations of 140 chars or hashtags. We thought of another use also.</p>
<p>What about creating a REAL real-time search engine that would update it&#8217;s index anytime a feed is updated? This way, we could have a search engine that will be able to show the latest news in seconds after the news got published.</p>
<h3><a title="HTML5" href="http://www.w3.org/TR/html5/" target="_blank">HTML5</a></h3>
<p><a href="http://jeez.eu/wp-content/uploads/2009/11/html5-serializations.png" rel="lightbox[730]"><img class="alignnone size-full wp-image-737" title="html5-serializations" src="http://jeez.eu/wp-content/uploads/2009/11/html5-serializations.png" alt="html5-serializations" width="573" height="357" /></a></p>
<p>The new HTML specification is here and it brings marvelous new features to use. Canvas, Video, Audio and Drag n Drop are some of it&#8217;s features that will surely change the way we surf the net. One of it&#8217;s coolest features is the ability to cache web applications and use them offline. It is not weird that technologies like Google Wave depend on HTML5 to exist.</p>
<p>Apart from being the tool to create revolutionary applications and services, HTML5 is itself a revolution. Many browser players are contributing to the creation of the draft (Apple, Microsoft, Mozilla and Opera), each from his own point of view and interest but they all try to make this a great new era for the web.</p>
<img src="http://jeez.eu/?ak_action=api_record_view&id=730&type=feed" alt="" /><p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fjeez.eu%2F2009%2F11%2F01%2Ftechnologies-that-will-change-the-web%2F&amp;linkname=Technologies%20That%20Will%20Change%20The%20Web"><img src="http://jeez.eu/wp-content/plugins/add-to-any/share_save_256_24.png" width="256" height="24" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://jeez.eu/2009/11/01/technologies-that-will-change-the-web/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Using YQL To Manage Your Yahoo! meme Account</title>
		<link>http://jeez.eu/2009/09/25/using-yql-to-manage-your-yahoo-meme-account/</link>
		<comments>http://jeez.eu/2009/09/25/using-yql-to-manage-your-yahoo-meme-account/#comments</comments>
		<pubDate>Fri, 25 Sep 2009 15:39:01 +0000</pubDate>
		<dc:creator>Kerasiotis Vasileios</dc:creator>
				<category><![CDATA[Social Media]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Developing]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Service]]></category>
		<category><![CDATA[YQL]]></category>

		<guid isPermaLink="false">http://jeez.eu/2009/09/25/using-yql-to-manage-your-yahoo-meme-account/</guid>
		<description><![CDATA[Yahoo! Query Language is an expressive SQL-like language that lets you query, filter, join, and update data across [...]]]></description>
			<content:encoded><![CDATA[<p>Yahoo! Query Language is an expressive SQL-like language that lets you query, filter, join, and update data across the Web. The new Yahoo service, meme, is a social network (tumblr like) that allows users to share photos, audio, text and video with each other. You can read <a title="meme from Yahoo!. My first impressions" href="http://jeez.eu/2009/09/17/meme-from-yahoo-my-first-impressions/" target="_blank">a review for meme</a> here.</p>
<p><a href="http://jeez.eu/wp-content/uploads/2009/09/meme.png" rel="lightbox[392]"><img class="alignnone size-large wp-image-285" title="meme" src="http://jeez.eu/wp-content/uploads/2009/09/meme-600x375.png" alt="meme" width="600" height="375" /></a></p>
<p>Meme, got it&#8217;s place in the YQL and we will show you here how to manage your meme account from your own site.</p>
<p>First of all you need to <a title="for meme" href="http://jeez.eu/wp-content/files/meme.rar" target="_blank">download this file</a>. It is a php library that manages queries to the YQL with PHP. It also includes the oAuth library and a JSON parser. The next step is to <a title="Create an API key" href="http://developer.apps.yahoo.com/wsregapp/" target="_blank">create an API key</a> to use with the library. We have to note that some features don&#8217;t need to get an API key to use them.</p>
<div id="attachment_394" class="wp-caption alignnone" style="width: 610px"><a href="http://jeez.eu/wp-content/uploads/2009/09/api.png" rel="lightbox[392]"><img class="size-large wp-image-394" title="Getting an API from Yahoo" src="http://jeez.eu/wp-content/uploads/2009/09/api-600x501.png" alt="Getting an API from Yahoo" width="600" height="501" /></a><p class="wp-caption-text">Getting an API from Yahoo</p></div>
<p>So lets explain what YQL is. YQL is an SQL like language. So the basic syntax is exactly the same as SQL. An example query is this:</p>
<pre class="brush: sql;">select * from weather.forecast where location=90210</pre>
<p>The YQL is based on data tables. Meme is the last addition to the data tables provided by Yahoo.</p>
<p>Lets move to some code. We first need to write some code that will query the YQL service and your meme account in general.</p>
<p>The Query:</p>
<pre class="brush: php;">function query($yql) {

require_once &quot;Yahoo.inc&quot;;
$app = new YahooApplication($clientKey,$sharedKey);
$response = $app-&gt;client-&gt;get(
sprintf(&quot;http://%s/v1/yql&quot;,
QUERY_WS_HOSTNAME),
array('q' =&gt; $yql, 'format' =&gt; 'xml'), 30);

if(is_null($response) || $response[&quot;code&quot;] != 200) {
return NULL;
}

$resultSet = $response[&quot;responseBody&quot;];

return $resultSet;
}
</pre>
<p>The <strong>$clientKey</strong> and <strong>$sharedKey</strong> variables are the ones you got from the Yahoo API generator page. The function above will manage the queries to the YQL service. You can save these vars in a database table and call them whenever you need them.</p>
<p>We also see that we set the response to be xml. I like working with arrays than xml in PHP. So, we will create another function that will parse xml code to array (Credits for this function should be given to the author but i lost the referring URL to the author&#8217;s site. If it is yours please contact with us to get the credit) :</p>
<pre class="brush: php;">function xml2array($contents, $get_attributes = 1, $priority = 'tag'){
$parser = xml_parser_create('');
xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, &quot;UTF-8&quot;);
xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
xml_parse_into_struct($parser, trim($contents), $xml_values);
xml_parser_free($parser);
if (!$xml_values)
return; //Hmm...
$xml_array = array ();
$parents = array ();
$opened_tags = array ();
$arr = array ();
$current = &amp;amp; $xml_array;
$repeated_tag_index = array ();
foreach ($xml_values as $data)
{
unset ($attributes, $value);
extract($data);
$result = array ();
$attributes_data = array ();
if (isset ($value))
{
if ($priority == 'tag')
$result = $value;
else
$result['value'] = $value;
}
if (isset ($attributes) and $get_attributes)
{
foreach ($attributes as $attr =&gt; $val)
{
if ($priority == 'tag')
$attributes_data[$attr] = $val;
else
$result['attr'][$attr] = $val; //Set all the attributes in a array called 'attr'
}
}
if ($type == &quot;open&quot;)
{
$parent[$level -1] = &amp;amp; $current;
if (!is_array($current) or (!in_array($tag, array_keys($current))))
{
$current[$tag] = $result;
if ($attributes_data)
$current[$tag . '_attr'] = $attributes_data;
$repeated_tag_index[$tag . '_' . $level] = 1;
$current = &amp;amp; $current[$tag];
}
else
{
if (isset ($current[$tag][0]))
{
$current[$tag][$repeated_tag_index[$tag . '_' . $level]] = $result;
$repeated_tag_index[$tag . '_' . $level]++;
}
else
{
$current[$tag] = array (
$current[$tag],
$result
);
$repeated_tag_index[$tag . '_' . $level] = 2;
if (isset ($current[$tag . '_attr']))
{
$current[$tag]['0_attr'] = $current[$tag . '_attr'];
unset ($current[$tag . '_attr']);
}
}
$last_item_index = $repeated_tag_index[$tag . '_' . $level] - 1;
$current = &amp;amp; $current[$tag][$last_item_index];
}
}
elseif ($type == &quot;complete&quot;)
{
if (!isset ($current[$tag]))
{
$current[$tag] = $result;
$repeated_tag_index[$tag . '_' . $level] = 1;
if ($priority == 'tag' and $attributes_data)
$current[$tag . '_attr'] = $attributes_data;
}
else
{
if (isset ($current[$tag][0]) and is_array($current[$tag]))
{
$current[$tag][$repeated_tag_index[$tag . '_' . $level]] = $result;
if ($priority == 'tag' and $get_attributes and $attributes_data)
{
$current[$tag][$repeated_tag_index[$tag . '_' . $level] . '_attr'] = $attributes_data;
}
$repeated_tag_index[$tag . '_' . $level]++;
}
else
{
$current[$tag] = array (
$current[$tag],
$result
);
$repeated_tag_index[$tag . '_' . $level] = 1;
if ($priority == 'tag' and $get_attributes)
{
if (isset ($current[$tag . '_attr']))
{
$current[$tag]['0_attr'] = $current[$tag . '_attr'];
unset ($current[$tag . '_attr']);
}
if ($attributes_data)
{
$current[$tag][$repeated_tag_index[$tag . '_' . $level] . '_attr'] = $attributes_data;
}
}
$repeated_tag_index[$tag . '_' . $level]++; //0 and 1 index is already taken
}
}
}
elseif ($type == 'close')
{
$current = &amp;amp; $parent[$level -1];
}
}
return ($xml_array);
}</pre>
<p>Now all we have to do is query the YQL service.</p>
<p>Notes:</p>
<p>The <strong>$guid</strong> variable is an alphanumeric 26 chars long hash. For example Jeez Tech&#8217;s guid is : <em>3FLGPU5NXTTGNZYK76WX2DD5SQ</em></p>
<p>The <strong>$locale</strong> variable is used to set the country locale of which you need data.</p>
<p><strong>Get the followers of a meme</strong>:</p>
<pre class="brush: php;">function getFollowers($guid){
$yql = 'SELECT * FROM meme.followers WHERE owner_guid=&quot;'.$guid.'&quot;';
$results = query($yql);
$results = xml2array($results);
return $results['query'];
}</pre>
<p><strong>Get a list of people this meme follows</strong>:</p>
<pre class="brush: php;">function getFollowing($guid){
$yql = 'SELECT * FROM meme.following WHERE owner_guid=&quot;'.$guid.'&quot;';
$results = query($yql);
$results = xml2array($results);
return $results['query'];
}</pre>
<p><strong>Search in meme</strong>:</p>
<pre class="brush: php;">function searchMeme($query){
$yql = 'SELECT * FROM meme.memes WHERE query=&quot;'.$query.'&quot;';
$results = query($yql);
$results = xml2array($results);
return $results['query'];
}</pre>
<p><strong>Get the Popular List</strong>:</p>
<pre class="brush: php;">function getPopular($locale){
$yql = 'SELECT * FROM meme.popular WHERE locale=&quot;'.$locale.'&quot;';
$results = query($yql);
$results = xml2array($results);
return $results['query'];
}</pre>
<p><strong>Get the Timeline of a meme</strong>:</p>
<pre class="brush: php;">function getTimeline($guid){
$yql = 'SELECT * FROM meme.posts WHERE owner_guid=&quot;'.$guid.'&quot;';
$results = query($yql);
$results = xml2array($results);
return $results['query'];
}</pre>
<p><strong>Get your Dashboard:</strong></p>
<pre class="brush: php;">function getDashboard(){
$yql = 'SELECT * FROM meme.user.dashboard';
$results = query($yql);
$results = xml2array($results);
return $results['query'];
}</pre>
<p><strong>Follow a meme:</strong></p>
<pre class="brush: php;">function follow($guid){
$yql = 'INSERT INTO meme.user.following (guid) VALUES (&quot;'.$guid.'&quot;)';
$results = query($yql);
$results = xml2array($results);
return $results['query'];
}</pre>
<p>You can use all of the above functions like this:</p>
<pre class="brush: php;">$followers = getFollowers('GUID HERE');</pre>
<p>We would like to have some commentary on this one and maybe the development of a Wordpress plugin would be nice. Any volunteers?</p>
<img src="http://jeez.eu/?ak_action=api_record_view&id=392&type=feed" alt="" /><p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fjeez.eu%2F2009%2F09%2F25%2Fusing-yql-to-manage-your-yahoo-meme-account%2F&amp;linkname=Using%20YQL%20To%20Manage%20Your%20Yahoo%21%20meme%20Account"><img src="http://jeez.eu/wp-content/plugins/add-to-any/share_save_256_24.png" width="256" height="24" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://jeez.eu/2009/09/25/using-yql-to-manage-your-yahoo-meme-account/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>
