<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;C0YNQn09cSp7ImA9WxNbFEo.&quot;"><id>tag:blogger.com,1999:blog-2443724041307041823</id><updated>2009-11-17T07:19:53.369-08:00</updated><title type="text">YouTube API Blog</title><subtitle type="html">Your official source for information on the YouTube API.</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://apiblog.youtube.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://apiblog.youtube.com/" /><link rel="hub" href="http://pubsubhubbub.appspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/2443724041307041823/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>A Googler</name><email>noreply@blogger.com</email></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>75</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><link rel="self" href="http://feeds.feedburner.com/YoutubeApiBlog" type="application/atom+xml" /><feedburner:emailServiceId>YoutubeApiBlog</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><entry gd:etag="W/&quot;C0YNQn08cSp7ImA9WxNbFEo.&quot;"><id>tag:blogger.com,1999:blog-2443724041307041823.post-8410057462189566196</id><published>2009-11-17T07:16:00.000-08:00</published><updated>2009-11-17T07:19:53.379-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-17T07:19:53.379-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="direct" /><category scheme="http://www.blogger.com/atom/ns#" term="uploads" /><category scheme="http://www.blogger.com/atom/ns#" term="embed" /><title>Enrich your site with YouTube Direct</title><content type="html">&lt;span class="Apple-style-span" style="font-family: Verdana; font-size: 13px; "&gt;Today we announced the launch of &lt;a id="s6a." href="http://youtube-global.blogspot.com/2009/11/connecting-citizens-and-journalists.html" title="YouTube Direct" style="color: rgb(85, 26, 139); "&gt;YouTube Direct&lt;/a&gt;, a new tool built on top of YouTube's public APIs that enables any developer to solicit video submissions on their website, powered by YouTube.&lt;br /&gt;&lt;br /&gt;Users upload their videos directly on the developer's website, after which the developer can review the submissions and select the best ones to showcase. Since these videos live on YouTube, users are able to reach YouTube's large user base directly while also getting broader exposure and editorial validation for the videos they create.&lt;br /&gt;&lt;br /&gt;Although YouTube Direct was originally created with our news partners in mind, we believe that other developers and website owners can benefit from it as well. To put YouTube Direct in the hands of as many developers as possible, we open sourced the bulk of the code and designed it to run on &lt;a id="tg2f" href="http://appengine.google.com/" title="Google App Engine" style="color: rgb(85, 26, 139); "&gt;Google App Engine&lt;/a&gt; - Google's scalable hosting platform. This enables developers to easily deploy their own instance of the tool and take advantage of App Engine's scalability and low cost. The videos themselves are served from the same infrastructure that powers YouTube.com.&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/uFt9gapWLMU&amp;hl=en_US&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/uFt9gapWLMU&amp;hl=en_US&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;span class="Apple-style-span"  style="font-family:Arial, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;Visit &lt;a id="sroc" href="http://code.google.com/apis/youtube/ytdirect.html" title="YouTube Direct for Developers page" style="color: rgb(85, 26, 139); "&gt;YouTube Direct for Developers page&lt;/a&gt; to read more about it or go directly to the &lt;a id="uo.s" href="http://code.google.com/p/youtube-direct" title="YouTube Direct's project page"&gt;project page&lt;/a&gt; to download the code. As always, we'd love to hear your feedback on this new tool. Drop us a line in &lt;a id="q.2k" href="http://groups.google.com/group/youtube-api-gdata" title="YouTube API Developer Forum" style="color: rgb(85, 26, 139); "&gt;YouTube's Developer Forum&lt;/a&gt;.&lt;/div&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2443724041307041823-8410057462189566196?l=apiblog.youtube.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/YoutubeApiBlog/~4/zjxFoPHfuIU" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2443724041307041823/posts/default/8410057462189566196?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2443724041307041823/posts/default/8410057462189566196?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/YoutubeApiBlog/~3/zjxFoPHfuIU/enrich-your-site-with-youtube-direct.html" title="Enrich your site with YouTube Direct" /><author><name>Jeffrey Posnick</name><uri>http://www.blogger.com/profile/12266211780281941403</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="17334247292451043294" /></author><feedburner:origLink>http://apiblog.youtube.com/2009/11/enrich-your-site-with-youtube-direct.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak8GQXc6cCp7ImA9WxNUGEU.&quot;"><id>tag:blogger.com,1999:blog-2443724041307041823.post-6960592291750978280</id><published>2009-11-10T13:31:00.000-08:00</published><updated>2009-11-10T13:33:40.918-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-10T13:33:40.918-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="staging" /><title>New YouTube API Version Available for Testing</title><content type="html">&lt;span class="Apple-style-span"   style="  ;font-family:Verdana;font-size:13px;"&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;While we don't normally call out new releases of the Google Data YouTube API on this blog, we wanted to draw specific attention to the version that has just been pushed out to our staging servers. There are two specific changes that we'd like to give our developers and partners a chance to test before they go live. Both changes affect important areas of the API: &lt;a href="http://code.google.com/apis/youtube/2.0/developers_guide_protocol_clientlogin.html" id="ue97" target="_blank" title="ClientLogin authentication" style="color: rgb(85, 26, 139); "&gt;ClientLogin authentication&lt;/a&gt;, and playback URLs in &lt;a href="http://code.google.com/apis/youtube/2.0/reference.html#youtube_data_api_tag_media:content" id="b0i:" target="_blank" title="media:content entries" style="color: rgb(85, 26, 139); "&gt;media:content entries&lt;/a&gt;.&lt;/div&gt;&lt;br /&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;We fully intend for the changes to be backwards compatible, and from the developer's perspective you should not have to change any code. But testing your code is always a best practice, so if you rely on ClientLogin or retrieving media playback URLs from the Google Data YouTube API, please &lt;a href="http://apiblog.youtube.com/2008/11/all-worlds-stage.html" id="ifcn" target="_blank" title="repoint your code to http://stage.gdata.youtube.com" style="color: rgb(85, 26, 139); "&gt;repoint your code to http://stage.gdata.youtube.com&lt;/a&gt; and confirm functionality.&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; text-align: left; "&gt;Any incompatibilities should be reported as soon as possible in our &lt;a href="http://groups.google.com/group/youtube-api-gdata" id="mlin" target="_blank" title="YouTube API Developer Forum" style="color: rgb(85, 26, 139); "&gt;YouTube API Developer Forum&lt;/a&gt;. We expect to move the changes from the staging environment into production on November 17.&lt;/div&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2443724041307041823-6960592291750978280?l=apiblog.youtube.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/YoutubeApiBlog/~4/tpSMyDUQmDo" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2443724041307041823/posts/default/6960592291750978280?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2443724041307041823/posts/default/6960592291750978280?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/YoutubeApiBlog/~3/tpSMyDUQmDo/new-youtube-api-version-available-for.html" title="New YouTube API Version Available for Testing" /><author><name>Jeffrey Posnick</name><uri>http://www.blogger.com/profile/12266211780281941403</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="17334247292451043294" /></author><feedburner:origLink>http://apiblog.youtube.com/2009/11/new-youtube-api-version-available-for.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkAEQnczfCp7ImA9WxNUE0s.&quot;"><id>tag:blogger.com,1999:blog-2443724041307041823.post-7803136323596501160</id><published>2009-11-04T13:03:00.000-08:00</published><updated>2009-11-04T13:05:03.984-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-04T13:05:03.984-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="legacy" /><category scheme="http://www.blogger.com/atom/ns#" term="decommission" /><title>Final Decommission Notice for the Legacy YouTube API</title><content type="html">&lt;span class="Apple-style-span"   style="  ;font-family:Verdana;font-size:13px;"&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;It's been several years since we've released the &lt;a href="http://code.google.com/apis/youtube/getting_started.html#data_api" id="te:6" target="_blank" title="GData-based YouTube API" style="color: rgb(85, 26, 139); "&gt;Google Data-based YouTube API&lt;/a&gt;, and in that time we've been encouraging developers who used the legacy YouTube API to upgrade before we pull the metaphoric plug on that older version. At this point, all but a handful of holdouts have upgraded, and as of November 11, 2009, the legacy YouTube API will cease operation.&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;If you're using one of our &lt;a href="http://code.google.com/apis/youtube/code.html" id="vsbi" target="_blank" title="YouTube API client libraries" style="color: rgb(85, 26, 139); "&gt;YouTube API client libraries&lt;/a&gt;, then you're definitely making use of the modern Google Data YouTube API. If you're manually making HTTP requests to a URL whose hostname contains &lt;span class="Apple-style-span"  style="font-family:'Courier New';"&gt;gdata.youtube.com&lt;/span&gt;, then you're also good to go. If you think you might still be using the legacy YouTube API but aren't sure, take a look at some of the example legacy API calls in this &lt;a href="http://code.google.com/apis/youtube/migration.html" id="i4.-" target="_blank" title="migration guide" style="color: rgb(85, 26, 139); "&gt;migration guide&lt;/a&gt;. If it turns out that you are still using the older API, then the migration guide will give you the information you need to upgrade – and be sure to do so before November 11!&lt;/div&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2443724041307041823-7803136323596501160?l=apiblog.youtube.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/YoutubeApiBlog/~4/Exju6MBKS8s" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2443724041307041823/posts/default/7803136323596501160?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2443724041307041823/posts/default/7803136323596501160?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/YoutubeApiBlog/~3/Exju6MBKS8s/final-decommission-notice-for-legacy.html" title="Final Decommission Notice for the Legacy YouTube API" /><author><name>Jeffrey Posnick</name><uri>http://www.blogger.com/profile/12266211780281941403</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="17334247292451043294" /></author><feedburner:origLink>http://apiblog.youtube.com/2009/11/final-decommission-notice-for-legacy.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkUFSHs_eSp7ImA9WxNVGU4.&quot;"><id>tag:blogger.com,1999:blog-2443724041307041823.post-8847961565615430250</id><published>2009-10-30T13:13:00.000-07:00</published><updated>2009-10-30T13:23:39.541-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-30T13:23:39.541-07:00</app:edited><title>Cleaning Up Our Embeds</title><content type="html">&lt;div&gt;For the longest time, official YouTube video embed codes have contained embarrassingly malformed URLs; the first URL parameter (at the end of URLs) should always start with a ? character, but our URL parameters begin with &amp;amp;. That looks something like this:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;  http://www.youtube.com/v/0XjwoVqM_qE&amp;amp;feature=player_embedded&amp;amp;fs=1 (incorrect)&lt;/div&gt;&lt;div&gt;  http://www.youtube.com/v/0XjwoVqM_qE?feature=player_embedded&amp;amp;fs=1 (correct)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Fortunately, we've found a way to use correct URLs without breaking old browsers and we can't wait to do it.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Speaking of changes to the embed code, we'll also be tweaking the HTML content. The new YouTube embed code is leaner and still works on everything from ancient desktop browsers to modern smart phones. You won't find another snippet of HTML that's as battle-tested and mother-approved! Here's a preview of the new, streamlined format:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;br /&gt;&lt;param name="movie" value="http://www.youtube.com/v/0XjwoVqM_qE?color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;hl=en&amp;amp;feature=player_embedded&amp;amp;fs=1"&gt;&lt;br /&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;br /&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;br /&gt;&lt;embed src="http://www.youtube.com/v/0XjwoVqM_qE?color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;hl=en&amp;amp;feature=player_embedded&amp;amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="425" height="344"&gt;&lt;/embed&gt;&lt;br /&gt;&lt;/object&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;And here's what the HTML looks like:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&amp;lt;object width="425" height="344"&amp;gt;&lt;br /&gt;&amp;lt;param name="movie" value="http://www.youtube.com/v/0XjwoVqM_qE?color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;hl=en&amp;amp;feature=player_embedded&amp;amp;fs=1"&amp;gt;&lt;br /&gt;&amp;lt;param name="allowFullScreen" value="true"&amp;gt;&lt;br /&gt;&amp;lt;param name="allowScriptAccess" value="always"&amp;gt;&lt;br /&gt;&amp;lt;embed src="http://www.youtube.com/v/0XjwoVqM_qE?color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;hl=en&amp;amp;feature=player_embedded&amp;amp;fs=1"&lt;br /&gt;type="application/x-shockwave-flash" allowfullscreen="true"&lt;br /&gt;allowScriptAccess="always" width="425" height="344"&amp;gt;&lt;br /&gt;&amp;lt;/object&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you grab YouTube embed codes by hand from YouTube.com, or from the YouTube Player APIs or oEmbed, you'll start getting this updated HTML soon. As for all the embeds already on the web: worry not, those will continue to work forever.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2443724041307041823-8847961565615430250?l=apiblog.youtube.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/YoutubeApiBlog/~4/kduNnPQcpJ0" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2443724041307041823/posts/default/8847961565615430250?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2443724041307041823/posts/default/8847961565615430250?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/YoutubeApiBlog/~3/kduNnPQcpJ0/cleaning-up-our-embeds.html" title="Cleaning Up Our Embeds" /><author><name>Phil Harnish</name><uri>http://www.blogger.com/profile/13021892132093155173</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="08484898287717449648" /></author><feedburner:origLink>http://apiblog.youtube.com/2009/10/cleaning-up-our-embeds.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0INSHk4cCp7ImA9WxNWFUg.&quot;"><id>tag:blogger.com,1999:blog-2443724041307041823.post-1044786734109220101</id><published>2009-10-14T15:31:00.000-07:00</published><updated>2009-10-14T15:33:19.738-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-14T15:33:19.738-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="chromeless" /><category scheme="http://www.blogger.com/atom/ns#" term="player" /><category scheme="http://www.blogger.com/atom/ns#" term="actionscript" /><category scheme="http://www.blogger.com/atom/ns#" term="flash" /><title>The ActionScript 3 YouTube Chromeless Player is Now Live</title><content type="html">&lt;span class="Apple-style-span" style="background-color: rgb(255, 255, 255); font-family: Verdana; font-size: 13px; "&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;We have some good news for developers who integrate YouTube videos into their ActionScript 3 Flash applications: the official YouTube Chromeless Player API has been updated to natively support ActionScript 3!&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;Previous to this release, ActionScript 3 developers had to rely on wrapper libraries that bridged the gap between the native ActionScript 2 API and their own ActionScript 3 code. We're thrilled that intrepid developers were able to patch things together on their own and share their code with the rest of the community. Now that there's official support for using the chromeless player from ActionScript 3, everyone should have more time to focus on writing compelling Flash applications, rather than dealing with the unique issues that cross-language coding entails.&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;Please check out our &lt;a href="http://code.google.com/apis/youtube/flash_api_reference.html" id="smhq" target="_blank" title="ActionScript 3 documentation" style="color: rgb(85, 26, 139); "&gt;ActionScript 3 documentation&lt;/a&gt;, and let us know what you think of the new API in our &lt;a href="http://groups.google.com/group/youtube-api-gdata" id="e6vt" target="_blank" title="developer forum" style="color: rgb(85, 26, 139); "&gt;developer forum&lt;/a&gt;.&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;With the launch of ActionScript 3 support, we're officially deprecating the &lt;a href="http://code.google.com/apis/youtube/flash_api_reference_as2.html" id="eikc" target="_blank" title="ActionScript 2 YouTube Chromeless Player API" style="color: rgb(85, 26, 139); "&gt;ActionScript 2 YouTube Chromeless Player API&lt;/a&gt;. As per our YouTube API deprecation policy, detailed in our &lt;a href="http://code.google.com/apis/youtube/terms.html" id="v3rr" target="_blank" title="Terms of Service" style="color: rgb(85, 26, 139); "&gt;Terms of Service&lt;/a&gt;, we will continue to operate the ActionScript 2 API for a period of three years (until October 14, 2012).&lt;/div&gt;&lt;br /&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;Cheers,&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;-The YouTube API Team&lt;/div&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2443724041307041823-1044786734109220101?l=apiblog.youtube.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/YoutubeApiBlog/~4/5siFAQmoNuE" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2443724041307041823/posts/default/1044786734109220101?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2443724041307041823/posts/default/1044786734109220101?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/YoutubeApiBlog/~3/5siFAQmoNuE/actionscript-3-youtube-chromeless.html" title="The ActionScript 3 YouTube Chromeless Player is Now Live" /><author><name>Jeffrey Posnick</name><uri>http://www.blogger.com/profile/12266211780281941403</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="17334247292451043294" /></author><feedburner:origLink>http://apiblog.youtube.com/2009/10/actionscript-3-youtube-chromeless.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0EMR3Y5fCp7ImA9WxNWE0o.&quot;"><id>tag:blogger.com,1999:blog-2443724041307041823.post-426936227490051029</id><published>2009-10-12T11:20:00.000-07:00</published><updated>2009-10-12T11:21:26.824-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-12T11:21:26.824-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="uploads" /><title>Direct Uploads Server Migration</title><content type="html">&lt;span class="Apple-style-span" style="background-color: rgb(255, 255, 255); font-family: Verdana; font-size: 13px; "&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;We first &lt;a id="p8zq" href="http://apiblog.youtube.com/2009/06/public-service-announcement-upload.html" title="announced" style="color: rgb(85, 26, 139); "&gt;announced&lt;/a&gt; our new API upload infrastructure back in June and asked developers to test their YouTube API code against our staging environment.&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;Since then, we've started deploying the new upload infrastructure to production machines in a phased manner. Last month, we transitioned &lt;a id="nj9s" href="http://code.google.com/apis/youtube/2.0/developers_guide_protocol_browser_based_uploading.html" title="browser-based API uploads" style="color: rgb(85, 26, 139); "&gt;browser-based API uploads&lt;/a&gt; to the new servers, and have been closely monitoring performance and error rates to ensure that there were no unintended side effects.&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;We're now ready to begin the transition for &lt;a id="fi4:" href="http://code.google.com/apis/youtube/2.0/developers_guide_protocol_direct_uploading.html" title="direct uploads" style="color: rgb(85, 26, 139); "&gt;direct uploads&lt;/a&gt;. Starting today, a small percentage of direct uploads traffic will automatically be routed to our new servers. We will be monitoring traffic over the next few weeks and gradually increasing the traffic that the new servers receive until we have fully completed the migration.&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;As a developer, you won't have to make any changes in your code to take advantage of the increased reliability and bug fixes found in the new infrastructure. While we do expect that this new infrastructure will be fully backwards compatible, if you do notice any change in your application's behavior with regard to direct uploads, please let us know in our &lt;a id="u51f" href="http://groups.google.com/group/youtube-api-gdata" title="developer group" style="color: rgb(85, 26, 139); "&gt;developer group&lt;/a&gt;.&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;Cheers,&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;-The YouTube API Team&lt;/div&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2443724041307041823-426936227490051029?l=apiblog.youtube.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/YoutubeApiBlog/~4/zHk2xAoh_r8" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2443724041307041823/posts/default/426936227490051029?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2443724041307041823/posts/default/426936227490051029?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/YoutubeApiBlog/~3/zHk2xAoh_r8/direct-uploads-server-migration.html" title="Direct Uploads Server Migration" /><author><name>Jeffrey Posnick</name><uri>http://www.blogger.com/profile/12266211780281941403</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="17334247292451043294" /></author><feedburner:origLink>http://apiblog.youtube.com/2009/10/direct-uploads-server-migration.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUQFRX4_eSp7ImA9WxNWE0s.&quot;"><id>tag:blogger.com,1999:blog-2443724041307041823.post-4905176591945538672</id><published>2009-10-09T08:54:00.000-07:00</published><updated>2009-10-12T10:08:34.041-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-12T10:08:34.041-07:00</app:edited><title>oEmbed support</title><content type="html">&lt;div&gt;&lt;a href="http://oembed.com/"&gt;oEmbed&lt;/a&gt; is a pretty slick way to embed multimedia for a link. For example with a request like this:&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.youtube.com/oembed?url=http%3A//www.youtube.com/watch%3Fv%3DbDOYN-6gdRE&amp;amp;format=json"&gt;http://www.youtube.com/oembed?url=http%3A//www.youtube.com/watch%3Fv%3DbDOYN-6gdRE&amp;amp;format=json&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;You get a response like this:&lt;/div&gt;&lt;pre&gt;{"provider_url": "http://www.youtube.com/",&lt;br /&gt;"title": "Auto-Tune the News #8: dragons. geese. Michael Vick. (ft. T-Pain)",&lt;br /&gt;"html": "&lt;b&gt;embed code&lt;/b&gt;",&lt;br /&gt;...}&lt;br /&gt;&lt;/pre&gt;&lt;div&gt;The value for the "html" key is all you need to insert into your webpage to render an embedded YouTube video:&lt;/div&gt;&lt;div&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/bDOYN-6gdRE&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/bDOYN-6gdRE&amp;amp;fs=1" type="application/x-shockwave-flash" width="425" height="344" allowscriptaccess="always" allowfullscreen="true"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Check out the documentation at &lt;a href="http://oembed.com/"&gt;oEmbed.com&lt;/a&gt; for more information.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2443724041307041823-4905176591945538672?l=apiblog.youtube.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/YoutubeApiBlog/~4/h8caOcTXn5Q" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2443724041307041823/posts/default/4905176591945538672?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2443724041307041823/posts/default/4905176591945538672?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/YoutubeApiBlog/~3/h8caOcTXn5Q/oembed-support.html" title="oEmbed support" /><author><name>Phil Harnish</name><uri>http://www.blogger.com/profile/13021892132093155173</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="08484898287717449648" /></author><feedburner:origLink>http://apiblog.youtube.com/2009/10/oembed-support.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUcBR307eyp7ImA9WxNQEU4.&quot;"><id>tag:blogger.com,1999:blog-2443724041307041823.post-1010068033243353548</id><published>2009-09-16T13:30:00.000-07:00</published><updated>2009-09-16T13:30:56.303-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-16T13:30:56.303-07:00</app:edited><title>New Reporting Dashboard for Developers</title><content type="html">Getting your YouTube web or client application up and running is only half the battle. We know that you'll also want to monitor your application to see how it's performing. Our new Developer Dashboard shows you at a glance the number of API requests, playbacks, uploads and errors that your app is generating. You can visualize the data using our interactive chart or download a file to process the data offline. To use the dashboard, you'll need to provide a developer key in your API requests and then pass the media URLs from the API responses to the standard embedded player or the chromeless player.&lt;br /&gt;&lt;div id="p1av"&gt;&lt;br /&gt;&lt;/div&gt;You can log into the new Developer Dashboard at &lt;a href="http://code.google.com/apis/youtube/dashboard/"&gt;&lt;u id="lyt8"&gt;http://code.google.com/apis/youtube/dashboard/&lt;/u&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Posted by Kuan Yong, YouTube APIs and Tools Team&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2443724041307041823-1010068033243353548?l=apiblog.youtube.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/YoutubeApiBlog/~4/wqKEbRiqIOQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://apiblog.youtube.com/feeds/1010068033243353548/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=2443724041307041823&amp;postID=1010068033243353548" title="7 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2443724041307041823/posts/default/1010068033243353548?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2443724041307041823/posts/default/1010068033243353548?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/YoutubeApiBlog/~3/wqKEbRiqIOQ/new-reporting-dashboard-for-developers.html" title="New Reporting Dashboard for Developers" /><author><name>Kuan Yong</name><uri>http://www.blogger.com/profile/16935301056658837962</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03469350828253255920" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">7</thr:total><feedburner:origLink>http://apiblog.youtube.com/2009/09/new-reporting-dashboard-for-developers.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0cGSXw6fyp7ImA9WxNTEko.&quot;"><id>tag:blogger.com,1999:blog-2443724041307041823.post-2200309777715490138</id><published>2009-08-14T11:30:00.000-07:00</published><updated>2009-08-14T11:37:08.217-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-14T11:37:08.217-07:00</app:edited><title>Caption your videos with the YouTube API</title><content type="html">&lt;span style="color: rgb(0, 0, 0);"&gt;In August last year, we launched the ability to add captions to your videos on YouTube. Now, you can do the same using the YouTube Data API. &lt;/span&gt;&lt;br /&gt;  &lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;With the new captions API, developers can create third-party apps that help users create, upload and manage the caption tracks of their YouTube videos. Each video can have multiple caption tracks, and multiple subtitle formats are supported. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Find out more in our &lt;a href="http://code.google.com/intl/en/apis/youtube/2.0/developers_guide_protocol_captions.html"&gt;Developer's Guide&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;"&gt;Posted by Christoph Schwab-Ganser, YouTube Engineering&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2443724041307041823-2200309777715490138?l=apiblog.youtube.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/YoutubeApiBlog/~4/rHFekwylhBM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://apiblog.youtube.com/feeds/2200309777715490138/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=2443724041307041823&amp;postID=2200309777715490138" title="6 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2443724041307041823/posts/default/2200309777715490138?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2443724041307041823/posts/default/2200309777715490138?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/YoutubeApiBlog/~3/rHFekwylhBM/caption-your-videos-with-youtube-api.html" title="Caption your videos with the YouTube API" /><author><name>Kuan Yong</name><uri>http://www.blogger.com/profile/16935301056658837962</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03469350828253255920" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">6</thr:total><feedburner:origLink>http://apiblog.youtube.com/2009/08/caption-your-videos-with-youtube-api.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkAHSXo-fyp7ImA9WxJbE0Q.&quot;"><id>tag:blogger.com,1999:blog-2443724041307041823.post-5748815451850534020</id><published>2009-07-23T16:00:00.000-07:00</published><updated>2009-07-23T16:12:18.457-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-23T16:12:18.457-07:00</app:edited><title>New Video Portal For Film Buffs, Powered by YouTube</title><content type="html">Attention film buffs!&lt;br /&gt;&lt;br /&gt;The American Film Institute (AFI) just launched a new video portal on &lt;a href="http://www.afi.com/video"&gt;AFI.com&lt;/a&gt; featuring hundreds of videos from its vast archives. AFI is utilizing YouTube's APIs in order to stream videos directly from AFI's &lt;a href="http://www.youtube.com/afi"&gt;YouTube channel&lt;/a&gt;, as well as other great clips curated from YouTube. In addition to accessing the video content, users can post comments on the AFI.com video site as well as embed the videos on other sites, blogs and social networking pages.&lt;br /&gt;&lt;div id=":27u" class="ii gt"&gt;&lt;div class="im"&gt;&lt;br /&gt;The collection will be regularly augmented with videos selected from the AFI Archive, which contains 10,000 hours of material produced during AFI's 42-year history, much of which has never been seen by the general public. Be sure not to miss great clips such as "Alfred Hitchcock On Mastering Cinematic Tension" or "Steven Spielberg: The Toughest Thing For A Director".&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;We're thrilled that the YouTube APIs can help unlock such amazing material. Nice work, AFI!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Posted by George Strompolos, YouTube Partner Team&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2443724041307041823-5748815451850534020?l=apiblog.youtube.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/YoutubeApiBlog/~4/w_f5i3kSq3s" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://apiblog.youtube.com/feeds/5748815451850534020/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=2443724041307041823&amp;postID=5748815451850534020" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2443724041307041823/posts/default/5748815451850534020?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2443724041307041823/posts/default/5748815451850534020?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/YoutubeApiBlog/~3/w_f5i3kSq3s/new-video-portal-for-film-buffs-powered.html" title="New Video Portal For Film Buffs, Powered by YouTube" /><author><name>Kuan Yong</name><uri>http://www.blogger.com/profile/16935301056658837962</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03469350828253255920" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">4</thr:total><feedburner:origLink>http://apiblog.youtube.com/2009/07/new-video-portal-for-film-buffs-powered.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkcBRX86eip7ImA9WxJWE0k.&quot;"><id>tag:blogger.com,1999:blog-2443724041307041823.post-970300242171560100</id><published>2009-06-18T11:00:00.000-07:00</published><updated>2009-06-18T11:00:54.112-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-18T11:00:54.112-07:00</app:edited><title>Simple Update Protocol for User Activity Feed docs are now available</title><content type="html">At Google I/O 2009, we demoed a nifty &lt;a href="http://code.google.com/p/gdata-samples/source/browse/#svn/trunk/uberviewer"&gt;sample application&lt;/a&gt; that tracks updates to any number of YouTube user activity feeds. The technology behind the application is the Simple Update Protocol (&lt;span class="il"&gt;SUP&lt;/span&gt;), a simple and compact "ping feed" that enables your application to efficiently monitor changes to a large number of user activity feeds.&lt;br /&gt;&lt;br /&gt;If you run a social network with tons of users who also happen to be active on YouTube, you should consider using &lt;span class="il"&gt;SUP&lt;/span&gt; to let your users easily share their updates on YouTube with their friends through their social graph on your site. See the docs &lt;a href="http://code.google.com/apis/youtube/2.0/developers_guide_protocol_sup.html"&gt;here&lt;/a&gt;&lt;u&gt;&lt;/u&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Posted by Kuan Yong, YouTube APIs and Tools Team&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2443724041307041823-970300242171560100?l=apiblog.youtube.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/YoutubeApiBlog/~4/oUiao6_eyjk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://apiblog.youtube.com/feeds/970300242171560100/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=2443724041307041823&amp;postID=970300242171560100" title="5 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2443724041307041823/posts/default/970300242171560100?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2443724041307041823/posts/default/970300242171560100?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/YoutubeApiBlog/~3/oUiao6_eyjk/simple-update-protocol-for-user.html" title="Simple Update Protocol for User Activity Feed docs are now available" /><author><name>Kuan Yong</name><uri>http://www.blogger.com/profile/16935301056658837962</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03469350828253255920" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">5</thr:total><feedburner:origLink>http://apiblog.youtube.com/2009/06/simple-update-protocol-for-user.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkEGRH8_eCp7ImA9WxJXFUU.&quot;"><id>tag:blogger.com,1999:blog-2443724041307041823.post-5329927040090421005</id><published>2009-06-09T16:03:00.001-07:00</published><updated>2009-06-09T16:03:45.140-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-09T16:03:45.140-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="announcements" /><title>Public Service Announcement - Upload Regression Testing</title><content type="html">The team has been working to improve the API upload infrastructure behind the scenes, and the new build is up at:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://uploads2.gdata.youtube.com/" target="_blank"&gt;http://uploads2.gdata.youtube.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Please do regression testing on your systems and report problems in our &lt;a title="discussion forum" href="http://groups.google.com/group/youtube-api-gdata" id="y1vj"&gt;discussion forum&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Barring any major complications, this will begin rolling out to the production uploads URL (uploads.gdata.youtube.com) in two weeks.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Posted by Stephanie Liu, YouTube APIs and Tools Team&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2443724041307041823-5329927040090421005?l=apiblog.youtube.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/YoutubeApiBlog/~4/NZLCll6Iop4" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2443724041307041823/posts/default/5329927040090421005?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2443724041307041823/posts/default/5329927040090421005?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/YoutubeApiBlog/~3/NZLCll6Iop4/public-service-announcement-upload.html" title="Public Service Announcement - Upload Regression Testing" /><author><name>Stephanie Liu</name><uri>http://www.blogger.com/profile/08457117592361473057</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="06938078375332321706" /></author><feedburner:origLink>http://apiblog.youtube.com/2009/06/public-service-announcement-upload.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0ENQX05fip7ImA9WxJQFE0.&quot;"><id>tag:blogger.com,1999:blog-2443724041307041823.post-976502736995045215</id><published>2009-05-26T23:26:00.000-07:00</published><updated>2009-05-26T23:28:10.326-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-26T23:28:10.326-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="announcements" /><title>Google I/O Pass Winner!</title><content type="html">Wow, there's quite a bit of creative talent out there! It was hard to select from &lt;a title="all the posts" href="http://groups.google.com/group/youtube-api-gdata/browse_thread/thread/8dff8bdc11e91795" id="loiu"&gt;all the posts&lt;/a&gt;, but the winning haiku was from &lt;span style="font-weight: bold;"&gt;lionstone&lt;/span&gt;:&lt;br /&gt;&lt;br /&gt;public void youtube&lt;br /&gt; extends the community&lt;br /&gt; return social change&lt;br /&gt;&lt;br /&gt;Honorable mention goes to Ron (who already bought a ticket to the conference!):&lt;br /&gt;&lt;br /&gt;Documentation -&lt;br /&gt; cut, five, seven, five, season&lt;br /&gt; form situation&lt;br /&gt;&lt;br /&gt;We'll be seeing both of them at &lt;a title="Google I/O" href="http://code.google.com/events/io/" id="q1ag"&gt;Google I/O&lt;/a&gt; tomorrow -- if you're coming as well, come say 'hi' to the team at Office Hours, at the Sandbox, and in our two sessions. If you can't make it, watch the &lt;a title="Twitter stream" href="http://googleio.twazzup.com/" id="yakb"&gt;Twitter stream&lt;/a&gt; during the conference and the &lt;a title="videos" href="http://www.youtube.com/googledevelopers" id="i4v:"&gt;videos&lt;/a&gt; that will be posted afterwards.&lt;br /&gt;&lt;br /&gt;Posted by Stephanie Liu, YouTube APIs and Tools Team&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2443724041307041823-976502736995045215?l=apiblog.youtube.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/YoutubeApiBlog/~4/nFDVP_OKSWU" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2443724041307041823/posts/default/976502736995045215?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2443724041307041823/posts/default/976502736995045215?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/YoutubeApiBlog/~3/nFDVP_OKSWU/google-io-pass-winner.html" title="Google I/O Pass Winner!" /><author><name>Stephanie Liu</name><uri>http://www.blogger.com/profile/08457117592361473057</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="06938078375332321706" /></author><feedburner:origLink>http://apiblog.youtube.com/2009/05/google-io-pass-winner.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkABRHYzfCp7ImA9WxJRFkQ.&quot;"><id>tag:blogger.com,1999:blog-2443724041307041823.post-1742831488870806016</id><published>2009-05-18T17:50:00.000-07:00</published><updated>2009-05-18T17:59:15.884-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-18T17:59:15.884-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="announcements" /><title>Google I/O Pass</title><content type="html">&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_6NxOo7yjlR4/ShIC4-1Rq7I/AAAAAAAAADw/o8Lg7-Jhimo/s1600-h/color_io_badge.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 200px; height: 67px; border:none; " src="http://1.bp.blogspot.com/_6NxOo7yjlR4/ShIC4-1Rq7I/AAAAAAAAADw/o8Lg7-Jhimo/s200/color_io_badge.jpg" alt="" id="BLOGGER_PHOTO_ID_5337331686349843378" border="0" /&gt;&lt;/a&gt;&lt;a href="http://code.google.com/events/io/" id="e4j8" title="Google I/O"&gt;Google I/O&lt;/a&gt;, our largest developer conference in San Francisco, CA, is just around the corner, and we'd love to see more YouTube developers there. We'll have two formal sessions, as well as office hours and lots of demos at the Developer Sandbox.&lt;br /&gt;&lt;br /&gt;Kuan, our Product Manager, will be giving a session about &lt;a href="http://code.google.com/events/io/sessions/BestPracticesYouTubeApps.html" id="c2_t" title="writing great, monetizable apps"&gt;writing great, monetizable apps&lt;/a&gt;, and Jeff Fisher and Jochen Hartmann will be giving a session on the &lt;a href="http://code.google.com/events/io/sessions/GoingSocialYouTubeApps.html" id="xm6x" title="new social feeds"&gt;new social feeds&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Check out the rest of the &lt;a href="http://code.google.com/events/io/sessions.html" id="guyi" title="great sessions"&gt;great sessions&lt;/a&gt; and the &lt;a href="http://code.google.com/events/io/schedule.html" id="ymu6" title="schedule"&gt;schedule&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;We have one free pass ($400 value) to give away, so if you'll be in the area, tell us why you want to go in &lt;a title="this forum thread" href="http://groups.google.com/group/youtube-api-gdata/browse_thread/thread/8dff8bdc11e91795" id="u:nk"&gt;this forum thread&lt;/a&gt;. We'll pick the worthiest person by the end of the week (hint: Jeff really likes Haikus :).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Posted by Stephanie Liu, YouTube APIs and Tools Team&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2443724041307041823-1742831488870806016?l=apiblog.youtube.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/YoutubeApiBlog/~4/qyMi8kGArP0" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2443724041307041823/posts/default/1742831488870806016?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2443724041307041823/posts/default/1742831488870806016?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/YoutubeApiBlog/~3/qyMi8kGArP0/google-io-pass.html" title="Google I/O Pass" /><author><name>Stephanie Liu</name><uri>http://www.blogger.com/profile/08457117592361473057</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="06938078375332321706" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_6NxOo7yjlR4/ShIC4-1Rq7I/AAAAAAAAADw/o8Lg7-Jhimo/s72-c/color_io_badge.jpg" height="72" width="72" /><feedburner:origLink>http://apiblog.youtube.com/2009/05/google-io-pass.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Dk8NSX86eCp7ImA9WxJSFUs.&quot;"><id>tag:blogger.com,1999:blog-2443724041307041823.post-5166217240890518568</id><published>2009-05-05T16:05:00.000-07:00</published><updated>2009-05-05T16:08:18.110-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-05T16:08:18.110-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="video" /><title>YouTube APIs: Search Explained</title><content type="html">In an alternate universe (where I have a goatee) I may be a voice actor instead of a Googler. However, since we live in this universe, the best I can do is make you a screencast about the YouTube API. Specifically, this video discusses the various search options we have in our Data API and the various limitations and caveats to keep in mind while integrating it into your program or website.&lt;br /&gt;&lt;br /&gt;If our API documentation is like the printed manual in the box of a new purchase that you never read, think of this video as the one-page laminated card with pretty pictures on it telling you not to get crushed by a bookshelf or hurt your back. Enjoy!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;object width="560" height="340"&gt;&lt;param name="movie" value="http://www.youtube.com/v/sOEAD-gfJ_M&amp;hl=en&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/sOEAD-gfJ_M&amp;hl=en&amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2443724041307041823-5166217240890518568?l=apiblog.youtube.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/YoutubeApiBlog/~4/yaWkCzEIVl0" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2443724041307041823/posts/default/5166217240890518568?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2443724041307041823/posts/default/5166217240890518568?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/YoutubeApiBlog/~3/yaWkCzEIVl0/youtube-apis-search-explained.html" title="YouTube APIs: Search Explained" /><author><name>Jeff Fisher</name><email>noreply@blogger.com</email></author><feedburner:origLink>http://apiblog.youtube.com/2009/05/youtube-apis-search-explained.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0QERn8zeCp7ImA9WxJTE0k.&quot;"><id>tag:blogger.com,1999:blog-2443724041307041823.post-6162815977682324482</id><published>2009-04-21T11:11:00.000-07:00</published><updated>2009-04-21T13:21:47.180-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-21T13:21:47.180-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="tutorials" /><category scheme="http://www.blogger.com/atom/ns#" term="code" /><category scheme="http://www.blogger.com/atom/ns#" term="json" /><category scheme="http://www.blogger.com/atom/ns#" term="devs" /><category scheme="http://www.blogger.com/atom/ns#" term="appengine" /><title>Modifying Chow-Down Part 2: Make it Faster!</title><content type="html">As promised in the &lt;a href="http://apiblog.youtube.com/2009/04/modifying-chow-down-application-part-1.html"&gt;previous blog post&lt;/a&gt;, I was given the task of making our &lt;a href="http://chow-down-gdata.appspot.com/"&gt;Chow Down Gdata&lt;/a&gt; sample a little faster. It would sometimes take a while to load restaurant information due to the requests to YouTube and Picasa Web Albums taking a while to be processed on the backend. Since this would cause the user to sometimes see a "loading" bar for several seconds; something had to be done.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_3bO2g9UbC5k/Se4qkjKaV9I/AAAAAAAAABo/wdMMA2e870E/s1600-h/chow-down-gdata.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 196px;" src="http://1.bp.blogspot.com/_3bO2g9UbC5k/Se4qkjKaV9I/AAAAAAAAABo/wdMMA2e870E/s320/chow-down-gdata.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5327242216628443090" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Originally, the application used the Python client library to retrieve information from YouTube and PWA and then stored it inside of memcache. The new solution is to instead retrieves these feeds directly in the browser using the &lt;a href="http://code.google.com/apis/gdata/json.html"&gt;json-in-script support&lt;/a&gt; of the Google Data APIs. This approach worked well for the Chow Down application since we were not retrieving any private information for use in this application and so did not need to authenticate as a user.&lt;br /&gt;&lt;br /&gt;Another benefit of using the JSON feeds is that the browser can asynchronously request results from both YouTube and PWA at the same time and render the results as soon as they are returned. This helps decrease the "perceived load time" that the user experiences since they are seeing information start to be loaded instead of just watching a progress bar.&lt;br /&gt;&lt;br /&gt;The code for the entire sample is available on code.google.com:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://code.google.com/p/gdata-samples/source/browse/trunk/chow-down-gdata/"&gt;http://code.google.com/p/gdata-samples/source/browse/trunk/chow-down-gdata/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;But you can see all of the logic for retrieving the feeds using JavaScript in the ajax_restaurant_info template:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://code.google.com/p/gdata-samples/source/browse/trunk/chow-down-gdata/src/templates/ajax_restaurant_info.html"&gt;http://code.google.com/p/gdata-samples/source/browse/trunk/chow-down-gdata/src/templates/ajax_restaurant_info.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The code makes use of the &lt;a href="http://jquery.com/"&gt;jQuery JavaScript library&lt;/a&gt; in order to remain compact and compatible.&lt;br /&gt;&lt;br /&gt;So if your site is using the Data APIs of one or more Google properties and you don't need authentication, considering switching to the JSON feeds to improve perceived latency and let your pages load the AJAXy way.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2443724041307041823-6162815977682324482?l=apiblog.youtube.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/YoutubeApiBlog/~4/-fimD4dTkys" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2443724041307041823/posts/default/6162815977682324482?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2443724041307041823/posts/default/6162815977682324482?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/YoutubeApiBlog/~3/-fimD4dTkys/modifying-chow-down-part-2-make-it.html" title="Modifying Chow-Down Part 2: Make it Faster!" /><author><name>Jeff Fisher</name><email>noreply@blogger.com</email></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_3bO2g9UbC5k/Se4qkjKaV9I/AAAAAAAAABo/wdMMA2e870E/s72-c/chow-down-gdata.png" height="72" width="72" /><feedburner:origLink>http://apiblog.youtube.com/2009/04/modifying-chow-down-part-2-make-it.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUcMQnk-fip7ImA9WxVaGU8.&quot;"><id>tag:blogger.com,1999:blog-2443724041307041823.post-6672572241533824787</id><published>2009-04-16T16:09:00.000-07:00</published><updated>2009-04-16T17:11:23.756-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-16T17:11:23.756-07:00</app:edited><title>Modifying the Chow-Down Application, part 1: Adding media from YouTube and Picasa</title><content type="html">Recently I was given the task of modifying the &lt;a href="http://chow-down.appspot.com/" target="_blank"&gt;Chow Down&lt;/a&gt; sample application (originally written to demonstrate how to implement the &lt;a href="http://code.google.com/apis/friendconnect/" target="_blank"&gt;Google FriendConnect API&lt;/a&gt; on &lt;a href="http://code.google.com/appengine/" target="_blank"&gt;Google AppEngine&lt;/a&gt;) to include videos, pictures and search results in the restaurant detail pages. This task resulted in the creation of &lt;a href="http://chow-down-gdata.appspot.com/" target="_blank"&gt;Chow Down Gdata&lt;/a&gt; (&lt;a href="http://code.google.com/p/gdata-samples/source/browse/branches/chow-down-gdata/1.0/src/" target="_blank"&gt;full source code&lt;/a&gt;) which uses the &lt;a href="http://code.google.com/apis/youtube/2.0/developers_guide_protocol_audience.html" target="_blank"&gt;YouTube Data API&lt;/a&gt;, the &lt;a href="http://code.google.com/apis/picasaweb/overview.html" target="_blank"&gt;Picasa Web Albums API&lt;/a&gt; and the &lt;a href="http://code.google.com/apis/ajaxsearch/" target="_blank"&gt;AJAX Search APIs&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_B8HA18T3qlI/See_GYMJK5I/AAAAAAAAABM/kqehVmvmhsI/s1600-h/chowndown_gdata.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; cursor: pointer; width: 320px; height: 270px;" src="http://4.bp.blogspot.com/_B8HA18T3qlI/See_GYMJK5I/AAAAAAAAABM/kqehVmvmhsI/s320/chowndown_gdata.png" alt="" id="BLOGGER_PHOTO_ID_5325435200682404754" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;Since everything was written in Python, using our &lt;a href="http://code.google.com/apis/gdata/articles/python_client_lib.html" target="_blank"&gt;Python client library&lt;/a&gt; was a no brainer. The first step was to add the necessary files and import statements. The application follows a standard &lt;a href="http://en.wikipedia.org/wiki/Model-view-controller" target="_blank"&gt;MVC&lt;/a&gt; layout, so the next step was to create a new view called &lt;code&gt;JsonRestaurantInfoView&lt;/code&gt; in &lt;a href="http://code.google.com/p/gdata-samples/source/browse/branches/chow-down-gdata/1.0/src/views.py" target="_blank"&gt;&lt;code&gt;views.py&lt;/code&gt;&lt;/a&gt;, which I then connected both to the &lt;a href="http://code.google.com/p/gdata-samples/source/browse/branches/chow-down-gdata/1.0/src/templates/ajax_restaurant_info.html" target="_blank"&gt;&lt;code&gt;ajax_restaurant_info.html&lt;/code&gt;&lt;/a&gt;template and also to the &lt;code&gt;restaurants_info&lt;/code&gt; method in &lt;a href="http://code.google.com/p/gdata-samples/source/browse/branches/chow-down-gdata/1.0/src/providers/restaurants.py" target="_blank"&gt;&lt;code&gt;providers/restaurants.py&lt;/code&gt;&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The bulk of the modifications happen inside &lt;code&gt;restaurants_info&lt;/code&gt;:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;# Create client and query to execute a YouTube search:&lt;br /&gt;gdata_youtube_client = gdata.youtube.service.YouTubeService();&lt;br /&gt;query = gdata.youtube.service.YouTubeVideoQuery()&lt;br /&gt;query.vq = "%s %s" % (restaurant.name, restaurant.city)&lt;br /&gt;video_feed = gdata_youtube_client.YouTubeQuery(query)&lt;br /&gt;&lt;br /&gt;# Grab the URL to the embeddable Flash player SWF (if embeddable)&lt;br /&gt;swf_url = video_entry.GetSwfUrl()&lt;br /&gt;&lt;br /&gt;if swf_url:&lt;br /&gt; restaurant.player = """&amp;lt;object width="425" height="350"&amp;gt;&lt;br /&gt;        &amp;lt;param name="movie" value="%s"&amp;gt;&amp;lt;/param&amp;gt;&lt;br /&gt;        &amp;lt;embed src="%s" type="application/x-shockwave-flash"&lt;br /&gt;         width="425" height="350"&amp;gt;&amp;lt;/embed&amp;gt;&amp;lt;/object&amp;gt;""" %&lt;br /&gt;         (swf_url, swf_url)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;But wait! We are not done yet. Let's also look for pictures for this restaurant in Picasa:&lt;br /&gt;&lt;pre&gt;gdata_picasawebalbums_client = gdata.photos.service.PhotosService()&lt;br /&gt;query_parameters = map(urllib.quote, [restaurant.name, restaurant.city]);&lt;br /&gt;&lt;br /&gt;# Fetch a feed of 10 thumbnails, 32x32 pixels in size and cropped to a square&lt;br /&gt;photo_feed = gdata_picasawebalbums_client.GetFeed(&lt;br /&gt; "/data/feed/api/all?q=%s%%20%s&amp;amp;max-results=10&amp;amp;thumbsize=32c" %&lt;br /&gt; (query_parameters[0], query_parameters[1]))&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;We store all the new metadata in the restaurant object that ends up being passed to the template. To direct users there from the search page, I added a simple &lt;a href="http://code.google.com/p/gdata-samples/source/browse/branches/chow-down-gdata/1.0/src/templates/index.html#49" target="_blank"&gt;&lt;code&gt;show_restaurant_info&lt;/code&gt;&lt;/a&gt; function which is triggered when a user clicks on the restaurant title in the search listing. While I was in the templates/index.html file, I also added the &lt;a href="http://code.google.com/p/gdata-samples/source/browse/branches/chow-down-gdata/1.0/src/templates/index.html#63" target="_blank"&gt;&lt;code&gt;ajax_api_restaurant_info&lt;/code&gt;&lt;/a&gt; function which fetches blog, web, news and book search information about the restaurant.&lt;br /&gt;&lt;br /&gt;Check out the &lt;a href="http://code.google.com/p/gdata-samples/source/browse/branches/chow-down-gdata/#chow-down-gdata/1.0" target="_blank"&gt;full source code&lt;/a&gt; to get the full picture including information about how this data was also cached.&lt;br /&gt;&lt;br /&gt;In the next article, Jeff Fisher is going to talk about how to optimize the performance for this application by using JavaScript.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2443724041307041823-6672572241533824787?l=apiblog.youtube.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/YoutubeApiBlog/~4/ED_WR_efjl0" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2443724041307041823/posts/default/6672572241533824787?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2443724041307041823/posts/default/6672572241533824787?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/YoutubeApiBlog/~3/ED_WR_efjl0/modifying-chow-down-application-part-1.html" title="Modifying the Chow-Down Application, part 1: Adding media from YouTube and Picasa" /><author><name>Jochen Hartmann</name><email>noreply@blogger.com</email></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_B8HA18T3qlI/See_GYMJK5I/AAAAAAAAABM/kqehVmvmhsI/s72-c/chowndown_gdata.png" height="72" width="72" /><feedburner:origLink>http://apiblog.youtube.com/2009/04/modifying-chow-down-application-part-1.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE4ASXg4fCp7ImA9WxVaEU8.&quot;"><id>tag:blogger.com,1999:blog-2443724041307041823.post-998054480324807047</id><published>2009-04-07T10:51:00.000-07:00</published><updated>2009-04-07T10:55:48.634-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-07T10:55:48.634-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="announcements" /><title>Latest Release Notes: Playlist Search, Time, and More</title><content type="html">Enjoy a few new tidbits in the latest release.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Search for playlists&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Yup, the same way you can &lt;a href="http://code.google.com/apis/youtube/2.0/reference.html#Videos_feed" id="nvd-" title="search for videos"&gt;search for videos&lt;/a&gt; and &lt;a href="http://code.google.com/apis/youtube/2.0/developers_guide_protocol_channel_search.html" id="miqf" title="channels"&gt;channels&lt;/a&gt; , you can now use the API to &lt;a title="search for playlists" href="http://code.google.com/apis/youtube/2.0/developers_guide_protocol.html#Searching_for_Playlists" id="qye1"&gt;search for playlists&lt;/a&gt;:&lt;br /&gt;&lt;pre style="font-family: courier new;"&gt;&lt;span style="font-size:85%;"&gt;&lt;a title="http://gdata.youtube.com/feeds/api/playlists/snippets?q=soccer&amp;amp;v=2" href="http://gdata.youtube.com/feeds/api/playlists/snippets?q=soccer&amp;amp;v=2" id="dscz"&gt;http://gdata.youtube.com/feeds/api/playlists/snippets?q=soccer&amp;amp;v=2&lt;/a&gt;&lt;/span&gt;&lt;/pre&gt; The query above will return a list of playlist snippets that match the query 'soccer'. Searching in playlists is an excellent way to find YouTube videos about a specific point of interest (e.g. dancing, cooking, sports etc.).&lt;br /&gt;&lt;h4&gt;Time filtering for video search&lt;br /&gt;&lt;/h4&gt;You can now restrict the video search result to a specific time interval (today, this_week,  this_month, all_time):&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:Courier New;"&gt;&lt;a title="http://gdata.youtube.com/feeds/api/videos?q=soccer&amp;amp;time=today&amp;amp;v=2" href="http://gdata.youtube.com/feeds/api/videos?q=soccer&amp;amp;time=today&amp;amp;v=2" id="zvqc"&gt;http://gdata.youtube.com/feeds/api/videos?q=soccer&amp;amp;time=today&amp;amp;v=2&lt;/a&gt; &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The default is 'all_time'.&lt;br /&gt;&lt;h4&gt;More results&lt;/h4&gt;You can now request past the 100th video in a playlist and past the 200th video in a favorite list. Additionally, you can now get 1000 videos in a search feed instead of 999! Enjoy that last video, guys.&lt;br /&gt;&lt;br /&gt;As always, &lt;a title="post in the forum" href="http://groups.google.com/group/youtube-api-gdata" id="bn9g"&gt;post in the forum&lt;/a&gt;  if you have any feedback or questions!&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Posted by Daniel Danciu, Software Engineer&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2443724041307041823-998054480324807047?l=apiblog.youtube.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/YoutubeApiBlog/~4/E2JDwgN1TCk" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2443724041307041823/posts/default/998054480324807047?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2443724041307041823/posts/default/998054480324807047?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/YoutubeApiBlog/~3/E2JDwgN1TCk/latest-release-notes-playlist-search.html" title="Latest Release Notes: Playlist Search, Time, and More" /><author><name>Stephanie Liu</name><uri>http://www.blogger.com/profile/08457117592361473057</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="06938078375332321706" /></author><feedburner:origLink>http://apiblog.youtube.com/2009/04/latest-release-notes-playlist-search.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUYGSXo5fip7ImA9WxVUE0w.&quot;"><id>tag:blogger.com,1999:blog-2443724041307041823.post-2459565196499145564</id><published>2009-03-17T11:29:00.000-07:00</published><updated>2009-03-17T12:12:08.426-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-17T12:12:08.426-07:00</app:edited><title>Recent activity: apitestjhartmann has written a tutorial</title><content type="html">&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_B8HA18T3qlI/Sb_s-MCjJvI/AAAAAAAAAAk/-deBQtnwah0/s1600-h/activityApp3.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 320px; height: 289px;" src="http://1.bp.blogspot.com/_B8HA18T3qlI/Sb_s-MCjJvI/AAAAAAAAAAk/-deBQtnwah0/s320/activityApp3.png" alt="" id="BLOGGER_PHOTO_ID_5314226638448436978" border="0" /&gt;&lt;/a&gt;As you may have heard, &lt;a href="http://apiblog.youtube.com/2009/02/youtube-api-outgrows-shy-adolescence.html" target="_blank"&gt;YouTube has been getting more social lately&lt;/a&gt;. Our activity feeds help your users stay up-to-date on the cool channels and videos that their friends (or anyone else, for that matter) have been uploading, subscribing to, adding as favorites and so forth.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;But we don't just care about YouTube users. We also care about developers. And we want you to have time to be more social, too.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;With that in mind, Jeff Fisher and I wrote a &lt;a href="http://code.google.com/apis/youtube/articles/youtube_api_activity_php.html" target="_blank"&gt;hands-on tutorial&lt;/a&gt; that explains how to build the &lt;a href="http://www.googlecodesamples.com/youtube/php/YouTubeActivityViewer/" target="_blank"&gt;YouTubeActivityViewer&lt;/a&gt;, a PHP application that uses the new activity feeds. The application uses our &lt;a href="http://code.google.com/apis/youtube/developers_guide_php.html" target="_blank"&gt;PHP client library&lt;/a&gt; with &lt;a href="http://jquery.com/" target="_blank"&gt;jQuery&lt;/a&gt;. If you're still not ready to rush out and socialize, you can also build in a caching system with &lt;a href="http://www.danga.com/memcached/" target="_blank"&gt;memcache&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2443724041307041823-2459565196499145564?l=apiblog.youtube.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/YoutubeApiBlog/~4/XU4WN-s68Mo" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2443724041307041823/posts/default/2459565196499145564?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2443724041307041823/posts/default/2459565196499145564?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/YoutubeApiBlog/~3/XU4WN-s68Mo/recent-activity-apitestjhartmann-has.html" title="Recent activity: apitestjhartmann has written a tutorial" /><author><name>Jochen Hartmann</name><email>noreply@blogger.com</email></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_B8HA18T3qlI/Sb_s-MCjJvI/AAAAAAAAAAk/-deBQtnwah0/s72-c/activityApp3.png" height="72" width="72" /><feedburner:origLink>http://apiblog.youtube.com/2009/03/recent-activity-apitestjhartmann-has.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUMBRH44cCp7ImA9WxVVEkU.&quot;"><id>tag:blogger.com,1999:blog-2443724041307041823.post-7162165252735754783</id><published>2009-03-05T11:58:00.000-08:00</published><updated>2009-03-05T12:04:15.038-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-05T12:04:15.038-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="samples" /><category scheme="http://www.blogger.com/atom/ns#" term="announcements" /><category scheme="http://www.blogger.com/atom/ns#" term="releases" /><category scheme="http://www.blogger.com/atom/ns#" term="dotnet" /><title>Latest .NET SDK Released! LINQ &amp; New Social Notifier Sample</title><content type="html">&lt;div&gt;  &lt;i&gt;Posted by Frank Mantek, Google Data APIs Team&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt; &lt;div&gt;  The new .NET SDK is released and available for download here:&lt;br /&gt;&lt;br /&gt; &lt;a href="http://code.google.com/p/google-gdata/downloads/list" target="_blank"&gt;http://code.google.com/p/&lt;wbr&gt;google-gdata/downloads/list&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;There's now updated support for YouTube V2 and a new vertical object model that allows you to use local LINQ queries. Please go through the &lt;a title="Google.YouTube" href="http://google-gdata.googlecode.com/svn/docs/folder55/N_Google_YouTube.htm" id="zusz"&gt;Google.YouTube&lt;/a&gt;  namespaces and see what's new there. We have some documentation for it here:&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href="http://google-gdata.googlecode.com/svn/trunk/clients/cs/docs/AdditionalContent/YouTubeLinqExamples.html" target="_blank"&gt;http://google-gdata.&lt;wbr&gt;googlecode.com/svn/trunk/&lt;wbr&gt;clients/cs/docs/&lt;wbr&gt;AdditionalContent/&lt;wbr&gt;YouTubeLinqExamples.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Last, but not least, there is the &lt;a href="http://code.google.com/p/google-gdata/source/browse/#svn/trunk/clients/cs/samples/YouTubeNotifier"&gt;Notifier for YouTube&lt;/a&gt; sample application, which showcases the &lt;a href="http://apiblog.youtube.com/2009/02/youtube-api-outgrows-shy-adolescence.html"&gt;activity feeds&lt;/a&gt; YouTube is exposing. You can subscribe to events from your friends and other YouTube users and get notified whenever they leave their marks in the YouTube universe. The &lt;a title="sample" href="http://google-gdata.googlecode.com/files/nfyt.exe" id="b64:"&gt;sample&lt;/a&gt;  is also available as a separate download.&lt;br /&gt;&lt;br /&gt;The complete release notes can be found here:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://google-gdata.googlecode.com/svn/docs/RELEASE_NOTES.HTML" target="_blank"&gt;http://google-gdata.&lt;wbr&gt;googlecode.com/svn/docs/&lt;wbr&gt;RELEASE_NOTES.HTML&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;which also lists all the bugs that were fixed in this release. Report new ones here:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://code.google.com/p/google-gdata/issues/list" target="_blank"&gt;http://code.google.com/p/&lt;wbr&gt;google-gdata/issues/list&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2443724041307041823-7162165252735754783?l=apiblog.youtube.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/YoutubeApiBlog/~4/pEtGNuM3inw" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2443724041307041823/posts/default/7162165252735754783?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2443724041307041823/posts/default/7162165252735754783?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/YoutubeApiBlog/~3/pEtGNuM3inw/latest-net-sdk-released-linq-new-social.html" title="Latest .NET SDK Released! LINQ &amp; New Social Notifier Sample" /><author><name>Stephanie Liu</name><uri>http://www.blogger.com/profile/08457117592361473057</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="06938078375332321706" /></author><feedburner:origLink>http://apiblog.youtube.com/2009/03/latest-net-sdk-released-linq-new-social.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEQMSHo_cCp7ImA9WxVVEE4.&quot;"><id>tag:blogger.com,1999:blog-2443724041307041823.post-6545573234468869982</id><published>2009-03-02T13:58:00.000-08:00</published><updated>2009-03-02T14:19:49.448-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-02T14:19:49.448-08:00</app:edited><title>PHP Client Library: Uploading videos now 99% more efficient !</title><content type="html">&lt;span style="font-style: italic;"&gt;Posted by Jochen Hartmann, YouTube APIs and Tools Team&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_B8HA18T3qlI/SaxaQm_coMI/AAAAAAAAAAc/lV-8vq5q_LM/s1600-h/99percent_final.jpg"&gt;&lt;img style="display:block; margin:0px; cursor:pointer; cursor:hand;width: 200px; height: 200px; border: none;" src="http://1.bp.blogspot.com/_B8HA18T3qlI/SaxaQm_coMI/AAAAAAAAAAc/lV-8vq5q_LM/s200/99percent_final.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5308717302154043586" /&gt;&lt;/a&gt;&lt;br /&gt;If you are using the &lt;a href="http://framework.zend.com/download/gdata"&gt;PHP Client Library&lt;/a&gt; to upload your videos to YouTube.com you may have had to deal with memory issues, such as the common &lt;span style="color: rgb(0, 0, 0);font-family:courier new;" &gt;Fatal error: Allowed memory size of ... bytes exhausted&lt;/span&gt; error message.&lt;br /&gt;&lt;br /&gt;I am happy to announce that &lt;a href="http://framework.zend.com/download/latest"&gt;as of version 1.7.6 of the client library&lt;/a&gt;, this should no longer be a problem. Jeff Fisher and I have added support for streaming large video files to our API in manageable 1 MB chunks. The change is completely transparent, so you won't need to do anything besides upgrade your copy of the client library.&lt;br /&gt;&lt;br /&gt;Prior to this change, our client library used to rely solely on the &lt;a href="http://framework.zend.com/apidoc/core/Zend_Http/Client/Zend_Http_Client.html"&gt;Zend_Http_Client&lt;/a&gt; object to handle HTTP communication between servers. The client makes requests by reading the entire body of your &lt;a href="http://en.wikipedia.org/wiki/Http"&gt;HTTP POST&lt;/a&gt; message into a string, which then gets sent to our API server. This behavior is perfectly acceptable for normal use since most of the time we are just sending XML strings or small media files such as images, but doesn't work quite so well for uploading 1 GB video files.&lt;br /&gt;&lt;br /&gt;To address this problem, I designed a &lt;a href="http://framework.zend.com/apidoc/core/Zend_Gdata/Gdata/Zend_Gdata_MediaMimeStream.html"&gt;Zend_Gdata_MediaMimeStream&lt;/a&gt; object which only stores a handle to the video file being uploaded. Jeff built a &lt;a href="http://framework.zend.com/apidoc/core/Zend_Gdata/Gdata/Zend_Gdata_HttpAdapterStreamingSocket.html"&gt;Zend_Gdata_HttpAdapterStreamingSocket&lt;/a&gt; which then reads from the media stream in 1 MB chunks and sends to the socket until the entire message is read. We have tested this code extensively and are always open to feedback on how to improve performance issues in our client library, so &lt;a href="http://framework.zend.com/code/changelog/Zend_Framework/?cs=14172"&gt;check out the source code&lt;/a&gt; if you are interested.&lt;br /&gt;&lt;br /&gt;While I have your attention, let me also share another trick for those obsessed with efficiency: If you are only interested in working with the raw XML instead of the complete Zend_Gdata object model, you can &lt;a href="http://framework.zend.com/apidoc/core/Zend_Gdata/App/Zend_Gdata_App.html#useObjectMapping"&gt;flip a minor switch&lt;/a&gt; that is available in all of our service classes (Zend_Gdata_YouTube, Zend_Gdata_Docs, etc.):&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;$yt = new Zend_Gdata_YouTube();&lt;/span&gt; &lt;span style="font-family:courier new;"&gt;$yt-&gt;useObjectMapping(false);&lt;/span&gt; &lt;span style="font-family:courier new;"&gt;$xmlString = $yt-&gt;getRecentlyFeaturedVideoFeed();&lt;/span&gt; &lt;span style="font-family:courier new;"&gt;echo gettype($xmlString); # will return 'string'&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;As you can see in the snippet above, the &lt;span style="font-family:courier new;"&gt;$xmlString&lt;/span&gt; variable is now just a regular string instead of a &lt;a href="http://framework.zend.com/apidoc/core/Zend_Gdata/YouTube/Zend_Gdata_YouTube_VideoFeed.html"&gt;Zend_Gdata_VideoFeed&lt;/a&gt; object. My testing shows that this can make fetching video feeds from YouTube faster by up to 35 times. Of course you would need to add a little bit of time parsing the XML with the tool of your choice (&lt;a href="http://us2.php.net/manual/en/function.xpath-eval-expression.php"&gt;XPath&lt;/a&gt;, etc.). I should also add that those interested in parsing XML without the aid of the client library may want to check out the &lt;a href="http://code.google.com/intl/en/apis/youtube/compatibility_guidelines.html"&gt;Backward Compatibility Guidelines&lt;/a&gt; for the YouTube Data API.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2443724041307041823-6545573234468869982?l=apiblog.youtube.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/YoutubeApiBlog/~4/07-zesr3oII" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2443724041307041823/posts/default/6545573234468869982?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2443724041307041823/posts/default/6545573234468869982?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/YoutubeApiBlog/~3/07-zesr3oII/php-client-library-uploading-videos-now.html" title="PHP Client Library: Uploading videos now 99% more efficient !" /><author><name>Jochen Hartmann</name><email>noreply@blogger.com</email></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_B8HA18T3qlI/SaxaQm_coMI/AAAAAAAAAAc/lV-8vq5q_LM/s72-c/99percent_final.jpg" height="72" width="72" /><feedburner:origLink>http://apiblog.youtube.com/2009/03/php-client-library-uploading-videos-now.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck4HQnw5fyp7ImA9WxVWFU8.&quot;"><id>tag:blogger.com,1999:blog-2443724041307041823.post-884493722896102129</id><published>2009-02-24T16:00:00.000-08:00</published><updated>2009-02-24T16:15:33.227-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-02-24T16:15:33.227-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="announcements" /><title>YouTube API Outgrows Shy Adolescence, Now Social</title><content type="html">&lt;i&gt;Posted by Stephanie Liu, YouTube APIs and Tools Team&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_6NxOo7yjlR4/SaSLPiFNyoI/AAAAAAAAADQ/BnLszchp7-Q/s1600-h/Picture+3.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 122px; height: 200px; border: none;" src="http://2.bp.blogspot.com/_6NxOo7yjlR4/SaSLPiFNyoI/AAAAAAAAADQ/BnLszchp7-Q/s200/Picture+3.png" alt="" id="BLOGGER_PHOTO_ID_5306519359912266370" border="0" /&gt;&lt;/a&gt;YouTube has been &lt;a href="http://www.youtube.com/blog?entry=Vp8bYKTy35U" id="d-6x" title="getting more social"&gt;getting more social&lt;/a&gt; lately, using activity feeds to make it easier to find cool videos and channels that your YouTube friends are favoriting, rating, subscribing to, etc. But what if all your friends aren't on YouTube, but rather on social network / site XYZ?&lt;br /&gt;&lt;br /&gt;Well, my friends, the API has come out of its awkward teenage years, and now has more sophisticated social skills to help. Activities like favoriting, uploading, commenting, and more can now be integrated into the social context of your choice. Check out the &lt;a href="http://code.google.com/apis/youtube/2.0/developers_guide_protocol.html#Activity_feeds" id="p-0m" title="docs"&gt;docs&lt;/a&gt; for the new user activity feed and friend activity feed.&lt;br /&gt;&lt;br /&gt;Before you ask, the user activity feed is &lt;a href="http://www.youtube.com/account#privacy/activity" id="gagq" title="fully customizable"&gt;fully customizable&lt;/a&gt; by the user, and the corresponding feed through the API respects all privacy settings. So users still have full control over what they make available in their recent activity feed.&lt;br /&gt;&lt;br /&gt;We think some cool apps can be made with these feeds -- like the obvious social network / feed aggregator integrations, to notification apps, to novel data views. We can't wait to see what you guys make!&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.googlecodesamples.com/youtube/php/YouTubeActivityViewer"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 160px; height: 200px; border: none;" src="http://1.bp.blogspot.com/_6NxOo7yjlR4/SaSM_Fn-ubI/AAAAAAAAADg/8pt2nI4OGUE/s200/phpsamplethumb.jpg" alt="" id="BLOGGER_PHOTO_ID_5306521276418800050" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Get started by perusing the docs and playing with the sample. Besides the &lt;a href="http://code.google.com/apis/youtube/2.0/developers_guide_protocol.html#Activity_feeds" id="ly3q" title="protocol guide"&gt;protocol guide&lt;/a&gt;, we've also updated the &lt;a href="http://code.google.com/apis/youtube/2.0/developers_guide_java.html#Activity_feeds" id="q1sy" title="Java"&gt;Java&lt;/a&gt; and &lt;a href="http://code.google.com/apis/youtube/2.0/developers_guide_php.html#Activity_feeds" id="g7xl" title="PHP"&gt;PHP&lt;/a&gt; guides with helpful snippets. An &lt;a href="http://www.googlecodesamples.com/youtube/php/YouTubeActivityViewer/" id="b80y" title="activity viewer sample"&gt;activity viewer sample&lt;/a&gt; written in PHP and its &lt;a href="http://code.google.com/p/gdata-samples/source/browse/#svn/branches/ytaviewer/1.0" id="jrmd" title="source"&gt;source code&lt;/a&gt; is also available for you to play with.&lt;br /&gt;&lt;br /&gt;As always, let us know if you have any questions or feedback in the &lt;a href="http://groups.google.com/group/youtube-api-gdata" id="peh7" title="forum"&gt;forum&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;PS. If you want to socialize with the team in person, come to &lt;a href="http://code.google.com/io" id="cfi1" title="Google I/O"&gt;Google I/O&lt;/a&gt;, where we'll be giving a &lt;a href="http://code.google.com/events/io/sessions.html" id="lxdt" title="session"&gt;session&lt;/a&gt; on "Going social with the YouTube APIs"!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2443724041307041823-884493722896102129?l=apiblog.youtube.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/YoutubeApiBlog/~4/OudJKbyermI" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2443724041307041823/posts/default/884493722896102129?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2443724041307041823/posts/default/884493722896102129?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/YoutubeApiBlog/~3/OudJKbyermI/youtube-api-outgrows-shy-adolescence.html" title="YouTube API Outgrows Shy Adolescence, Now Social" /><author><name>Stephanie Liu</name><uri>http://www.blogger.com/profile/08457117592361473057</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="06938078375332321706" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_6NxOo7yjlR4/SaSLPiFNyoI/AAAAAAAAADQ/BnLszchp7-Q/s72-c/Picture+3.png" height="72" width="72" /><feedburner:origLink>http://apiblog.youtube.com/2009/02/youtube-api-outgrows-shy-adolescence.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0ECRHs4eCp7ImA9WxVXE0Q.&quot;"><id>tag:blogger.com,1999:blog-2443724041307041823.post-8258805918233807315</id><published>2009-02-11T16:34:00.000-08:00</published><updated>2009-02-11T16:47:45.530-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-02-11T16:47:45.530-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="as3" /><category scheme="http://www.blogger.com/atom/ns#" term="tutorials" /><category scheme="http://www.blogger.com/atom/ns#" term="announcements" /><category scheme="http://www.blogger.com/atom/ns#" term="code" /><category scheme="http://www.blogger.com/atom/ns#" term="devs" /><title>TubeLoc: An AS3 Player Wrapper Using LocalConnection</title><content type="html">&lt;em&gt;Posted by Jeff Fisher, YouTube APIs and Tools Team&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;We know developers really like AS3, but sometimes they have difficulty getting our players to work correctly. To make this process easier for the Flashy/Flexy crowd, the awesome Ben Longoria has given us &lt;a href="http://code.google.com/p/tubeloc/"&gt;TubeLoc&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_3bO2g9UbC5k/SZNxMmaRnOI/AAAAAAAAABg/c9XZUfVT5Aw/s1600-h/chromeless_screenshot.png"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 320px; height: 198px;" src="http://1.bp.blogspot.com/_3bO2g9UbC5k/SZNxMmaRnOI/AAAAAAAAABg/c9XZUfVT5Aw/s320/chromeless_screenshot.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5301705647628328162" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;TubeLoc is an AS3 wrapper around the Player API that uses LocalConnection to communicate to the AS2 YouTube SWFs. It takes this a step further by also providing Flex components to make inserting a YouTube video and controls easy.&lt;br /&gt;&lt;br /&gt;Ready to get started? First &lt;a href="http://code.google.com/apis/youtube/articles/tubeloc.html"&gt;read the article&lt;/a&gt; that goes in depth on how to use TubeLoc. Next, visit the &lt;a href="http://code.google.com/p/tubeloc/"&gt;project page&lt;/a&gt; to download the code and play with the live demos. Finally, tell us what you think &lt;a href="http://groups.google.com/group/youtube-api-gdata"&gt;on the forum&lt;/a&gt;. Thanks Ben!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2443724041307041823-8258805918233807315?l=apiblog.youtube.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/YoutubeApiBlog/~4/xcachFnrxbc" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2443724041307041823/posts/default/8258805918233807315?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2443724041307041823/posts/default/8258805918233807315?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/YoutubeApiBlog/~3/xcachFnrxbc/tubeloc-as3-player-wrapper-using.html" title="TubeLoc: An AS3 Player Wrapper Using LocalConnection" /><author><name>Jeff Fisher</name><email>noreply@blogger.com</email></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_3bO2g9UbC5k/SZNxMmaRnOI/AAAAAAAAABg/c9XZUfVT5Aw/s72-c/chromeless_screenshot.png" height="72" width="72" /><feedburner:origLink>http://apiblog.youtube.com/2009/02/tubeloc-as3-player-wrapper-using.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEANRnkzeip7ImA9WxVXFEs.&quot;"><id>tag:blogger.com,1999:blog-2443724041307041823.post-1727461926076384437</id><published>2009-02-05T15:00:00.000-08:00</published><updated>2009-02-12T11:26:37.782-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-02-12T11:26:37.782-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="samples" /><category scheme="http://www.blogger.com/atom/ns#" term="tutorials" /><category scheme="http://www.blogger.com/atom/ns#" term="code" /><category scheme="http://www.blogger.com/atom/ns#" term="iphone" /><title>YouTube APIs + iPhone = Cool mobile apps</title><content type="html">&lt;span style="font-style: italic;"&gt;Posted by Kuan Yong, YouTube APIs and Tools Team&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The YouTube APIs &lt;a href="http://code.google.com/apis/youtube/terms.html" target="_blank"&gt;Terms of Service&lt;/a&gt; permits commercial use of the APIs &lt;a href="http://apiblog.youtube.com/2009/02/show-me-money.html"&gt;under certain conditions&lt;/a&gt;, and in most cases, as long as you play fair, you are free (and highly encouraged) to develop great iPhone apps using the YouTube APIs and sell them in the iTunes App Store.&lt;br /&gt;&lt;br /&gt;An iPhone app that uses the YouTube APIs typically needs to do two things:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Call the YouTube API Data API to search videos, get video metadata, etc. You should use our &lt;a href="http://code.google.com/apis/youtube/code.html" target="_blank"&gt;Objective C client library&lt;/a&gt; instead of trying to construct the HTTP request or parse the response by hand.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Invoke the native YouTube player on the iPhone to play videos.&lt;/li&gt;&lt;/ul&gt;There are at least two ways to play YouTube videos in your iPhone app (that don't run afoul of Apple's SDK rules). The easier way requires just one line of code but it involves quitting your app and launching the full YouTube app on the phone. The better way needs a little more setup but provides a seamless way of taking the user to the YouTube player and back to your app. &lt;span style="font-weight: bold;"&gt;Note that these two methods work only on an actual device, not in the iPhone simulator, since the latter does not have a YouTube player.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Method 1: Open the YouTube play page URL (Easier)&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;1. Grab the video url from the &lt;media:content&gt; media tag in the API response with the &lt;span style="font-family:courier new;"&gt;application/x-shockwave-flash&lt;/span&gt; type. It should look something like this:&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;http://www.youtube.com/v/&lt;/span&gt;&lt;wbr  style="font-family:courier new;"&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;oHg5SJYRHA0&amp;amp;f=gdata_videos&amp;amp;c=&lt;/span&gt;&lt;wbr  style="font-family:courier new;"&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;ytapi-my-clientID&amp;amp;d=&lt;/span&gt;&lt;wbr  style="font-family:courier new;"&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;nGF83uyVrg8eD4rfEkk22mDOl3qUIm&lt;/span&gt;&lt;wbr  style="font-family:courier new;"&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;VMV6ramM&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If you don't see the &lt;span style="font-family:courier new;"&gt;c&lt;/span&gt; and &lt;span style="font-family:courier new;"&gt;d&lt;/span&gt; parameters in the URL, it's because you are not passing in your developer key and client ID in the request. While they are not mandatory for read requests, we highly recommend that you provide them in &lt;span style="font-style: italic;"&gt;every&lt;/span&gt; API request.&lt;br /&gt;&lt;br /&gt;2. Open the URL in your app by calling the openURL method on your UIApplication instance:&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;http://www.&lt;/span&gt;&lt;wbr  style="font-family:courier new;"&gt;&lt;span style="font-family:courier new;"&gt;youtube.com/v/oHg5SJYRHA0&amp;amp;f=&lt;/span&gt;&lt;wbr  style="font-family:courier new;"&gt;&lt;span style="font-family:courier new;"&gt;gdata_videos&amp;amp;c=ytapi-my-&lt;/span&gt;&lt;wbr  style="font-family:courier new;"&gt;&lt;span style="font-family:courier new;"&gt;clientID&amp;amp;d=&lt;/span&gt;&lt;wbr  style="font-family:courier new;"&gt;&lt;span style="font-family:courier new;"&gt;nGF83uyVrg8eD4rfEkk22mDOl3qUIm&lt;/span&gt;&lt;wbr  style="font-family:courier new;"&gt;&lt;span style="font-family:courier new;"&gt;VMV6ramM&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;"]]; &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;When your app calls openURL, it will quit and launch the full native YouTube app on the phone. After the video stops playing, the user remains in the YouTube app. The user has no easy way of getting back to your app.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Method 2: Embed the YouTube player in a UIWebView&lt;br /&gt;&lt;br /&gt;&lt;/b&gt;No, the iPhone still doesn't do Flash, but if you haven't already noticed, the Safari browser on the iPhone is clever enough to turn any YouTube embed into a clickable thumbnail that launches the native YouTube player app on the phone. You can take advantage of this feature in your app by using a UIWebView. Here's how:&lt;br /&gt;&lt;br /&gt;1. Set up a UIWebView in your app. You can make it part of a xib or create it programmatically. Size the UIWebView according to how large you want the clickable thumbnail to be.&lt;br /&gt;&lt;br /&gt;2. Grab the video url using the same method as the one described above.&lt;br /&gt;&lt;br /&gt;3. Call the &lt;span style="font-family:courier new;"&gt;loadHTMLString:baseURL:&lt;/span&gt; method on the UIWebView instance with some carefully constructed HTML that contains the YouTube embedded player code snippet and some supporting HTML to make sure that the video thumbnail appears correctly. Set the base URL to the URL of your website (it doesn't do anything here -- ordinarily UIWebView uses it to handle relative URL links correctly).&lt;br /&gt;&lt;br /&gt;The best way to illustrate this is with a code snippet. Note the use of the &lt;span style="font-family:courier new,monospace;"&gt;viewport &lt;/span&gt;HTML meta parameter and the consistent use of &lt;span style="font-family:courier new;"&gt;width&lt;/span&gt; and &lt;span style="font-family:courier new;"&gt;height&lt;/span&gt; parameters throughout.&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;// webView is a UIWebView, either initialized programmatically or loaded as part of a xib.&lt;br /&gt;&lt;br /&gt;NSString *htmlString = @"&amp;lt;html&amp;gt;&amp;lt;head&amp;gt;&lt;br /&gt;&amp;lt;meta name = \"viewport\" content = \"initial-scale = 1.0, user-scalable = no, width = 212\"/&amp;gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&amp;lt;body style=\"background:#F00;margin-top:0px;margin-left:0px\"&amp;gt;&lt;br /&gt;&amp;lt;div&amp;gt;&amp;lt;object width=\"212\" height=\"172\"&amp;gt;&lt;br /&gt;&amp;lt;param name=\"movie\" value=\"http://www.youtube.com/v/oHg5SJYRHA0&amp;amp;f=gdata_videos&amp;amp;c=ytapi-my-clientID&amp;amp;d=nGF83uyVrg8eD4rfEkk22mDOl3qUImVMV6ramM\"&amp;gt;&amp;lt;/param&amp;gt;&lt;br /&gt;&amp;lt;param name=\"wmode\" value=\"transparent\"&amp;gt;&amp;lt;/param&amp;gt;&lt;br /&gt;&amp;lt;embed src=\"http://www.youtube.com/v/oHg5SJYRHA0&amp;amp;f=gdata_videos&amp;amp;c=ytapi-my-clientID&amp;amp;d=nGF83uyVrg8eD4rfEkk22mDOl3qUImVMV6ramM\"&lt;br /&gt;type=\"application/x-shockwave-flash\" wmode=\"transparent\" width=\"212\" height=\"172\"&amp;gt;&amp;lt;/embed&amp;gt;&lt;br /&gt;&amp;lt;/object&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;";&lt;br /&gt;&lt;br /&gt;[webView loadHTMLString:htmlString baseURL:[NSURL URLWithString:@"http://www.your-url.com"]];&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;One of the biggest benefits of this approach is that your app does not have to quit in order for the video to start playing. In fact, the iPhone will keep your app running in the background while it fires up the YouTube player to play the video. After the video finishes playing (or when the user hits "Done"), the user is automatically taken back to your app. This experience is very similar to watching embedded YouTube videos in the iPhone Safari browser and is just as seamless.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Have fun writing the next killer iPhone app, and don't forget to list your app in the &lt;a href="http://youtube-gallery.appspot.com/" target="_blank"&gt;YouTube Project Gallery&lt;/a&gt; once it goes live in the App Store!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Coming up: Adding YouTube content to Android apps&lt;/span&gt;&lt;br /&gt;&lt;/media:content&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2443724041307041823-1727461926076384437?l=apiblog.youtube.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/YoutubeApiBlog/~4/ajsJkzv6OcA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://apiblog.youtube.com/feeds/1727461926076384437/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=2443724041307041823&amp;postID=1727461926076384437" title="22 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2443724041307041823/posts/default/1727461926076384437?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2443724041307041823/posts/default/1727461926076384437?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/YoutubeApiBlog/~3/ajsJkzv6OcA/youtube-apis-iphone-cool-mobile-apps.html" title="YouTube APIs + iPhone = Cool mobile apps" /><author><name>Kuan Yong</name><uri>http://www.blogger.com/profile/16935301056658837962</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03469350828253255920" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">22</thr:total><feedburner:origLink>http://apiblog.youtube.com/2009/02/youtube-apis-iphone-cool-mobile-apps.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkcMR387eSp7ImA9WxVQGEs.&quot;"><id>tag:blogger.com,1999:blog-2443724041307041823.post-4380463762054911934</id><published>2009-02-04T18:00:00.000-08:00</published><updated>2009-02-05T13:08:06.101-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-02-05T13:08:06.101-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="announcements" /><title>Show Me the Money</title><content type="html">&lt;span style="font-style: italic;"&gt;Posted by Kuan Yong, YouTube APIs Product Manager&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Money: it's on &lt;a href="http://youtube.com/watch?v=WRVzF9dBl7c"&gt;everyone's mind lately&lt;/a&gt;, and we know developers are no different. We understand that developers aren't just satisfied with creating the coolest YouTube mashup out there. They also want a way to sustain their efforts financially, and the trick is figuring out how to do so appropriately. That's why we've published a &lt;a href="http://code.google.com/apis/youtube/creating_monetizable_applications.html"&gt;document&lt;/a&gt; that provides clear guidance on how you can monetize the apps you've built with the YouTube APIs. While it is not a substitute for reading our &lt;a href="http://code.google.com/apis/youtube/terms.html"&gt;Terms of Service&lt;/a&gt;, it should point you to the clauses you should pay attention to and hopefully even give you some ideas for your next YouTube API-powered project.&lt;br /&gt;&lt;br /&gt;So go ahead, launch the next great YouTube mashup, and monetize the hell out of it. And don't forget to tell us about your app at the &lt;a href="http://youtube-gallery.appspot.com/"&gt;YouTube Project Gallery&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2443724041307041823-4380463762054911934?l=apiblog.youtube.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/YoutubeApiBlog/~4/DDAs0uJVDHU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://apiblog.youtube.com/feeds/4380463762054911934/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=2443724041307041823&amp;postID=4380463762054911934" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2443724041307041823/posts/default/4380463762054911934?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2443724041307041823/posts/default/4380463762054911934?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/YoutubeApiBlog/~3/DDAs0uJVDHU/show-me-money.html" title="Show Me the Money" /><author><name>Kuan Yong</name><uri>http://www.blogger.com/profile/16935301056658837962</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03469350828253255920" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://apiblog.youtube.com/2009/02/show-me-money.html</feedburner:origLink></entry></feed>
