benschwarz / smoke

It isn't ready yet

This URL has Read+Write access

smoke /
name age message
file .gitignore Sat Apr 25 03:12:18 -0700 2009 Updated .gitignore and added documentation to t... [Ben Schwarz]
file LICENSE Mon Mar 23 01:35:10 -0700 2009 Initial commit to smoke. [Ben Schwarz]
file README.markdown Loading commit data...
file Rakefile
file VERSION.yml
file deps.rip
directory examples/ Wed Apr 22 03:39:23 -0700 2009 Added examples [Ben Schwarz]
directory lib/
directory rdoc/ Sun Jun 14 07:03:33 -0700 2009 Update rip dependencies, corrected missing json... [Ben Schwarz]
file smoke.gemspec
directory spec/
README.markdown

smoke

smoke is a Ruby based DSL that allows you to take data from YQL, RSS / Atom (and more, if you think of a useful source). This "data" can then be re-represented, sorted and filtered. You can collect data from a multiude of sources, sort them on a common property and return a plain old ruby object or json (You could add in something to output XML too)

Media

The concept

The concept comes from using Yahoo Pipes to make little mash ups, get a list of tv shows for my torrent client, compile a recipe book or make tools to give me a list of albums that artists in my music library are about to be release.

How or what to contribute

  • Test everything you do
  • Add a way to output (XML, anyone?)
  • Examples of queries you'd like to be able to do (email / github message them to me)

API Examples

YQL

# This will use yahoo search to get an array of search results about Ruby
Smoke.yql(:ruby) do
  select  :all
  from    "search.web"
  where   :query, "ruby"

  discard :title, /tuesday/i
end

Smoke.yql(:python) do
  select  :all
  from    "search.web"
  where   :query, "python"
end

Join sources and use them together

Smoke.join(:ruby, :python)

or even

Smoke.join(:python, :ruby) do
  emit do
    sort :title
    rename :shit_name => :title
  end
end

Define a source allowing for variables to be injected later

Source definition:

Smoke.feed :delicious do
  prepare do
    url "http://feeds.delicious.com/v2/rss/#{username}?count=15"
  end
end

Execution:

Smoke[:delicious].username("bschwarz").output

CI

Integrity is running for smoke

TODO (working on, just mental notes)

  • Secrets
  • Checkout experimental fakeweb version to stub out the yql specs

Later / maybe

  • YQL w/oAuth
  • YQL Subqueries?
  • Implement basic auth for sources
  • Allow for sources to explicitly set the content type being returned for those stupid content providers

For wiki pages (docs, later)

  • How to use path
  • YQL Definitions

Copyright

Copyright (c) 2009 Ben Schwarz. See LICENSE for details.