Archive for the 'Announcements' Category

Update on Yahoo! Pipes

Monday, June 15th, 2009

We've been getting some questions about what's going on with Pipes these day from various blogs and our message boards, so here's a small update about its progress and what we're working on.

Since its v1 launch two years ago, Pipes has had over 24 feature releases. The Pipes system of today is quite different from its first version, with a sizable number of significant new features and fixes. Some of the things we've changed and added include 25 new modules, favorites, new output formats, search, private fields, a variety of badges, a new web site and so on.

Along the way, we've learned a lot and collected feedback from all of you. We're aware that there are currently some bugs and performance issues, and we're working hard to correct them. We understand your frustration and updating the underlying Pipes' data engine and infrastructure to address these issues is a priority for us.

Today, Pipes serves hundreds of millions requests monthly and its usage continues to grow. As part of the Yahoo! Open Strategy, we're excited about the ongoing potential for Pipes and can't wait to see what developers like you use it for next.

Thanks to everyone who uses Pipes. We value developer feedback greatly, so keep it constructive and keep it coming - ­ it helps us make Pipes better.

New Create RSS and RSS Item Builder Modules

Wednesday, June 10th, 2009

When using source modules other than Fetch Feed, the data structure is often not reflective of a RSS structure. When viewing the Pipe as RSS or on the Pipe info page, the results seem to be empty and many users ask on the message boards "why can't I see my data?" So we created 2 new modules, the Create RSS module and RSS Item Builder Module.

 

createrss_menu.jpgThe Create RSS operator module makes it easy to convert an entire list of items into an RSS stream when the input data is not in RSS format, e.g., the fields are not named correctly for RSS display and output. Both the common required fields can be set, as well as the optional, but frequently used, media extensions. To rename non-RSS elements to a RSS structure, simply select an existing element name from the drop-down list provided.

This Create RSS example uses the YQL module to get the top music artists of the week. Because the data isn't in a RSS structure, we'll use the Create RSS Module to convert the data to RSS.

This is all done easily by mapping the item.element to the RSS Element you want. For example, I want item.name as my Title, item.ItemInfo.ChartPosition as my Description field, and item.website as my Link. Simply find the item in the dropdown next to the RSS Item you want it defined as.

If you want to further customize your fields, using the Regex Module is the easiest way. For example, in my description I want to prepend this text: "This weeks Chart Position: " in front the text currently being rendered as the description field. I first find the item.description field and I use "^" in the "replace" text area to signify that I want to start at the beginning of the string. In the "with" text area I enter "This weeks Chart Position: ". Check the debugger pane that it came out correctly and we're done!
createrss.jpg

 

rssitem_menu.jpgWith the RSS Item Builder module, you can create a single-item RSS data source by assigning values to one or more RSS attributes. RSS Item Builder can be used to create a single new RSS item from scratch, or reformat and restructure an existing item into an RSS structure. When the RSS Item Builder is used as a sub-module to the Loop module, the values from each original item can be converted to RSS. Unlike the CreateRSS module, each attribute within the RSS Item Builder can be "wired", so you can take values from other modules.

In this RSS Item Builder example, we'll use the RSS Item Builder to create a traffic RSS feed for San Francisco.

First we'll use the YQL module to get the traffic data for zip code 94123. We'll use the Loop module and embed a RSS Item Builder sub-module inside by drag and dropping it onto the target area.

We'll map item.Title to Title, item.Description to Description, we'll wire in an email address using the String Builder Module as my Author field, and map item.UpdateDate as my GUID.

We also want the media:content image URL to map to item.ImageUrl so we have that extra meta data that might be read by certain RSS readers.

Since I just want an RSS structure, I'll check off the "emit all results" radio button.

We also want to see the map of where the traffic is in our Description. Using the Regex module, select item.description in the drop down and in the "replace" textbox I use "$" which is regex for appending something to the end of the string and i'll use the String Builder again to create the image that will be appended.

Check the debugger pane and we're done!rssitem.jpg

Using YQL Execute to power the Pipes Webservice Module

Monday, June 1st, 2009

YQL has become a great way to extend Pipes. You can harvest the power of YQL by using YQL statements in the YQL module. Another way of using even more of YQL's power is to use the Pipes Webservice module. This enables you to use YQL's Execute functionality to create javascript functions that will work on your data in any Pipe.

In this blog post we'll go through the steps on how to use YQL Execute to power the Pipes Webservice Module - for the impatient, here's the example Pipe that we'll be creating.

In order to use YQL Execute, you'll need a website to host your XML file. The XML file is where YQL Execute allows you to manipulate data by using server side javascript. We can then post data to YQL via the Pipes Webservice module to allow further processing of our Pipes Data.

Some users on the Pipes message boards asked if we could add a "yindex" element that numbers each item in the output. This becomes trivial when using YQL Execute!

The first thing we will create is our XML file for YQL Execute. You can copy and paste the structure of the XML below, editing only whats inside the execute node. yqlexecuteyindex.png
The execute content is wrapped within a CDATA statement. Since we're dealing with json, we'll import Crockfords json parser and stringifier by using the y.include() method. First, we parse the json data using JSON.parse(), then loop through the json structure and add new elements by using pdata.items[i].new_element_here within the loop. "yindex" is the new item we want added to our Pipes data structure. We then assign a number to yindex within the loop and then use JSON.stringify() to bring it back together. Finally, we assign our "output" variable as our response.object. Then we want to host this XML file on a publicly accessible web host.

Now we'll set up our Pipe. We need to use the URL builder to setup the URL that the Webservice module will access.

In the URL Builder module, we'll use

  • http://query.yahooapis.com as our base
  • v1/public/yql as our Path element
  • These name/values as our query params
    • q: use "http://paul.donnelly.org/yql/yindex.xml" as yindex; select * from yindex where data = @data
    • format: json
    • diagnostics: false

And simply wire the URL builder module into the url terminal in the Web Service module. Be sure to use query.results.result.items as the Path to item list.

Here is the example Pipe that takes the Pipes blog feed, uses YQL execute as a Webservice module to create an additional element in the Pipes data output: "yindex" which adds a number to each item in the Pipes results. Another example YQL Execute statement is: use "http://paul.donnelly.org/yql/random.xml" as ran; select * from ran where data = @data that randomizes a given feed.

Yahoo! Pipes, our 2nd Birthday.

Friday, February 6th, 2009

It's been an awesome 2 years!

Pipes continues to be one of the most popular mashup and feed processing tools around the web. We would like to thank everyone for using our services, reporting bugs and giving great suggestions!

Here is a short list of what happened since our last birthday.

  • fixed international encoding bug
  • released YQL module
  • released badges
  • released php output
  • improved caching

This year we spent quite some time working on the YQL engine and we hope to migrate Pipes onto much of that infrastructure down the road.

We would also like to publicly acknowledge and thank community member hapdaniel for providing Pipes guidance and expertise on our message boards and around the internet, as well as other members such as Tony Loton and Dawn Foster (geekygirldawn) for being such great advocates.

Feedburner and Pipes

Tuesday, February 3rd, 2009

Unfortunately as some of you have experienced, Pipes RSS feeds have been returning a "999" error when running them through Feedburner.

As we posted on our message boards last week, we've tracked the issue down to Feedburner's recent migration onto Google's platforms (more details can be found on Feedburners status blog http://feedburnerstatus.blogspot.com/). During this migration, the IPs used by Feedburners to access feeds have changed and we were not made aware of this change before it happened. As a result, Pipes has been blocking some of their new IP's that came online. We have since added those IP's to our whitelist and we are in the process of unblocking them.

For now, If you do run your Pipes RSS through Feedburner please hold off on doing so until the IP whitelist propagates.

New Pipes YQL module and changes to “Use this Pipe” banner

Wednesday, January 28th, 2009

We just added a new source module: YQL.

YQL complements Pipes by allowing you to fetch, aggregate and mash up data from many sources using a SQL-like SELECT syntax. To find out more about YQL click here.

To use YQL, simply enter a YQL statement (select * from feed where url='http://digg.com/rss/index.xml') into the textarea. To drill down further into the result set you can use either the Pipes Sub-element module or by using projection in a YQL statement. For example: select title from feed where url='http://digg.com/rss/index.xml' returns only the titles from the Digg RSS feed. Here is an example Pipe using YQL as a source.

yql

The YQL module has 2 output modes: Results only or Diagnostics and results. Diagnostics provides additional data such as: count, language type and more.

You can test your query in the YQL console by clicking on the "Try in the console" link. The YQL console provides sample queries and shows what data tables are available to query against.

yqlresults

Here are some interesting queries to get you started:

  • Fetch two rss feeds, Digg and Mixx and sort them by pubDate
    select * from rss where url in ('http://digg.com/rss/index.xml','http://feeds.mixx.com/MixxPopular') | sort(field="pubDate")
  • Find Flickr photos that are tagged "fog" and are in San Francisco
    select * from flickr.photos.info where photo_id in (select id from flickr.photos.search where woe_id in (select woeid from geo.places where text="san francisco, ca") and tags = "fog")

We also listened to your suggestions and made it easier to access your Pipes RSS/JSON urls by putting it on the main Use this Pipe banner menu. It should speed up access to these widely used formats.
usethispipe_banner

Twitter and Pipes

Monday, July 28th, 2008

As some of you know, fetching Twitter feeds via Pipes often produces a 406 error in our editor, and the Pipe does not run successfully.

We have been in contact with Twitter trying to resolve this problem and supplied them several test cases. Based on various tests we've performed it appears that Twitter's servers are blocking requests from our outbound caches. At the moment they are still looking into it, but until they uncover the reason any Pipes using Twitter feeds will only work occasionally.

If there is any change in status regarding this situation, we will let you know.

Thanks - The Pipes team

New Yahoo! Pipes PHP serialized output renderer

Wednesday, April 2nd, 2008

Until now JSON output has been the only way to obtain all the data flowing through a Pipe. Starting today we've added a second way of getting all the data - serialized PHP Pipe output.

To get this, go to your Pipe -> More options -> Get as PHP. Right click the "Get as PHP" link to copy link location (or copy shortcut if using IE).

phpdropdown.png

After obtaining the link location, you can do something as simple as this to get Pipe output data as an array into your PHP script.

// Pipes Request
$req = 'http://pipes.yahoo.com/pipes/pipe.run?_id=ZKJobpaj3BGZOew9G8evXg&_render=php';
// Make the request
$phpserialized = file_get_contents($req);
// Parse the serialized response
$phparray = unserialize($phpserialized);

To view the array in your web browser, use this piece of PHP code to help visualize the array.

print_r($phparray);

print_r.png

To view a code sample on how to do a request go here. To read more about serialized PHP at Yahoo!, go here.

It's then up to you on how you want to display or use the Pipe data. The possibilities are endless.

Introducing - Pipe Badges!

Monday, March 24th, 2008

Did you ever want an easy way of putting Pipes output onto your website or blog?

Introducing - Pipes badges!

We currently have three types of badges - map, image and list. Map badges are available if there is geocoded data in the feed. Image badges are available if there are media images in the feed. List badges will always be present if there is valid data.

Yahoo! Pipes Map BadgeYahoo! Pipes Image BadgeYahoo! Pipes List Badge

Read more about how to configure them here.

You'll notice that on the Pipe info pages there is a new link called "Get as a Badge."

Get as a Badge
Click on the "Get as a Badge" link and a wizard will guide you on adding it to certain destinations like your WordPress blog, iGoogle page or any web site (that supports Javascript).

Yahoo! Pipes Badge Wizard

For those of you that are more technically inclined, we are using a script node replacement technique that uses JSON embedded configuration (This is based on Kent Brewsters “Case Harded Javascript”).

New “Fetch Page” module and nice web path enhancement…

Thursday, December 6th, 2007

This week we have two updates to our site: A new module to fetch a pages source and a small fix for easy web paths when running a Pipe.

This weeks release incorporates a new module named "Fetch Page". The new module will fetch the source of a given web site as a string. This data can then be converted into a RSS feed or merged with other data in your Pipe using the Regex module. The module is located under the "Sources" menu in the editor.
Thumbnail for fetch page
The module can fetch an entire page or you can specify a "starting" and "ending" point. We also offer support for specifying a delimiter to allow you to easily separate the text into strings.
fetch-page-blog-image-1-thumb.png
Our team as also created a few examples:
1) Fetch Page Example #1 is our first example. The goal of this Pipe is to extract train schedules from a local train scheduled provided in the San Francisco Bay Area.
2) Fetch Page Example #2 is a simple example that utilizes the first example as a sub-Pipe to obtain addition train stops.

Additional information about this new module along with its limitations can be found in the documentation modules/sources section.

Our second change to the site this week is a minor fix/enhancement to allow for easy web paths of all Pipe.runs page. This will allow you to use the easy paths you created for your Pipes. For example, the Pipe above "Fetch Page Example #1" would look like the following below (please note the "?" instead of the "&"):

Original name:
"http://pipes.yahoo.com/pipes/pipe.run?_id=1qoLq6ai3BGv06982R2EvQ&_render=rss&station=Palo+Alto"

Easy web address name:
"http://pipes.yahoo.com/pipes_team/fetch_page_example?_render=rss&station=Palo+Alto"

Pipes Blog is powered by WordPress | Entries (RSS) and Comments (RSS).