yipit 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -1 +1,53 @@
1
- This is a work in progress. Coming soon, bitches.
1
+ # Yipit
2
+
3
+ Simple Ruby wrapper for the Yipit [API](http://yipit.com/about/api_overview/). [Yipit](http://yipit.com) features deals aggregated from a number of sources, includng Groupon, LivingSocial, Restaurants.com, and more.
4
+
5
+ ## Under development
6
+
7
+ This bitch ain't ready for production yet. Recognize.
8
+
9
+ ## Installation
10
+
11
+ sudo gem install yipit
12
+
13
+ ## Usage
14
+
15
+ You'll need a Yipit [API key](http://yipit.com/account/login/?next=/about/api_key/).
16
+
17
+ ### Instantiate
18
+ require 'Yipit'
19
+ client = Yipit::Client.new(YOUR_API_KEY)
20
+
21
+ Yipit uses a [`Hashie::Mash`](https://github.com/intridea/hashie) for return values, providing a handy hash that supports dot notation:
22
+
23
+ deal.title
24
+ => "$100 Gift Certificate, Your Price $40"
25
+ deal.division.name
26
+ => "New York"
27
+
28
+ ### Issues
29
+ GitHub issue tracking sucks. Submit issues to [`Lighthouse`](https://yipit.lighthouseapp.com)
30
+
31
+ <a name="changelog"></a>
32
+ ## Changelog
33
+
34
+ ### 0.0.1 - March 14, 2011
35
+
36
+ * Initial version
37
+
38
+
39
+ ## Under the hood
40
+ * [`Faraday`](https://github.com/technoweenie/faraday) REST client
41
+ * [`Hashie::Mash`](http://github.com/intridea/hashie) Magic
42
+
43
+ ## How to contribute
44
+
45
+ * Fork the project.
46
+ * Make your feature addition or bug fix.
47
+ * Add tests for it. This is important so I don't break it in a
48
+ future version unintentionally.
49
+ * Commit, do not mess with rakefile, version, or history.
50
+ (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
51
+ * Send me a pull request. Bonus points for topic branches.
52
+
53
+ Copyright (c) 2011 [Josh Deeden](http://twitter.com/jdeeden).
data/lib/yipit.rb CHANGED
@@ -5,21 +5,84 @@ require 'core_ext/array'
5
5
  module Yipit
6
6
  class Client
7
7
  attr_reader :api_key, :conn
8
- def initialize(api_key)
9
- @api_key = api_key
10
- @conn = Faraday.new(:url => 'http://api.yipit.com') do |builder|
8
+
9
+ # Initialize the client.
10
+ # TODO: Document.
11
+ def initialize(*args)
12
+ options = args.extract_options!
13
+ @api_key = args[0]
14
+ @conn = Faraday.new(:url => "http://api.yipit.com") do |builder|
11
15
  builder.adapter Faraday.default_adapter
12
- builder.adapter :logger
16
+ builder.adapter :logger if options[:debug] == true
13
17
  builder.use Faraday::Response::ParseJson
14
18
  builder.use Faraday::Response::Mashify
15
19
  end
16
20
  end
21
+
22
+ # @overload deals(options={})
23
+ # Search for Deals
24
+ # @param [Hash] options A customizable set of options
25
+ # @option options [String] :lat Latitude of point to to sort deals by proximity to. Use with lon. Uses radius.
26
+ # @option options [String] :lon Longitude of point to to sort deals by proximity to. Use with lat. Uses radius.
27
+ # @option options [Fixnum] :radius Maximum distance of radius in miles to deal location from center point. Defaults to 10. Requires lat and lon
28
+ # @option options [String] :divisions One or more division slugs (comma separated). See Divisions API for more details.
29
+ # @option options [String] :source One or more source slugs (comma separated). See Sources API for more details.
30
+ # @option options [String] :phone Deals available at a business matching one of the phone numbers. See Businesses API for more details.
31
+ # @option options [String] :tag One or more tag slugs (comma separated). See Tags API for more details. Note: Specifying multiple tags returns deals matching any one of the tags, NOT all of them
32
+ # @option options [Boolean] :paid Shows deals filtered on paid status. Defaults to false. Set to true if you would like to see all deals.
33
+ # @return [Array] An array of Hashie::Mash objects representing Yipit deals
34
+ # @example Search deals by latitude and longitude
35
+ # client.deals(:lat => "-37.74", :lon => "-76.00")
36
+ # @example Search deals within a 2 miles radius of latitude and longitude
37
+ # client.deals(:lat => "-37.74", :lon => "-76.00", :radius => 2)
38
+ # @example Search deals from Groupon
39
+ # client.deals(:source => "Groupon")
40
+ # @example Search deals based on phone number
41
+ # client.deals(:phone => "7185551212")
42
+ # @example Search deals based on tags
43
+ # client.deals(:tag => "restaurants,spa")
44
+ # @example Search deals based on paid status. (Defaults to false)
45
+ # client.deals(:paid => true)
46
+ # @overload deals(deal_id)
47
+ # Get deal details
48
+ # @param [Fixnum] deal_id A Deal Id
49
+ # @return [Hashie::Mash] A Hashie::Mash object representing a Yipit deal
50
+ def deals(*args)
51
+ super
52
+ end
53
+
54
+ # @overload sources(options={})
55
+ # Search for sources
56
+ # @param [Hash] options A customizable set of options
57
+ # @option options [String] :division One or more division slugs. See Divisions API for more details. Note: Specifying multiple divisions returns sources that exist in either of the divisions, NOT all of them.
58
+ # @option options [String] :paid When paid is true, only paid sources are returned. Defaults to false.
59
+ # @overload sources(source_id)
60
+ # Get source details
61
+ # @param [String] slug A source slug
62
+ # @return [Hashie::Mash] A Hashie::Mash object representing a Yipit Deal Source
63
+ def sources(*args)
64
+ super
65
+ end
66
+
67
+ # @overload tags(options={})
68
+ # This method returns a list of all tags. There are no parameters specific to tags.
69
+ # @param [Hash] options A customizable set of options
70
+ # @return [Array] An array of Hashie::Mash objects representing Yipit tags.
71
+ def tags(*args)
72
+ super
73
+ end
74
+ def divisions(*args)
75
+ super
76
+ end
77
+ def businesses(*args)
78
+ super
79
+ end
80
+
17
81
  def method_missing(sym, *args, &block)
18
- puts "Method: #{sym }"
19
- options = args.extract_options!
20
- options = options.merge(:key => api_key)
82
+ options = args.extract_options!.merge(:key => api_key)
21
83
  response = conn.get("/v1/#{sym.to_s}/#{args[0]}") { |req| req.params = options }
22
- response.body.response.send sym
84
+ ret = response.body.response.send sym
85
+ args[0].nil? ? ret : ret.first if ret
23
86
  end
24
87
  end
25
88
  end
data/lib/yipit/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Yipit
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -0,0 +1,28 @@
1
+ require File.expand_path('../../spec_helper', __FILE__)
2
+ describe Yipit::Client do
3
+ context "api" do
4
+ before(:all) do
5
+ api_key="XZgnp3v2vyrBr3eR"
6
+ @client = Yipit::Client.new(api_key)
7
+ end
8
+ context "businesses" do
9
+ context "search businesses" do
10
+ # use_vcr_cassette
11
+ before(:all) do
12
+ @businesses = @client.businesses
13
+ end
14
+ specify { @businesses.size.should > 1 }
15
+ end
16
+ # These don't work because the Yipit API is busted currently.
17
+ context "business details" do
18
+ before(:all) do
19
+ @business = @client.businesses("orpheum-theater")
20
+ end
21
+ subject { @business }
22
+ specify { should_not be_nil }
23
+ specify { should == "Orpheum Theatre" }
24
+ end
25
+ end
26
+ end
27
+ end
28
+
@@ -5,53 +5,5 @@ describe Yipit::Client do
5
5
  api_key="XZgnp3v2vyrBr3eR"
6
6
  @client = Yipit::Client.new(api_key)
7
7
  end
8
- context "deals" do
9
- context "search deals" do
10
- # use_vcr_cassette
11
- before do
12
- @deals = @client.deals
13
- end
14
- specify { @deals.size.should == 20 }
15
- end
16
- context "deal details" do
17
- before do
18
- @deals = @client.deals("7238")
19
- end
20
- specify { @deals.size.should == 1 }
21
- end
22
- end
23
- context "sources" do
24
- context "search sources" do
25
- # use_vcr_cassette
26
- before do
27
- @sources = @client.sources
28
- end
29
- specify { @sources.size.should == 20 }
30
- end
31
- context "source details" do
32
- before do
33
- @sources = @client.sources("groupon")
34
- end
35
- specify { @sources.size.should == 1 }
36
- specify { @sources.first.name.should == "Groupon" }
37
- end
38
- end
39
- context "businesses" do
40
- context "search businesses" do
41
- # use_vcr_cassette
42
- before do
43
- @businesses = @client.businesses
44
- end
45
- specify { @businesses.size.should > 1 }
46
- end
47
- context "business details" do
48
- before do
49
- @businesses = @client.businesses(18005)
50
- end
51
- specify { @businesses.size.should == 1 }
52
- specify { @businesses.first.name.should == "Orpheum Theatre" }
53
- end
54
- end
55
8
  end
56
9
  end
57
-
@@ -0,0 +1,107 @@
1
+ require File.expand_path('../../spec_helper', __FILE__)
2
+
3
+ describe Yipit::Client do
4
+ context "api" do
5
+ before(:all) do
6
+ api_key="XZgnp3v2vyrBr3eR"
7
+ @client = Yipit::Client.new(api_key)
8
+ end
9
+ context "deals" do
10
+ context "search" do
11
+ context "with no args" do
12
+ use_vcr_cassette
13
+ before(:all) do
14
+ @deals = @client.deals
15
+ end
16
+ subject { @deals }
17
+ it { should_not be_nil }
18
+ it { should be_an(Array) }
19
+ it { should have(20).items }
20
+ end
21
+ context "with Brooklyn, NY lat/long" do
22
+ before(:all) do
23
+ @deals = @client.deals(:lat => "40.7325859", :lon => "-73.9568557")
24
+ end
25
+ subject { @deals }
26
+ it { should_not be_nil }
27
+ subject { @deals.first.division.name }
28
+ it { should eql "New York" }
29
+ subject { @deals.last.division.name }
30
+ it { should eql "New York" }
31
+ end
32
+ # TODO: Better test.
33
+ context "with Brooklyn, NY lat/long, scoped to a 2 mile radius" do
34
+ before(:all) do
35
+ @deals = @client.deals(:lat => "40.7325859", :lon => "-73.9568557", :radius => 2)
36
+ end
37
+ subject { @deals }
38
+ it { should_not be_nil }
39
+ subject { @deals.first.division.name }
40
+ it { should eql "New York" }
41
+ subject { @deals.last.division.name }
42
+ it { should eql "New York" }
43
+ end
44
+ context "from Groupon" do
45
+ before(:all) do
46
+ @deals = @client.deals(:source => "Groupon")
47
+ end
48
+ subject { @deals }
49
+ it { should_not be_nil }
50
+ context "source name" do
51
+ subject { @deals.first.source.name }
52
+ it { should eql "Groupon" }
53
+ subject { @deals.last.source.name }
54
+ it { should eql "Groupon" }
55
+ end
56
+ end
57
+ context "by phone number" do
58
+ before(:all) do
59
+ @deals = @client.deals(:phone => "858-581-9490")
60
+ end
61
+ subject { @deals }
62
+ it { should_not be_nil }
63
+ subject { @deals.first.business.name.strip }
64
+ it { should eql "Ocean's Pizzeria" }
65
+ end
66
+ context "tagged with 'restaurants'" do
67
+ before(:all) do
68
+ @deals = @client.deals(:tag => "restaurants")
69
+ end
70
+ subject { @deals }
71
+ it { should_not be_nil }
72
+ subject { @deals.first.tags.first.name }
73
+ it { should eql "Restaurants" }
74
+ subject { @deals.last.tags.first.name }
75
+ it { should eql "Restaurants" }
76
+ end
77
+ context "paid deals'" do
78
+ before(:all) do
79
+ @deals = @client.deals(:paid => "true")
80
+ require 'pp'
81
+ puts @deals.inspect
82
+ end
83
+ subject { @deals }
84
+ # This fails because the Yipit API itself is borked.
85
+ it { should_not be_nil }
86
+ end
87
+ end
88
+ context "details" do
89
+ before(:all) do
90
+ @deal = @client.deals(7238)
91
+ end
92
+ subject { @deal }
93
+ it { should_not be_nil }
94
+ it { should be_a(Hashie::Mash) }
95
+ it { should respond_to(:id) }
96
+ it { should respond_to(:title) }
97
+ it { should respond_to(:business) }
98
+ it { should respond_to(:images) }
99
+ it { should respond_to(:business) }
100
+ it { should respond_to(:division) }
101
+ it { should respond_to(:source) }
102
+ it { should respond_to(:tags) }
103
+ # etc...
104
+ end
105
+ end
106
+ end
107
+ end
@@ -0,0 +1,44 @@
1
+ require File.expand_path('../../spec_helper', __FILE__)
2
+
3
+ describe Yipit::Client do
4
+ context "api" do
5
+ before(:all) do
6
+ api_key="XZgnp3v2vyrBr3eR"
7
+ @client = Yipit::Client.new(api_key)
8
+ end
9
+ context "divisions" do
10
+ context "search divisions" do
11
+ # use_vcr_cassette
12
+ context "all" do
13
+ before(:all) do
14
+ @divisions = @client.divisions
15
+ end
16
+ context "the results" do
17
+ subject { @divisions }
18
+ specify { should_not be_nil }
19
+ specify { should have_at_least(1).items }
20
+ end
21
+ end
22
+ context "by source" do
23
+ before(:all) do
24
+ @divisions = @client.divisions(:source => "groupon")
25
+ puts @divisions.size
26
+ end
27
+ subject { @divisions }
28
+ context "the results" do
29
+ specify { should_not be_nil }
30
+ specify { should have_at_least(20).items }
31
+ end
32
+ end
33
+ end
34
+ context "division details" do
35
+ before(:all) do
36
+ @division = @client.divisions("new-york")
37
+ end
38
+ context "name" do
39
+ specify { @division.name.should == "New York" }
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,44 @@
1
+ require File.expand_path('../../spec_helper', __FILE__)
2
+
3
+ describe Yipit::Client do
4
+ context "api" do
5
+ before(:all) do
6
+ api_key="XZgnp3v2vyrBr3eR"
7
+ @client = Yipit::Client.new(api_key)
8
+ end
9
+ context "sources" do
10
+ context "search sources" do
11
+ # use_vcr_cassette
12
+ context "all" do
13
+ before(:all) do
14
+ @sources = @client.sources
15
+ end
16
+ context "the results" do
17
+ subject { @sources }
18
+ specify { should_not be_nil }
19
+ specify { should have_at_least(1).items }
20
+ end
21
+ end
22
+ context "by division" do
23
+ before(:all) do
24
+ @sources = @client.sources(:divisions => "new-york")
25
+ end
26
+ subject { @sources }
27
+ context "the results" do
28
+ specify { should_not be_nil }
29
+ specify { should have_at_least(1).items }
30
+ end
31
+ end
32
+ end
33
+ context "source details" do
34
+ before(:all) do
35
+ @source = @client.sources("groupon")
36
+ end
37
+ context "name" do
38
+ specify { @source.name.should == "Groupon" }
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
44
+
data/spec/spec_helper.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require 'simplecov'
2
+
2
3
  SimpleCov.start do
3
4
  add_group 'Yipit', 'lib/yipit'
4
5
  add_group 'Specs', 'spec'
@@ -0,0 +1,36 @@
1
+ require File.expand_path('../../spec_helper', __FILE__)
2
+
3
+ describe Yipit::Client do
4
+ context "api" do
5
+ before(:all) do
6
+ api_key="XZgnp3v2vyrBr3eR"
7
+ @client = Yipit::Client.new(api_key)
8
+ end
9
+ context "tags" do
10
+ context "search tags" do
11
+ # use_vcr_cassette
12
+ context "all" do
13
+ before(:all) do
14
+ @tags = @client.tags
15
+ end
16
+ context "the results" do
17
+ subject { @tags }
18
+ specify { should_not be_nil }
19
+ specify { should have_at_least(1).items }
20
+ end
21
+ end
22
+ end
23
+ context "when passing params to tags" do
24
+ before(:all) do
25
+ @tag = @client.tags("restaurants")
26
+ end
27
+ context "the tag" do
28
+ subject { @tag }
29
+ specify { should be_nil }
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+
36
+
data/yipit.gemspec CHANGED
@@ -8,7 +8,7 @@ Gem::Specification.new do |s|
8
8
  s.platform = Gem::Platform::RUBY
9
9
  s.authors = ["Josh Deeden"]
10
10
  s.email = ["jdeeden@gmail.com"]
11
- s.homepage = "http://github.com/jdeeden/yipit"
11
+ s.homepage = "http://github.com/gangster/yipit"
12
12
  s.summary = %q{A simple wrapper for the Yipit API}
13
13
  s.description = %q{A simple wrapper for the Yipit API}
14
14
 
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: yipit
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.1
5
+ version: 0.0.2
6
6
  platform: ruby
7
7
  authors:
8
8
  - Josh Deeden
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-03-14 00:00:00 -04:00
13
+ date: 2011-03-15 00:00:00 -04:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -163,12 +163,16 @@ files:
163
163
  - lib/core_ext/array.rb
164
164
  - lib/yipit.rb
165
165
  - lib/yipit/version.rb
166
- - spec/cassettes/Yipit_Client/api/search_deals.yml
166
+ - spec/businesses/businesses_spec.rb
167
167
  - spec/client/client_spec.rb
168
+ - spec/deals/deals_spec.rb
169
+ - spec/divisions/divisions_spec.rb
170
+ - spec/sources/sources_spec.rb
168
171
  - spec/spec_helper.rb
172
+ - spec/tags/tags_spec.rb
169
173
  - yipit.gemspec
170
174
  has_rdoc: true
171
- homepage: http://github.com/jdeeden/yipit
175
+ homepage: http://github.com/gangster/yipit
172
176
  licenses: []
173
177
 
174
178
  post_install_message:
@@ -196,6 +200,10 @@ signing_key:
196
200
  specification_version: 3
197
201
  summary: A simple wrapper for the Yipit API
198
202
  test_files:
199
- - spec/cassettes/Yipit_Client/api/search_deals.yml
203
+ - spec/businesses/businesses_spec.rb
200
204
  - spec/client/client_spec.rb
205
+ - spec/deals/deals_spec.rb
206
+ - spec/divisions/divisions_spec.rb
207
+ - spec/sources/sources_spec.rb
201
208
  - spec/spec_helper.rb
209
+ - spec/tags/tags_spec.rb
@@ -1,82 +0,0 @@
1
- ---
2
- - !ruby/struct:VCR::HTTPInteraction
3
- request: !ruby/struct:VCR::Request
4
- method: :get
5
- uri: http://api.yipit.com:80/deals/?key=XZgnp3v2vyrBr3eR
6
- body:
7
- headers:
8
- response: !ruby/struct:VCR::Response
9
- status: !ruby/struct:VCR::ResponseStatus
10
- code: 404
11
- message: NOT FOUND
12
- headers:
13
- server:
14
- - nginx/0.8.54
15
- date:
16
- - Mon, 14 Mar 2011 20:57:15 GMT
17
- content-type:
18
- - text/html; charset=utf-8
19
- transfer-encoding:
20
- - chunked
21
- connection:
22
- - keep-alive
23
- vary:
24
- - Cookie
25
- set-cookie:
26
- - session_id=ea15f233c3e6938bae1e82c96caae9be; Domain=.yipit.com; expires=Sat, 10-Sep-2011 20:57:15 GMT; Max-Age=15552000; Path=/
27
- content-encoding:
28
- - gzip
29
- body: "\n\
30
- <!DOCTYPE html>\n\
31
- <html>\n\
32
- <head>\n <script type=\"text/javascript\">var _sf_startpt=(new Date()).getTime();</script>\n <link rel=\"stylesheet\" type=\"text/css\" href=\"http://d22nv2k05ynu7x.cloudfront.net/css/yipit.min.2f59ba5d99a86487.css\" media=\"screen\">\n \n <!--[if lt IE 8]>\n <link rel=\"stylesheet\" href=\"http://d22nv2k05ynu7x.cloudfront.net/css/ie.css\" type=\"text/css\" media=\"screen\">\n <![endif]-->\n <link rel=\"shortcut icon\" href=\"http://d22nv2k05ynu7x.cloudfront.net/img/favicon.ico\" type=\"image/x-icon\" />\n <link rel=\"apple-touch-icon\" href=\"http://d22nv2k05ynu7x.cloudfront.net/img/iphone.png\"/>\n <script type=\"text/javascript\" src=\"http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js\"></script>\n <script>!window.jQuery && document.write(unescape('%3Cscript src=\"http://d22nv2k05ynu7x.cloudfront.net/js/jquery.min.js\"%3E%3C/script%3E'))</script>\n <script type=\"text/javascript\" src=\"http://d22nv2k05ynu7x.cloudfront.net/js/yipit.min.c12f4436be3b328d.js\"></script>\n\n <title>Page Not Found | Yipit</title>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n <meta name=\"keywords\" content=\" Daily, Deals, Groupon, LivingSocial, Tippr\" />\n <meta name=\"description\" content=\"Rur-roh. We didn't find this page.\" />\n <meta content=\"noarchive,noindex,follow\" name=\"robots\"/>\n \n\n \n \n <script type=\"text/javascript\">\n var _gaq = _gaq || [];\n _gaq.push(['_setAccount', 'UA-1967270-3']);\n _gaq.push(['_trackPageview']);\n\n (function() {\n var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;\n ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';\n var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);\n })();\n </script>\n \n \n \n\
33
- <script type=\"text/javascript\">\n\n\
34
- function get_screen_height() {\n var myHeight = 0;\n if( typeof( window.innerWidth ) == 'number' ) {\n //Non-IE\n myHeight = window.innerHeight;\n } else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {\n //IE 6+ in 'standards compliant mode'\n myHeight = document.documentElement.clientHeight;\n }\n return myHeight;\n\
35
- }\n\n\
36
- function fix_height() { \n var screen_height = get_screen_height();\n var wrapper_height = $(\"#wrapper\").height();\n var footer_height = $(\"#footer\").height();\n new_height = (footer_height + wrapper_height < screen_height) ? screen_height - footer_height : wrapper_height;\n $(\"#wrapper\").css('min-height',new_height);\n\
37
- }\n\n\
38
- jQuery(document).ready(fix_height);\n\n\
39
- window.onresize = fix_height;\n\n\
40
- </script>\n\n\
41
- </head>\n\
42
- <body id=\"Something has gone horribly, horribly wrong...\" onload=\"\">\n \n\
43
- <div id=\"wrapper\">\n <div class=\"wrap\">\n <div id=\"header\" class=\"\">\n \n <div id=\"logo\"><a href=\"/\">Yipit</a></div>\n \n \n <div class=\"location\"><a href=\"/ajax/city_list/\" class=\"fancyboxForm\">Looking for your city?</a></div>\n \n <div class=\"login\">\n <a href=\"/\" class=\"formbutton buttonblue\">Sign Up</a>\n <a href=\"/ajax/login_box/\" id=\"login_box_launch\">Login</a></div>\n \n <div class=\"clear\"></div>\n \n \n </div><!-- end #header -->\n \n \n \n \n <div id=\"content\">\n <div class=\"box landing_page \">\n <div class=\"breadcrumb\">\n \n </div><!-- end .breadrumb -->\n \n\
44
- <h2>Whooops!</h2>\n\
45
- <img src=\"http://d22nv2k05ynu7x.cloudfront.net/img/404.jpg\">\n\
46
- <h2>This page doesn't exist.</h2>\n\
47
- <hr />\n\n <div class=\"deal\">\n \n </div><!-- end .deal -->\n <div class=\"sidebar\">\n \n </div><!-- end .sidebar -->\n <div class=\"clear\"></div>\n </div><!-- end box landing_page -->\n </div><!-- end .content -->\n <div class=\"clear\"></div> \n\n\n </div><!-- end .wrap -->\n\
48
- </div><!-- end #wrapper -->\n\
49
- <div class='clear'></div>\n\
50
- <div id=\"footer\">\n <div class=\"wrap\">\n \n <div id=\"footer-menu\">\n <h5>Cities</h5>\n <ul>\n \n <li><a href=\"/atlanta/\">Atlanta</a></li>\n \n <li><a href=\"/austin/\">Austin</a></li>\n \n <li><a href=\"/baltimore/\">Baltimore</a></li>\n \n <li><a href=\"/boston/\">Boston</a></li>\n \n <li><a href=\"/brooklyn/\">Brooklyn </a></li>\n \n <li><a href=\"/charlotte/\">Charlotte</a></li>\n \n <li><a href=\"/chicago/\">Chicago</a></li>\n \n <li><a href=\"/cincinnati/\">Cincinnati</a></li>\n \n <li><a href=\"/cleveland/\">Cleveland</a></li>\n \n <li><a href=\"/columbus/\">Columbus</a></li>\n \n <li><a href=\"/dallas/\">Dallas</a></li>\n \n <li><a href=\"/denver/\">Denver</a></li>\n \n <li><a href=\"/houston/\">Houston</a></li>\n \n <li><a href=\"/indianapolis/\">Indianapolis</a></li>\n \n <li><a href=\"/las-vegas/\">Las Vegas</a></li>\n \n <li><a href=\"/london/\">London</a></li>\n \n <li><a href=\"/los-angeles/\">Los Angeles</a></li>\n \n <li><a href=\"/miami/\">Miami</a></li>\n \n <li><a href=\"/minneapolis/\">Minneapolis</a></li>\n \n <li><a href=\"/montreal/\">Montreal </a></li>\n \n <li><a href=\"/new-york/\">New York</a></li>\n \n <li><a href=\"/northern-va/\">Northern VA</a></li>\n \n <li><a href=\"/oakland/\">Oakland</a></li>\n \n <li><a href=\"/orange-county/\">Orange County</a></li>\n \n <li><a href=\"/philadelphia/\">Philadelphia</a></li>\n \n <li><a href=\"/phoenix/\">Phoenix</a></li>\n \n <li><a href=\"/portland/\">Portland</a></li>\n \n <li><a href=\"/raleigh-durham/\">Raleigh-Durham</a></li>\n \n <li><a href=\"/san-diego/\">San Diego</a></li>\n \n <li><a href=\"/san-francisco/\">San Francisco</a></li>\n \n <li><a href=\"/san-jose/\">San Jose</a></li>\n \n <li><a href=\"/seattle/\">Seattle</a></li>\n \n <li><a href=\"/st-louis/\">St. Louis</a></li>\n \n <li><a href=\"/toronto/\">Toronto</a></li>\n \n <li><a href=\"/vancouver/\">Vancouver</a></li>\n \n <li><a href=\"/washington-dc/\">Washington DC</a></li>\n \n </ul>\n\n <h5>Deals</h5>\n <ul>\n \n <li><a href=\"/atlanta/deal_directory\">Atlanta</a></li>\n \n <li><a href=\"/austin/deal_directory\">Austin</a></li>\n \n <li><a href=\"/baltimore/deal_directory\">Baltimore</a></li>\n \n <li><a href=\"/boston/deal_directory\">Boston</a></li>\n \n \n \n \n \n <li><a href=\"/chicago/deal_directory\">Chicago</a></li>\n \n \n \n \n \n \n \n <li><a href=\"/dallas/deal_directory\">Dallas</a></li>\n \n <li><a href=\"/denver/deal_directory\">Denver</a></li>\n \n <li><a href=\"/houston/deal_directory\">Houston</a></li>\n \n \n \n <li><a href=\"/las-vegas/deal_directory\">Las Vegas</a></li>\n \n \n \n <li><a href=\"/los-angeles/deal_directory\">Los Angeles</a></li>\n \n <li><a href=\"/miami/deal_directory\">Miami</a></li>\n \n <li><a href=\"/minneapolis/deal_directory\">Minneapolis</a></li>\n \n <li><a href=\"/montreal/deal_directory\">Montreal </a></li>\n \n <li><a href=\"/new-york/deal_directory\">New York</a></li>\n \n \n \n \n \n \n \n <li><a href=\"/philadelphia/deal_directory\">Philadelphia</a></li>\n \n <li><a href=\"/phoenix/deal_directory\">Phoenix</a></li>\n \n <li><a href=\"/portland/deal_directory\">Portland</a></li>\n \n \n \n <li><a href=\"/san-diego/deal_directory\">San Diego</a></li>\n \n <li><a href=\"/san-francisco/deal_directory\">San Francisco</a></li>\n \n \n \n <li><a href=\"/seattle/deal_directory\">Seattle</a></li>\n \n <li><a href=\"/st-louis/deal_directory\">St. Louis</a></li>\n \n <li><a href=\"/toronto/deal_directory\">Toronto</a></li>\n \n <li><a href=\"/vancouver/deal_directory\">Vancouver</a></li>\n \n <li><a href=\"/washington-dc/deal_directory\">Washington DC</a></li>\n \n \n </ul>\n </div><!-- end #footer-menu -->\n\n <div id=\"footer-sitemap\">\n <ul>\n <li ><a href=\"/\">Home</a></li>\n <li ><a href=\"/about/\">About</a></li>\n <li ><a href=\"/nation/\">Nation</a></li>\n <li><a href=\"http://blog.yipit.com\">Blog</a></li>\n <li ><a href=\"/about/api/\">API</a></li>\n <li ><a href=\"/data/\">Yipit Data</a></li>\n <li ><a href=\"/about/businesses/\">Businesses</a></li>\n </ul>\n <ul>\n <li ><a href=\"/about/daily_deal_sites/\">Daily Deal Sites</a></li>\n <li ><a href=\"/about/jobs/\">Jobs</a></li>\n <li ><a href=\"/about/press/\">Press</a></li>\n <li ><a href=\"/about/terms/\">Terms</a></li>\n <li ><a href=\"/about/privacy/\">Privacy</a></li>\n <li ><a href=\"/about/faq/\">FAQ</a></li>\n \n </ul>\n <p>Copyright &copy; 2011 Yipit</p>\n </div><!-- end #footer-sitemap -->\n <div class=\"clear\"></div>\n \n </div><!-- end .wrap -->\n\
51
- </div><!-- end #footer -->\n\n \n \n <!-- Start Chartbeat-->\n <script type=\"text/javascript\">\n var _sf_async_config={uid:8463,domain:\"yipit.com\"};\n (function(){\n function loadChartbeat() {\n window._sf_endpt=(new Date()).getTime();\n var e = document.createElement('script');\n e.setAttribute('language', 'javascript');\n e.setAttribute('type', 'text/javascript');\n e.setAttribute('src',\n ((\"https:\" == document.location.protocol) ? \"https://s3.amazonaws.com/\" : \"http://\") +\n \"static.chartbeat.com/js/chartbeat.js\");\n document.body.appendChild(e);\n }\n var oldonload = window.onload;\n window.onload = (typeof window.onload != 'function') ?\n loadChartbeat : function() { oldonload(); loadChartbeat(); };\n })();\n </script>\n <!-- End Chartbeat-->\n <!-- Start Quantcast tag -->\n <script type=\"text/javascript\">\n _qoptions={\n qacct:\"p-3dF18ONyTUxBQ\"\n };\n </script>\n <script type=\"text/javascript\" src=\"http://edge.quantserve.com/quant.js\"></script>\n <noscript>\n <img src=\"http://pixel.quantserve.com/pixel/p-3dF18ONyTUxBQ.gif\" style=\"display: none;\" border=\"0\" height=\"1\" width=\"1\" alt=\"Quantcast\"/>\n </noscript>\n <!-- End Quantcast tag -->\n \n \n\
52
- </body>\n\
53
- </html>\n"
54
- http_version: "1.1"
55
- - !ruby/struct:VCR::HTTPInteraction
56
- request: !ruby/struct:VCR::Request
57
- method: :get
58
- uri: http://api.yipit.com:80/v1/deals/?key=XZgnp3v2vyrBr3eR
59
- body:
60
- headers:
61
- response: !ruby/struct:VCR::Response
62
- status: !ruby/struct:VCR::ResponseStatus
63
- code: 200
64
- message: OK
65
- headers:
66
- server:
67
- - nginx/0.8.54
68
- date:
69
- - Mon, 14 Mar 2011 21:01:34 GMT
70
- content-type:
71
- - application/json; charset=utf-8
72
- transfer-encoding:
73
- - chunked
74
- connection:
75
- - keep-alive
76
- vary:
77
- - Authorization, Cookie
78
- set-cookie:
79
- - session_id=95e28c298958507657e1723c72a8f15a; Domain=.yipit.com; expires=Sat, 10-Sep-2011 21:01:34 GMT; Max-Age=15552000; Path=/
80
- body: "{\n \"meta\": {\n \"code\": 200\n }, \n \"response\": {\n \"deals\": [\n {\n \"id\": 54041, \n \"date_added\": \"2011-03-14 13:46:19\", \n \"end_date\": \"2011-03-16 05:00:00\", \n \"active\": 1, \n \"discount\": {\n \"raw\": 87, \n \"formatted\": \"87%\"\n }, \n \"price\": {\n \"raw\": \"89.00\", \n \"formatted\": \"$89\"\n }, \n \"value\": {\n \"raw\": \"700.00\", \n \"formatted\": \"$700\"\n }, \n \"purchased\": 5, \n \"left\": null, \n \"title\": \"$89 for 8 IPL Treatments at R\xC3\xAAve Soleil\", \n \"yipit_title\": \"87% off 8 IPL Treatments\", \n \"url\": \"http://yipit.com/aff/click/?deal=asReJyv8&key=WYjGuDFf\", \n \"yipit_url\": \"http://yipit.com/montreal/team-buy/89-for-8-ipl-treatments-at-reve-soleil/\", \n \"mobile_url\": \"http://m.yipit.com/montreal/team-buy/89-for-8-ipl-treatments-at-reve-soleil/\", \n \"images\": {\n \"image_big\": \"http://d22nv2k05ynu7x.cloudfront.net/deal_images/deal/89-for-8-ipl-treatments-at-reve-soleil-1300110379_display_image.jpg\", \n \"image_small\": \"http://d22nv2k05ynu7x.cloudfront.net/deal_images/deal/89-for-8-ipl-treatments-at-reve-soleil-1300110379_small_image.jpg\"\n }, \n \"division\": {\n \"slug\": \"montreal\", \n \"name\": \"Montreal \", \n \"active\": 1, \n \"time_zone_diff\": -5, \n \"lat\": 45.299999999999997, \n \"lon\": -73.349999999999994, \n \"url\": \"http://yipit.com/montreal/\"\n }, \n \"tags\": [\n {\n \"name\": \"Dermatology\", \n \"slug\": \"dermatology\", \n \"url\": \"http://yipit.com/montreal/deals/dermatology/\"\n }\n ], \n \"business\": {\n \"id\": 34372, \n \"name\": \"R\xC3\xAAve Soleil\", \n \"url\": \"\", \n \"locations\": [\n {\n \"id\": 44448, \n \"address\": \"4699 Boulevard Lavoisier\", \n \"locality\": \"Saint-L\xC3\xA9onard\", \n \"phone\": \"514-325-3459\", \n \"lat\": 45.584130100000003, \n \"lon\": -73.611951700000006\n }\n ]\n }, \n \"source\": {\n \"name\": \"TeamBuy\", \n \"slug\": \"team-buy\", \n \"paid\": 0, \n \"url\": \"http://yipit.com/montreal/team-buy\"\n }\n }, \n {\n \"id\": 54040, \n \"date_added\": \"2011-03-14 13:44:32\", \n \"end_date\": \"2011-03-15 04:00:00\", \n \"active\": 1, \n \"discount\": {\n \"raw\": 80, \n \"formatted\": \"80%\"\n }, \n \"price\": {\n \"raw\": \"12.00\", \n \"formatted\": \"$12\"\n }, \n \"value\": {\n \"raw\": \"60.00\", \n \"formatted\": \"$60\"\n }, \n \"purchased\": null, \n \"left\": null, \n \"title\": \"$12 for Unlimited Pool + 1 Beverage and Meal at Sharx Pool Bar ($60 Value)\", \n \"yipit_title\": \"80% off All You Can Play Pool and More\", \n \"url\": \"http://yipit.com/aff/click/?deal=UqbwCAwk&key=WYjGuDFf\", \n \"yipit_url\": \"http://yipit.com/montreal/steal-the-deal/12-for-unlimited-pool-1-beverage-and-meal-at-sharx-pool-bar-60-value-1/\", \n \"mobile_url\": \"http://m.yipit.com/montreal/steal-the-deal/12-for-unlimited-pool-1-beverage-and-meal-at-sharx-pool-bar-60-value-1/\", \n \"images\": {\n \"image_big\": \"http://d22nv2k05ynu7x.cloudfront.net/deal_images/deal/12-for-unlimited-pool-1-beverage-and-meal-at-sharx-pool-bar-60-value-1-1300110272_display_image.jpg\", \n \"image_small\": \"http://d22nv2k05ynu7x.cloudfront.net/deal_images/deal/12-for-unlimited-pool-1-beverage-and-meal-at-sharx-pool-bar-60-value-1-1300110272_small_image.jpg\"\n }, \n \"division\": {\n \"slug\": \"montreal\", \n \"name\": \"Montreal \", \n \"active\": 1, \n \"time_zone_diff\": -5, \n \"lat\": 45.299999999999997, \n \"lon\": -73.349999999999994, \n \"url\": \"http://yipit.com/montreal/\"\n }, \n \"tags\": [\n {\n \"name\": \"Bar & Club\", \n \"slug\": \"bar-club\", \n \"url\": \"http://yipit.com/montreal/deals/bar-club/\"\n }\n ], \n \"business\": {\n \"id\": 34371, \n \"name\": \"Sharx Pool Bar\", \n \"url\": \"\", \n \"locations\": []\n }, \n \"source\": {\n \"name\": \"Steal the Deal\", \n \"slug\": \"steal-the-deal\", \n \"paid\": 0, \n \"url\": \"http://yipit.com/montreal/steal-the-deal\"\n }\n }, \n {\n \"id\": 54039, \n \"date_added\": \"2011-03-14 13:42:31\", \n \"end_date\": \"2011-03-15 04:00:00\", \n \"active\": 1, \n \"discount\": {\n \"raw\": 51, \n \"formatted\": \"51%\"\n }, \n \"price\": {\n \"raw\": \"39.00\", \n \"formatted\": \"$39\"\n }, \n \"value\": {\n \"raw\": \"80.00\", \n \"formatted\": \"$80\"\n }, \n \"purchased\": 38, \n \"left\": null, \n \"title\": \"$39 for a 1 Hour Therapeutic Massage and More at Spa Bora Bora\", \n \"yipit_title\": \"51% off a Therapeutic Massage and More\", \n \"url\": \"http://yipit.com/aff/click/?deal=7AVAySvU&key=WYjGuDFf\", \n \"yipit_url\": \"http://yipit.com/montreal/red-flag-deals/39-for-a-1-hour-therapeutic-massage-and-more-at-spa-bora-bora/\", \n \"mobile_url\": \"http://m.yipit.com/montreal/red-flag-deals/39-for-a-1-hour-therapeutic-massage-and-more-at-spa-bora-bora/\", \n \"images\": {\n \"image_big\": \"http://d22nv2k05ynu7x.cloudfront.net/deal_images/deal/39-for-a-1-hour-therapeutic-massage-and-more-at-spa-bora-bora-1300110150_display_image.jpg\", \n \"image_small\": \"http://d22nv2k05ynu7x.cloudfront.net/deal_images/deal/39-for-a-1-hour-therapeutic-massage-and-more-at-spa-bora-bora-1300110150_small_image.jpg\"\n }, \n \"division\": {\n \"slug\": \"montreal\", \n \"name\": \"Montreal \", \n \"active\": 1, \n \"time_zone_diff\": -5, \n \"lat\": 45.299999999999997, \n \"lon\": -73.349999999999994, \n \"url\": \"http://yipit.com/montreal/\"\n }, \n \"tags\": [\n {\n \"name\": \"Massage\", \n \"slug\": \"massage\", \n \"url\": \"http://yipit.com/montreal/deals/massage/\"\n }, \n {\n \"name\": \"Spa\", \n \"slug\": \"spa\", \n \"url\": \"http://yipit.com/montreal/deals/spa/\"\n }\n ], \n \"business\": {\n \"id\": 34370, \n \"name\": \"Spa Bora Bora\", \n \"url\": \"\", \n \"locations\": [\n {\n \"id\": 44447, \n \"address\": \"4800 Rue Ren\xC3\xA9 \xC3\x89mard\", \n \"locality\": \"Pierrefonds\", \n \"phone\": \"514-620-9620\", \n \"lat\": 45.491167599999997, \n \"lon\": -73.848158499999997\n }\n ]\n }, \n \"source\": {\n \"name\": \"Red Flag Deals\", \n \"slug\": \"red-flag-deals\", \n \"paid\": 0, \n \"url\": \"http://yipit.com/montreal/red-flag-deals\"\n }\n }, \n {\n \"id\": 54038, \n \"date_added\": \"2011-03-14 12:56:41\", \n \"end_date\": \"2011-03-15 09:00:00\", \n \"active\": 1, \n \"discount\": {\n \"raw\": 91, \n \"formatted\": \"91%\"\n }, \n \"price\": {\n \"raw\": \"44.00\", \n \"formatted\": \"$44\"\n }, \n \"value\": {\n \"raw\": \"495.00\", \n \"formatted\": \"$495\"\n }, \n \"purchased\": 51, \n \"left\": null, \n \"title\": \"$44 for a 45 Minute Dental Exam and Cleaning, Including Oral Cancer Screening, TMJ Evaluation, Full Mouth Panoramic X-ray, Fluoride Treatment and Take-Home Whitening Pen at ProDent NY Dr. Benjamin Schwartz ($495 Value)\", \n \"yipit_title\": \"91% off a Dental Exam, Cleaning, and More\", \n \"url\": \"http://yipit.com/aff/click/?deal=8bNPRMMc&key=WYjGuDFf\", \n \"yipit_url\": \"http://yipit.com/new-york/deal-find/44-for-a-45-minute-dental-exam-and-cleaning-including-oral-cancer-screening-tmj-evaluation-full-mouth-panoramic-x-ray-fluoride-treatment-and/\", \n \"mobile_url\": \"http://m.yipit.com/new-york/deal-find/44-for-a-45-minute-dental-exam-and-cleaning-including-oral-cancer-screening-tmj-evaluation-full-mouth-panoramic-x-ray-fluoride-treatment-and/\", \n \"images\": {\n \"image_big\": \"http://d22nv2k05ynu7x.cloudfront.net/deal_images/deal/44-for-a-45-minute-dental-exam-and-cleaning-including-oral-cancer-screening-tmj-evaluation-full-mouth-panoramic-x-ray-fluoride-treatment-and-1300107401_display_image.jpg\", \n \"image_small\": \"http://d22nv2k05ynu7x.cloudfront.net/deal_images/deal/44-for-a-45-minute-dental-exam-and-cleaning-including-oral-cancer-screening-tmj-evaluation-full-mouth-panoramic-x-ray-fluoride-treatment-and-1300107401_small_image.jpg\"\n }, \n \"division\": {\n \"slug\": \"new-york\", \n \"name\": \"New York\", \n \"active\": 1, \n \"time_zone_diff\": -4, \n \"lat\": 40.714269000000002, \n \"lon\": -74.005972999999997, \n \"url\": \"http://yipit.com/new-york/\"\n }, \n \"tags\": [\n {\n \"name\": \"Teeth Whitening\", \n \"slug\": \"teeth-whitening\", \n \"url\": \"http://yipit.com/new-york/deals/teeth-whitening/\"\n }, \n {\n \"name\": \"Dental\", \n \"slug\": \"dental\", \n \"url\": \"http://yipit.com/new-york/deals/dental/\"\n }\n ], \n \"business\": {\n \"id\": 17621, \n \"name\": \"ProDent NY\", \n \"url\": \"http://www.prodentny.com/\", \n \"locations\": [\n {\n \"id\": 18739, \n \"address\": \"220 Madison Ave, #B\", \n \"locality\": \"New York\", \n \"phone\": \"212-213-6622\", \n \"lat\": 40.749557500000002, \n \"lon\": -73.981841500000002\n }\n ]\n }, \n \"source\": {\n \"name\": \"DealFind\", \n \"slug\": \"deal-find\", \n \"paid\": 0, \n \"url\": \"http://yipit.com/new-york/deal-find\"\n }\n }, \n {\n \"id\": 54037, \n \"date_added\": \"2011-03-14 12:54:32\", \n \"end_date\": \"2011-03-15 08:00:00\", \n \"active\": 1, \n \"discount\": {\n \"raw\": 60, \n \"formatted\": \"60%\"\n }, \n \"price\": {\n \"raw\": \"120.00\", \n \"formatted\": \"$120\"\n }, \n \"value\": {\n \"raw\": \"300.00\", \n \"formatted\": \"$300\"\n }, \n \"purchased\": 20, \n \"left\": null, \n \"title\": \"$120 for a Certified Bartending Course with Empire Bartending Corporation ($300 Value)\", \n \"yipit_title\": \"60% off a Certified Bartending Course\", \n \"url\": \"http://yipit.com/aff/click/?deal=DRSqmaXY&key=WYjGuDFf\", \n \"yipit_url\": \"http://yipit.com/new-york/ny-daily-news/120-for-a-certified-bartending-course-with-empire-bartending-corporation-300-value/\", \n \"mobile_url\": \"http://m.yipit.com/new-york/ny-daily-news/120-for-a-certified-bartending-course-with-empire-bartending-corporation-300-value/\", \n \"images\": {\n \"image_big\": \"http://d22nv2k05ynu7x.cloudfront.net/deal_images/deal/120-for-a-certified-bartending-course-with-empire-bartending-corporation-300-value-1300107271_display_image.jpg\", \n \"image_small\": \"http://d22nv2k05ynu7x.cloudfront.net/deal_images/deal/120-for-a-certified-bartending-course-with-empire-bartending-corporation-300-value-1300107271_small_image.jpg\"\n }, \n \"division\": {\n \"slug\": \"new-york\", \n \"name\": \"New York\", \n \"active\": 1, \n \"time_zone_diff\": -4, \n \"lat\": 40.714269000000002, \n \"lon\": -74.005972999999997, \n \"url\": \"http://yipit.com/new-york/\"\n }, \n \"tags\": [\n {\n \"name\": \"Life Skills Classes\", \n \"slug\": \"life-skills-classes\", \n \"url\": \"http://yipit.com/new-york/deals/life-skills-classes/\"\n }\n ], \n \"business\": {\n \"id\": 34369, \n \"name\": \"Empire Bartending Academy\", \n \"url\": \"http://www.empirebartendingacademy.com/\", \n \"locations\": []\n }, \n \"source\": {\n \"name\": \"NY Daily News\", \n \"slug\": \"ny-daily-news\", \n \"paid\": 0, \n \"url\": \"http://yipit.com/new-york/ny-daily-news\"\n }\n }, \n {\n \"id\": 54036, \n \"date_added\": \"2011-03-14 12:51:33\", \n \"end_date\": \"2011-03-15 10:00:00\", \n \"active\": 1, \n \"discount\": {\n \"raw\": 67, \n \"formatted\": \"67%\"\n }, \n \"price\": {\n \"raw\": \"49.00\", \n \"formatted\": \"$49\"\n }, \n \"value\": {\n \"raw\": \"150.00\", \n \"formatted\": \"$150\"\n }, \n \"purchased\": 0, \n \"left\": null, \n \"title\": \"$49 for One Month of Unlimited CrossFit Classes by CrossFit Knockout at South Florida Boxing ($150 Value)\", \n \"yipit_title\": \"67% off Unlimited CrossFit Classes\", \n \"url\": \"http://yipit.com/aff/click/?deal=npmcVdgk&key=WYjGuDFf\", \n \"yipit_url\": \"http://yipit.com/miami/dealtificate/49-for-one-month-of-unlimited-crossfit-classes-by-crossfit-knockout-at-south-florida-boxing-150-value/\", \n \"mobile_url\": \"http://m.yipit.com/miami/dealtificate/49-for-one-month-of-unlimited-crossfit-classes-by-crossfit-knockout-at-south-florida-boxing-150-value/\", \n \"images\": {\n \"image_big\": \"http://d22nv2k05ynu7x.cloudfront.net/deal_images/deal/49-for-one-month-of-unlimited-crossfit-classes-by-crossfit-knockout-at-south-florida-boxing-150-value-1300107093_display_image.jpg\", \n \"image_small\": \"http://d22nv2k05ynu7x.cloudfront.net/deal_images/deal/49-for-one-month-of-unlimited-crossfit-classes-by-crossfit-knockout-at-south-florida-boxing-150-value-1300107093_small_image.jpg\"\n }, \n \"division\": {\n \"slug\": \"miami\", \n \"name\": \"Miami\", \n \"active\": 1, \n \"time_zone_diff\": -4, \n \"lat\": 25.7889689, \n \"lon\": -80.226439299999996, \n \"url\": \"http://yipit.com/miami/\"\n }, \n \"tags\": [\n {\n \"name\": \"Fitness Class\", \n \"slug\": \"fitness-classes\", \n \"url\": \"http://yipit.com/miami/deals/fitness-classes/\"\n }\n ], \n \"business\": {\n \"id\": 10967, \n \"name\": \"South Florida Boxing\", \n \"url\": \"http://southfloridaboxing.com/\", \n \"locations\": [\n {\n \"id\": 11296, \n \"address\": \"715 Washington Ave\", \n \"locality\": \"Miami\", \n \"phone\": \"305-672-8262\", \n \"lat\": 25.726782100000001, \n \"lon\": -80.259598400000002\n }\n ]\n }, \n \"source\": {\n \"name\": \"dealtificate\", \n \"slug\": \"dealtificate\", \n \"paid\": 0, \n \"url\": \"http://yipit.com/miami/dealtificate\"\n }\n }, \n {\n \"id\": 54035, \n \"date_added\": \"2011-03-14 12:49:16\", \n \"end_date\": \"2011-03-15 10:00:00\", \n \"active\": 1, \n \"discount\": {\n \"raw\": 75, \n \"formatted\": \"75%\"\n }, \n \"price\": {\n \"raw\": \"49.00\", \n \"formatted\": \"$49\"\n }, \n \"value\": {\n \"raw\": \"200.00\", \n \"formatted\": \"$200\"\n }, \n \"purchased\": null, \n \"left\": null, \n \"title\": \"$49 for $200 Worth of Designer Prescription Eyewear from Eye Desire Eyecare\", \n \"yipit_title\": \"75% off Designer Prescription Eyewear\", \n \"url\": \"http://yipit.com/aff/click/?deal=CkLqKx2z&key=WYjGuDFf\", \n \"yipit_url\": \"http://yipit.com/miami/couptessa/49-for-200-worth-of-designer-prescription-eyewear-from-eye-desire-eyecare/\", \n \"mobile_url\": \"http://m.yipit.com/miami/couptessa/49-for-200-worth-of-designer-prescription-eyewear-from-eye-desire-eyecare/\", \n \"images\": {\n \"image_big\": \"http://d22nv2k05ynu7x.cloudfront.net/deal_images/deal/49-for-200-worth-of-designer-prescription-eyewear-from-eye-desire-eyecare-1300106955_display_image.jpg\", \n \"image_small\": \"http://d22nv2k05ynu7x.cloudfront.net/deal_images/deal/49-for-200-worth-of-designer-prescription-eyewear-from-eye-desire-eyecare-1300106955_small_image.jpg\"\n }, \n \"division\": {\n \"slug\": \"miami\", \n \"name\": \"Miami\", \n \"active\": 1, \n \"time_zone_diff\": -4, \n \"lat\": 25.7889689, \n \"lon\": -80.226439299999996, \n \"url\": \"http://yipit.com/miami/\"\n }, \n \"tags\": [\n {\n \"name\": \"Eye & Vision\", \n \"slug\": \"eye-vision\", \n \"url\": \"http://yipit.com/miami/deals/eye-vision/\"\n }\n ], \n \"business\": {\n \"id\": 21890, \n \"name\": \"Eye Desire Eyecare & Optical Boutique \", \n \"url\": \"http://www.eyedesire.com/\", \n \"locations\": [\n {\n \"id\": 27852, \n \"address\": \"1211 17th St\", \n \"locality\": \"Miami Beach\", \n \"phone\": null, \n \"lat\": 25.792051099999998, \n \"lon\": -80.141986299999999\n }, \n {\n \"id\": 44440, \n \"address\": \"136 NE 2nd Ave\", \n \"locality\": \"Miami\", \n \"phone\": null, \n \"lat\": 25.775928799999999, \n \"lon\": -80.190344699999997\n }\n ]\n }, \n \"source\": {\n \"name\": \"CoupTessa\", \n \"slug\": \"couptessa\", \n \"paid\": 0, \n \"url\": \"http://yipit.com/miami/couptessa\"\n }\n }, \n {\n \"id\": 54034, \n \"date_added\": \"2011-03-14 12:33:50\", \n \"end_date\": \"2011-03-21 05:00:00\", \n \"active\": 1, \n \"discount\": {\n \"raw\": 50, \n \"formatted\": \"50%\"\n }, \n \"price\": {\n \"raw\": \"15.00\", \n \"formatted\": \"$15\"\n }, \n \"value\": {\n \"raw\": \"30.00\", \n \"formatted\": \"$30\"\n }, \n \"purchased\": 87, \n \"left\": null, \n \"title\": \"$15 for $30 Worth of Mexican Fare at Primo's Mexican Grill\", \n \"yipit_title\": \"50% off at Primo's Mexican Grill\", \n \"url\": \"http://yipit.com/aff/click/?deal=D9ByCdzQ&key=WYjGuDFf\", \n \"yipit_url\": \"http://yipit.com/vancouver/wag-jag/15-for-30-worth-of-mexican-fare-at-primos-mexican-grill/\", \n \"mobile_url\": \"http://m.yipit.com/vancouver/wag-jag/15-for-30-worth-of-mexican-fare-at-primos-mexican-grill/\", \n \"images\": {\n \"image_big\": \"http://d22nv2k05ynu7x.cloudfront.net/deal_images/deal/15-for-30-worth-of-mexican-fare-at-primos-mexican-grill-1300106030_display_image.jpg\", \n \"image_small\": \"http://d22nv2k05ynu7x.cloudfront.net/deal_images/deal/15-for-30-worth-of-mexican-fare-at-primos-mexican-grill-1300106030_small_image.jpg\"\n }, \n \"division\": {\n \"slug\": \"vancouver\", \n \"name\": \"Vancouver\", \n \"active\": 1, \n \"time_zone_diff\": -8, \n \"lat\": 49.159999999999997, \n \"lon\": -123.06999999999999, \n \"url\": \"http://yipit.com/vancouver/\"\n }, \n \"tags\": [\n {\n \"name\": \"Restaurants\", \n \"slug\": \"restaurants\", \n \"url\": \"http://yipit.com/vancouver/deals/restaurants/\"\n }\n ], \n \"business\": {\n \"id\": 34368, \n \"name\": \"Primo's Mexican Grill\", \n \"url\": \"http://www.primoson12th.com/\", \n \"locations\": [\n {\n \"id\": 44435, \n \"address\": \"1509 W 12th Ave\", \n \"locality\": \"Vancouver\", \n \"phone\": null, \n \"lat\": 49.260894700000001, \n \"lon\": -123.1391588\n }\n ]\n }, \n \"source\": {\n \"name\": \"WagJag\", \n \"slug\": \"wag-jag\", \n \"paid\": 0, \n \"url\": \"http://yipit.com/vancouver/wag-jag\"\n }\n }, \n {\n \"id\": 54033, \n \"date_added\": \"2011-03-14 12:31:02\", \n \"end_date\": \"2011-03-16 00:00:00\", \n \"active\": 1, \n \"discount\": {\n \"raw\": 61, \n \"formatted\": \"61%\"\n }, \n \"price\": {\n \"raw\": \"21.00\", \n \"formatted\": \"$21\"\n }, \n \"value\": {\n \"raw\": \"55.00\", \n \"formatted\": \"$55\"\n }, \n \"purchased\": 4, \n \"left\": null, \n \"title\": \"$21 for a $55 Credit for Easy Off Wall Murals from InkShuffle.com\", \n \"yipit_title\": \"61% off Wall Murals\", \n \"url\": \"http://yipit.com/aff/click/?deal=Etv4D3gU&key=WYjGuDFf\", \n \"yipit_url\": \"http://yipit.com/vancouver/team-buy/21-for-a-55-credit-for-easy-off-wall-murals-from-inkshufflecom/\", \n \"mobile_url\": \"http://m.yipit.com/vancouver/team-buy/21-for-a-55-credit-for-easy-off-wall-murals-from-inkshufflecom/\", \n \"images\": {\n \"image_big\": \"http://d22nv2k05ynu7x.cloudfront.net/deal_images/deal/21-for-a-55-credit-for-easy-off-wall-murals-from-inkshufflecom-1300105862_display_image.jpg\", \n \"image_small\": \"http://d22nv2k05ynu7x.cloudfront.net/deal_images/deal/21-for-a-55-credit-for-easy-off-wall-murals-from-inkshufflecom-1300105862_small_image.jpg\"\n }, \n \"division\": {\n \"slug\": \"vancouver\", \n \"name\": \"Vancouver\", \n \"active\": 1, \n \"time_zone_diff\": -8, \n \"lat\": 49.159999999999997, \n \"lon\": -123.06999999999999, \n \"url\": \"http://yipit.com/vancouver/\"\n }, \n \"tags\": [\n {\n \"name\": \"Home Services\", \n \"slug\": \"home-services\", \n \"url\": \"http://yipit.com/vancouver/deals/home-services/\"\n }\n ], \n \"business\": {\n \"id\": 34367, \n \"name\": \"Ink Shuffle\", \n \"url\": \"http://inkshuffle.com/\", \n \"locations\": []\n }, \n \"source\": {\n \"name\": \"TeamBuy\", \n \"slug\": \"team-buy\", \n \"paid\": 0, \n \"url\": \"http://yipit.com/vancouver/team-buy\"\n }\n }, \n {\n \"id\": 54032, \n \"date_added\": \"2011-03-14 12:28:52\", \n \"end_date\": \"2011-03-18 07:00:00\", \n \"active\": 1, \n \"discount\": {\n \"raw\": 50, \n \"formatted\": \"50%\"\n }, \n \"price\": {\n \"raw\": \"20.00\", \n \"formatted\": \"$20\"\n }, \n \"value\": {\n \"raw\": \"40.00\", \n \"formatted\": \"$40\"\n }, \n \"purchased\": null, \n \"left\": null, \n \"title\": \"$20 gets you $40 of Artisan Eco Jewelry from Spark Sustainable Jewelry\", \n \"yipit_title\": \"50% off at Spark Jewelry\", \n \"url\": \"http://yipit.com/aff/click/?deal=hSwLse3m&key=WYjGuDFf\", \n \"yipit_url\": \"http://yipit.com/vancouver/ethical-deal/20-gets-you-40-of-artisan-eco-jewelry-from-spark-sustainable-jewelry/\", \n \"mobile_url\": \"http://m.yipit.com/vancouver/ethical-deal/20-gets-you-40-of-artisan-eco-jewelry-from-spark-sustainable-jewelry/\", \n \"images\": {\n \"image_big\": \"http://d22nv2k05ynu7x.cloudfront.net/deal_images/deal/20-gets-you-40-of-artisan-eco-jewelry-from-spark-sustainable-jewelry-1300105731_display_image.jpg\", \n \"image_small\": \"http://d22nv2k05ynu7x.cloudfront.net/deal_images/deal/20-gets-you-40-of-artisan-eco-jewelry-from-spark-sustainable-jewelry-1300105731_small_image.jpg\"\n }, \n \"division\": {\n \"slug\": \"vancouver\", \n \"name\": \"Vancouver\", \n \"active\": 1, \n \"time_zone_diff\": -8, \n \"lat\": 49.159999999999997, \n \"lon\": -123.06999999999999, \n \"url\": \"http://yipit.com/vancouver/\"\n }, \n \"tags\": [\n {\n \"name\": \"Women's Clothing\", \n \"slug\": \"women-s-clothing\", \n \"url\": \"http://yipit.com/vancouver/deals/women-s-clothing/\"\n }\n ], \n \"business\": {\n \"id\": 34366, \n \"name\": \"Spark Jewelry\", \n \"url\": \"http://sparkjewlery.myshopify.com/\", \n \"locations\": []\n }, \n \"source\": {\n \"name\": \"ethicalDeal\", \n \"slug\": \"ethical-deal\", \n \"paid\": 0, \n \"url\": \"http://yipit.com/vancouver/ethical-deal\"\n }\n }, \n {\n \"id\": 54031, \n \"date_added\": \"2011-03-14 12:24:59\", \n \"end_date\": \"2011-03-17 07:00:00\", \n \"active\": 1, \n \"discount\": {\n \"raw\": 55, \n \"formatted\": \"55%\"\n }, \n \"price\": {\n \"raw\": \"40.00\", \n \"formatted\": \"$40\"\n }, \n \"value\": {\n \"raw\": \"90.00\", \n \"formatted\": \"$90\"\n }, \n \"purchased\": 0, \n \"left\": null, \n \"title\": \"$40 for $90 Worth of Interior Gutter Cleaning - Residential or Commercial from Magic Clean Eco Solutions\", \n \"yipit_title\": \"55% off Interior Gutter Cleaning\", \n \"url\": \"http://yipit.com/aff/click/?deal=RRE6RZrV&key=WYjGuDFf\", \n \"yipit_url\": \"http://yipit.com/vancouver/web-piggy/40-for-90-worth-of-interior-gutter-cleaning-residential-or-commercial-from-magic-clean-eco-solutions/\", \n \"mobile_url\": \"http://m.yipit.com/vancouver/web-piggy/40-for-90-worth-of-interior-gutter-cleaning-residential-or-commercial-from-magic-clean-eco-solutions/\", \n \"images\": {\n \"image_big\": \"http://d22nv2k05ynu7x.cloudfront.net/deal_images/deal/40-for-90-worth-of-interior-gutter-cleaning-residential-or-commercial-from-magic-clean-eco-solutions-1300105499_display_image.jpg\", \n \"image_small\": \"http://d22nv2k05ynu7x.cloudfront.net/deal_images/deal/40-for-90-worth-of-interior-gutter-cleaning-residential-or-commercial-from-magic-clean-eco-solutions-1300105499_small_image.jpg\"\n }, \n \"division\": {\n \"slug\": \"vancouver\", \n \"name\": \"Vancouver\", \n \"active\": 1, \n \"time_zone_diff\": -8, \n \"lat\": 49.159999999999997, \n \"lon\": -123.06999999999999, \n \"url\": \"http://yipit.com/vancouver/\"\n }, \n \"tags\": [\n {\n \"name\": \"Home Services\", \n \"slug\": \"home-services\", \n \"url\": \"http://yipit.com/vancouver/deals/home-services/\"\n }\n ], \n \"business\": {\n \"id\": 34365, \n \"name\": \"Magic Clean Eco Solutions\", \n \"url\": \"http://www.magicclean.ca/\", \n \"locations\": [\n {\n \"id\": 44425, \n \"address\": \"\", \n \"locality\": \"Vancouver\", \n \"phone\": \"604-628-3388\", \n \"lat\": 49.261226000000001, \n \"lon\": -123.1139268\n }\n ]\n }, \n \"source\": {\n \"name\": \"WebPiggy\", \n \"slug\": \"web-piggy\", \n \"paid\": 0, \n \"url\": \"http://yipit.com/vancouver/web-piggy\"\n }\n }, \n {\n \"id\": 54030, \n \"date_added\": \"2011-03-14 12:24:50\", \n \"end_date\": \"2011-03-16 02:00:00\", \n \"active\": 1, \n \"discount\": {\n \"raw\": 82, \n \"formatted\": \"82%\"\n }, \n \"price\": {\n \"raw\": \"29.99\", \n \"formatted\": \"$29.99\"\n }, \n \"value\": {\n \"raw\": \"170.00\", \n \"formatted\": \"$170\"\n }, \n \"purchased\": null, \n \"left\": null, \n \"title\": \"$29.99 for 2 Massages and Sugar Scrub Body Treatment from Pure Escape Spa ($170 Value)\", \n \"yipit_title\": \"82% Off Two Massages and a Sugar Scrub\", \n \"url\": \"http://yipit.com/aff/click/?deal=774gfeB5&key=WYjGuDFf\", \n \"yipit_url\": \"http://yipit.com/seattle/icoupon/2999-for-2-massages-and-sugar-scrub-body-treatment-from-pure-escape-spa-170-value/\", \n \"mobile_url\": \"http://m.yipit.com/seattle/icoupon/2999-for-2-massages-and-sugar-scrub-body-treatment-from-pure-escape-spa-170-value/\", \n \"images\": {\n \"image_big\": \"http://d22nv2k05ynu7x.cloudfront.net/deal_images/deal/2999-for-2-massages-and-sugar-scrub-body-treatment-from-pure-escape-spa-170-value-1300105490_display_image.jpg\", \n \"image_small\": \"http://d22nv2k05ynu7x.cloudfront.net/deal_images/deal/2999-for-2-massages-and-sugar-scrub-body-treatment-from-pure-escape-spa-170-value-1300105490_small_image.jpg\"\n }, \n \"division\": {\n \"slug\": \"seattle\", \n \"name\": \"Seattle\", \n \"active\": 1, \n \"time_zone_diff\": -7, \n \"lat\": 47.606209499999999, \n \"lon\": -122.3320708, \n \"url\": \"http://yipit.com/seattle/\"\n }, \n \"tags\": [\n {\n \"name\": \"Massage\", \n \"slug\": \"massage\", \n \"url\": \"http://yipit.com/seattle/deals/massage/\"\n }, \n {\n \"name\": \"Spa\", \n \"slug\": \"spa\", \n \"url\": \"http://yipit.com/seattle/deals/spa/\"\n }\n ], \n \"business\": {\n \"id\": 34364, \n \"name\": \"Pure Escape Spa\", \n \"url\": \"http://www.thepureescapespa.com/\", \n \"locations\": [\n {\n \"id\": 44424, \n \"address\": \"24030 132nd Ave SE\", \n \"locality\": \"Kent\", \n \"phone\": \"253-630-1332\", \n \"lat\": 47.386731599999997, \n \"lon\": -122.1653737\n }\n ]\n }, \n \"source\": {\n \"name\": \"iCoupon\", \n \"slug\": \"icoupon\", \n \"paid\": 0, \n \"url\": \"http://yipit.com/seattle/icoupon\"\n }\n }, \n {\n \"id\": 54029, \n \"date_added\": \"2011-03-14 12:24:32\", \n \"end_date\": \"2011-03-18 17:00:00\", \n \"active\": 1, \n \"discount\": {\n \"raw\": 78, \n \"formatted\": \"78%\"\n }, \n \"price\": {\n \"raw\": \"33.00\", \n \"formatted\": \"$33\"\n }, \n \"value\": {\n \"raw\": \"150.00\", \n \"formatted\": \"$150\"\n }, \n \"purchased\": 3, \n \"left\": null, \n \"title\": \"$33 for your Choice of 3 Pilates Mat or Reformer Sessions at Hot Body Pilates (up to $150 value)\", \n \"yipit_title\": \"78% off your Choice of 3 Pilates Mat or Reformer Sessions\", \n \"url\": \"http://yipit.com/aff/click/?deal=2HUqBqY8&key=WYjGuDFf\", \n \"yipit_url\": \"http://yipit.com/san-diego/kgb-deals/33-for-your-choice-of-3-pilates-mat-or-reformer-sessions-at-hot-body-pilates-up-to-150-value/\", \n \"mobile_url\": \"http://m.yipit.com/san-diego/kgb-deals/33-for-your-choice-of-3-pilates-mat-or-reformer-sessions-at-hot-body-pilates-up-to-150-value/\", \n \"images\": {\n \"image_big\": \"http://d22nv2k05ynu7x.cloudfront.net/deal_images/deal/33-for-your-choice-of-3-pilates-mat-or-reformer-sessions-at-hot-body-pilates-up-to-150-value-1300105472_display_image.jpg\", \n \"image_small\": \"http://d22nv2k05ynu7x.cloudfront.net/deal_images/deal/33-for-your-choice-of-3-pilates-mat-or-reformer-sessions-at-hot-body-pilates-up-to-150-value-1300105472_small_image.jpg\"\n }, \n \"division\": {\n \"slug\": \"san-diego\", \n \"name\": \"San Diego\", \n \"active\": 1, \n \"time_zone_diff\": -7, \n \"lat\": 32.715328999999997, \n \"lon\": -117.15725500000001, \n \"url\": \"http://yipit.com/san-diego/\"\n }, \n \"tags\": [\n {\n \"name\": \"Pilates\", \n \"slug\": \"pilates\", \n \"url\": \"http://yipit.com/san-diego/deals/pilates/\"\n }\n ], \n \"business\": {\n \"id\": 15683, \n \"name\": \"Hot Body Pilates\", \n \"url\": \"http://hotbodypilates.com/\", \n \"locations\": [\n {\n \"id\": 44437, \n \"address\": \"560 6th Ave\", \n \"locality\": \"San Diego\", \n \"phone\": \"858-220-1415\", \n \"lat\": 32.711153000000003, \n \"lon\": -117.1593561\n }\n ]\n }, \n \"source\": {\n \"name\": \"kgb deals\", \n \"slug\": \"kgb-deals\", \n \"paid\": 0, \n \"url\": \"http://yipit.com/san-diego/kgb-deals\"\n }\n }, \n {\n \"id\": 54028, \n \"date_added\": \"2011-03-14 12:24:29\", \n \"end_date\": \"2011-03-18 17:00:00\", \n \"active\": 1, \n \"discount\": {\n \"raw\": 63, \n \"formatted\": \"63%\"\n }, \n \"price\": {\n \"raw\": \"49.00\", \n \"formatted\": \"$49\"\n }, \n \"value\": {\n \"raw\": \"135.00\", \n \"formatted\": \"$135\"\n }, \n \"purchased\": 0, \n \"left\": null, \n \"title\": \"$49 for a 90-Minute Luxury Electric Boat Rental from Newport Fun Tours ($135 Rental)\", \n \"yipit_title\": \"63% off Electric Boat Rentals\", \n \"url\": \"http://yipit.com/aff/click/?deal=spLw3wg8&key=WYjGuDFf\", \n \"yipit_url\": \"http://yipit.com/los-angeles/kgb-deals/49-for-a-90-minute-luxury-electric-boat-rental-from-newport-fun-tours-135-rental/\", \n \"mobile_url\": \"http://m.yipit.com/los-angeles/kgb-deals/49-for-a-90-minute-luxury-electric-boat-rental-from-newport-fun-tours-135-rental/\", \n \"images\": {\n \"image_big\": \"http://d22nv2k05ynu7x.cloudfront.net/deal_images/deal/49-for-a-90-minute-luxury-electric-boat-rental-from-newport-fun-tours-135-rental-1300105469_display_image.jpg\", \n \"image_small\": \"http://d22nv2k05ynu7x.cloudfront.net/deal_images/deal/49-for-a-90-minute-luxury-electric-boat-rental-from-newport-fun-tours-135-rental-1300105469_small_image.jpg\"\n }, \n \"division\": {\n \"slug\": \"los-angeles\", \n \"name\": \"Los Angeles\", \n \"active\": 1, \n \"time_zone_diff\": -7, \n \"lat\": 34.052233999999999, \n \"lon\": -118.243685, \n \"url\": \"http://yipit.com/los-angeles/\"\n }, \n \"tags\": [\n {\n \"name\": \"Outdoor Adventures\", \n \"slug\": \"outdoor-adventures\", \n \"url\": \"http://yipit.com/los-angeles/deals/outdoor-adventures/\"\n }\n ], \n \"business\": {\n \"id\": 9292, \n \"name\": \"Newport Fun Tours\", \n \"url\": \"http://newportfuntours.com/\", \n \"locations\": [\n {\n \"id\": 9502, \n \"address\": \"2122 Newport Blvd\", \n \"locality\": \"Newport Beach\", \n \"phone\": \"949-675-8433\", \n \"lat\": 33.609636999999999, \n \"lon\": -117.928128\n }\n ]\n }, \n \"source\": {\n \"name\": \"kgb deals\", \n \"slug\": \"kgb-deals\", \n \"paid\": 0, \n \"url\": \"http://yipit.com/los-angeles/kgb-deals\"\n }\n }, \n {\n \"id\": 54027, \n \"date_added\": \"2011-03-14 12:24:25\", \n \"end_date\": \"2011-03-18 17:00:00\", \n \"active\": 1, \n \"discount\": {\n \"raw\": 50, \n \"formatted\": \"50%\"\n }, \n \"price\": {\n \"raw\": \"39.00\", \n \"formatted\": \"$39\"\n }, \n \"value\": {\n \"raw\": \"79.00\", \n \"formatted\": \"$79\"\n }, \n \"purchased\": 11, \n \"left\": null, \n \"title\": \"$39 for a 60-Minute Full-Body Neuromuscular Massage at Massage Revolution ($79 Value)\", \n \"yipit_title\": \"50% off a 60-Minute Neuromuscular Massage\", \n \"url\": \"http://yipit.com/aff/click/?deal=ZFFEzdF7&key=WYjGuDFf\", \n \"yipit_url\": \"http://yipit.com/los-angeles/kgb-deals/39-for-a-60-minute-full-body-neuromuscular-massage-at-massage-revolution-79-value/\", \n \"mobile_url\": \"http://m.yipit.com/los-angeles/kgb-deals/39-for-a-60-minute-full-body-neuromuscular-massage-at-massage-revolution-79-value/\", \n \"images\": {\n \"image_big\": \"http://d22nv2k05ynu7x.cloudfront.net/deal_images/deal/39-for-a-60-minute-full-body-neuromuscular-massage-at-massage-revolution-79-value-1300105465_display_image.jpg\", \n \"image_small\": \"http://d22nv2k05ynu7x.cloudfront.net/deal_images/deal/39-for-a-60-minute-full-body-neuromuscular-massage-at-massage-revolution-79-value-1300105465_small_image.jpg\"\n }, \n \"division\": {\n \"slug\": \"los-angeles\", \n \"name\": \"Los Angeles\", \n \"active\": 1, \n \"time_zone_diff\": -7, \n \"lat\": 34.052233999999999, \n \"lon\": -118.243685, \n \"url\": \"http://yipit.com/los-angeles/\"\n }, \n \"tags\": [\n {\n \"name\": \"Massage\", \n \"slug\": \"massage\", \n \"url\": \"http://yipit.com/los-angeles/deals/massage/\"\n }\n ], \n \"business\": {\n \"id\": 4023, \n \"name\": \"Massage Revolution\", \n \"url\": \"http://www.massagerevolution.com/\", \n \"locations\": [\n {\n \"id\": 4053, \n \"address\": \"500 S Sepulveda Blvd\", \n \"locality\": \"Manhattan Beach\", \n \"phone\": \"310-798-4263\", \n \"lat\": 33.875138999999997, \n \"lon\": -118.39530600000001\n }\n ]\n }, \n \"source\": {\n \"name\": \"kgb deals\", \n \"slug\": \"kgb-deals\", \n \"paid\": 0, \n \"url\": \"http://yipit.com/los-angeles/kgb-deals\"\n }\n }, \n {\n \"id\": 54026, \n \"date_added\": \"2011-03-14 12:24:24\", \n \"end_date\": \"2011-03-18 17:00:00\", \n \"active\": 1, \n \"discount\": {\n \"raw\": 50, \n \"formatted\": \"50%\"\n }, \n \"price\": {\n \"raw\": \"12.00\", \n \"formatted\": \"$12\"\n }, \n \"value\": {\n \"raw\": \"24.00\", \n \"formatted\": \"$24\"\n }, \n \"purchased\": 4, \n \"left\": null, \n \"title\": \"$12 for a Ticket to San Francisco\xE2\x80\x99s Championship for The 27th Annual Harmony Sweepstakes A Cappella Festival on March 19 ($24 Value)\", \n \"yipit_title\": \"50% off a Ticket to the 27th Annual Harmony Sweepstakes A Cappella Festival\", \n \"url\": \"http://yipit.com/aff/click/?deal=vkG58DY7&key=WYjGuDFf\", \n \"yipit_url\": \"http://yipit.com/san-francisco/kgb-deals/12-for-a-ticket-to-san-franciscos-championship-for-the-27th-annual-harmony-sweepstakes-a-cappella-festival-on-march-19-24-value/\", \n \"mobile_url\": \"http://m.yipit.com/san-francisco/kgb-deals/12-for-a-ticket-to-san-franciscos-championship-for-the-27th-annual-harmony-sweepstakes-a-cappella-festival-on-march-19-24-value/\", \n \"images\": {\n \"image_big\": \"http://d22nv2k05ynu7x.cloudfront.net/deal_images/deal/12-for-a-ticket-to-san-franciscos-championship-for-the-27th-annual-harmony-sweepstakes-a-cappella-festival-on-march-19-24-value-1300105464_display_image.jpg\", \n \"image_small\": \"http://d22nv2k05ynu7x.cloudfront.net/deal_images/deal/12-for-a-ticket-to-san-franciscos-championship-for-the-27th-annual-harmony-sweepstakes-a-cappella-festival-on-march-19-24-value-1300105464_small_image.jpg\"\n }, \n \"division\": {\n \"slug\": \"san-francisco\", \n \"name\": \"San Francisco\", \n \"active\": 1, \n \"time_zone_diff\": -7, \n \"lat\": 37.774929999999998, \n \"lon\": -122.419415, \n \"url\": \"http://yipit.com/san-francisco/\"\n }, \n \"tags\": [\n {\n \"name\": \"Theater\", \n \"slug\": \"theater\", \n \"url\": \"http://yipit.com/san-francisco/deals/theater/\"\n }\n ], \n \"business\": {\n \"id\": 34363, \n \"name\": \"The 27th Annual Harmony Sweepstakes A Cappella Festival\", \n \"url\": \"\", \n \"locations\": [\n {\n \"id\": 44438, \n \"address\": \"3301 Lyon St\", \n \"locality\": \"San Francisco\", \n \"phone\": \"415-392-4400\", \n \"lat\": 37.801884000000001, \n \"lon\": -122.448249\n }\n ]\n }, \n \"source\": {\n \"name\": \"kgb deals\", \n \"slug\": \"kgb-deals\", \n \"paid\": 0, \n \"url\": \"http://yipit.com/san-francisco/kgb-deals\"\n }\n }, \n {\n \"id\": 54025, \n \"date_added\": \"2011-03-14 12:22:10\", \n \"end_date\": \"2011-03-15 07:00:00\", \n \"active\": 1, \n \"discount\": {\n \"raw\": 62, \n \"formatted\": \"62%\"\n }, \n \"price\": {\n \"raw\": \"89.00\", \n \"formatted\": \"$89\"\n }, \n \"value\": {\n \"raw\": \"240.00\", \n \"formatted\": \"$240\"\n }, \n \"purchased\": null, \n \"left\": null, \n \"title\": \"$89 for 4 week Complete BootCamp with Get P.H.A.T Bootcamp in April ($240 Value)\", \n \"yipit_title\": \"62% off 4 Week Bootcamp\", \n \"url\": \"http://yipit.com/aff/click/?deal=DhX8gqmr&key=WYjGuDFf\", \n \"yipit_url\": \"http://yipit.com/vancouver/steal-the-deal/89-for-4-week-complete-bootcamp-with-get-phat-bootcamp-in-april-240-value/\", \n \"mobile_url\": \"http://m.yipit.com/vancouver/steal-the-deal/89-for-4-week-complete-bootcamp-with-get-phat-bootcamp-in-april-240-value/\", \n \"images\": {\n \"image_big\": \"http://d22nv2k05ynu7x.cloudfront.net/deal_images/deal/89-for-4-week-complete-bootcamp-with-get-phat-bootcamp-in-april-240-value-1300105329_display_image.jpg\", \n \"image_small\": \"http://d22nv2k05ynu7x.cloudfront.net/deal_images/deal/89-for-4-week-complete-bootcamp-with-get-phat-bootcamp-in-april-240-value-1300105329_small_image.jpg\"\n }, \n \"division\": {\n \"slug\": \"vancouver\", \n \"name\": \"Vancouver\", \n \"active\": 1, \n \"time_zone_diff\": -8, \n \"lat\": 49.159999999999997, \n \"lon\": -123.06999999999999, \n \"url\": \"http://yipit.com/vancouver/\"\n }, \n \"tags\": [\n {\n \"name\": \"Boot Camp\", \n \"slug\": \"boot-camp\", \n \"url\": \"http://yipit.com/vancouver/deals/boot-camp/\"\n }\n ], \n \"business\": {\n \"id\": 34362, \n \"name\": \"Get Phat Boot Camp\", \n \"url\": \"http://www.getphatbootcamp.com/\", \n \"locations\": [\n {\n \"id\": 44420, \n \"address\": \"19572 Fraser Way\", \n \"locality\": \"Pitt Meadows\", \n \"phone\": \"778-834-7424\", \n \"lat\": 49.202722100000003, \n \"lon\": -122.67973019999999\n }\n ]\n }, \n \"source\": {\n \"name\": \"Steal the Deal\", \n \"slug\": \"steal-the-deal\", \n \"paid\": 0, \n \"url\": \"http://yipit.com/vancouver/steal-the-deal\"\n }\n }, \n {\n \"id\": 54024, \n \"date_added\": \"2011-03-14 12:21:30\", \n \"end_date\": \"2011-03-16 11:00:00\", \n \"active\": 1, \n \"discount\": {\n \"raw\": 50, \n \"formatted\": \"50%\"\n }, \n \"price\": {\n \"raw\": \"35.00\", \n \"formatted\": \"$35\"\n }, \n \"value\": {\n \"raw\": \"70.00\", \n \"formatted\": \"$70\"\n }, \n \"purchased\": null, \n \"left\": null, \n \"title\": \"$35 for a Series of 6 Beginning Bellydancing Classes with Leslie Rosen ($70 Value)\", \n \"yipit_title\": \"50% Off 6 Beginning Belly Dance Classes\", \n \"url\": \"http://yipit.com/aff/click/?deal=MSj22ehR&key=WYjGuDFf\", \n \"yipit_url\": \"http://yipit.com/seattle/townhog/35-for-a-series-of-6-beginning-bellydancing-classes-with-leslie-rosen-70-value-2/\", \n \"mobile_url\": \"http://m.yipit.com/seattle/townhog/35-for-a-series-of-6-beginning-bellydancing-classes-with-leslie-rosen-70-value-2/\", \n \"images\": {\n \"image_big\": \"http://d22nv2k05ynu7x.cloudfront.net/deal_images/deal/35-for-a-series-of-6-beginning-bellydancing-classes-with-leslie-rosen-70-value-2-1300105289_display_image.jpg\", \n \"image_small\": \"http://d22nv2k05ynu7x.cloudfront.net/deal_images/deal/35-for-a-series-of-6-beginning-bellydancing-classes-with-leslie-rosen-70-value-2-1300105289_small_image.jpg\"\n }, \n \"division\": {\n \"slug\": \"seattle\", \n \"name\": \"Seattle\", \n \"active\": 1, \n \"time_zone_diff\": -7, \n \"lat\": 47.606209499999999, \n \"lon\": -122.3320708, \n \"url\": \"http://yipit.com/seattle/\"\n }, \n \"tags\": [\n {\n \"name\": \"Dance Classes\", \n \"slug\": \"dance-classes\", \n \"url\": \"http://yipit.com/seattle/deals/dance-classes/\"\n }\n ], \n \"business\": {\n \"id\": 27663, \n \"name\": \"Leslie Rosen @ Youngstown Cultural Arts Center\", \n \"url\": \"http://townhog.com/c_ext/2412/aHR0cDovL3d3dy5sZXNsaWVyb3Nlbi5jb20v\", \n \"locations\": [\n {\n \"id\": 36146, \n \"address\": \"4408 Delridge Way SW\", \n \"locality\": \"Seattle\", \n \"phone\": \"206-696-1444\", \n \"lat\": 47.563775, \n \"lon\": -122.363035\n }\n ]\n }, \n \"source\": {\n \"name\": \"TownHog\", \n \"slug\": \"townhog\", \n \"paid\": 0, \n \"url\": \"http://yipit.com/seattle/townhog\"\n }\n }, \n {\n \"id\": 54023, \n \"date_added\": \"2011-03-14 12:19:24\", \n \"end_date\": \"2011-03-15 12:00:00\", \n \"active\": 1, \n \"discount\": {\n \"raw\": 64, \n \"formatted\": \"64%\"\n }, \n \"price\": {\n \"raw\": \"24.00\", \n \"formatted\": \"$24\"\n }, \n \"value\": {\n \"raw\": \"68.00\", \n \"formatted\": \"$68\"\n }, \n \"purchased\": 60, \n \"left\": null, \n \"title\": \"$24 for an Oil Change, Including Oil, Lube and Filter, Tire Rotation, Plus a 40 Point Inspection at H&A Service ($68 Value)\", \n \"yipit_title\": \"64% off an Oil Change\", \n \"url\": \"http://yipit.com/aff/click/?deal=RgYY4eP4&key=WYjGuDFf\", \n \"yipit_url\": \"http://yipit.com/vancouver/deal-find/24-for-an-oil-change-including-oil-lube-and-filter-tire-rotation-plus-a-40-point-inspection-at-ha-service-68-value/\", \n \"mobile_url\": \"http://m.yipit.com/vancouver/deal-find/24-for-an-oil-change-including-oil-lube-and-filter-tire-rotation-plus-a-40-point-inspection-at-ha-service-68-value/\", \n \"images\": {\n \"image_big\": \"http://d22nv2k05ynu7x.cloudfront.net/deal_images/deal/24-for-an-oil-change-including-oil-lube-and-filter-tire-rotation-plus-a-40-point-inspection-at-ha-service-68-value-1300105164_display_image.jpg\", \n \"image_small\": \"http://d22nv2k05ynu7x.cloudfront.net/deal_images/deal/24-for-an-oil-change-including-oil-lube-and-filter-tire-rotation-plus-a-40-point-inspection-at-ha-service-68-value-1300105164_small_image.jpg\"\n }, \n \"division\": {\n \"slug\": \"vancouver\", \n \"name\": \"Vancouver\", \n \"active\": 1, \n \"time_zone_diff\": -8, \n \"lat\": 49.159999999999997, \n \"lon\": -123.06999999999999, \n \"url\": \"http://yipit.com/vancouver/\"\n }, \n \"tags\": [\n {\n \"name\": \"Automotive Services\", \n \"slug\": \"automotive-services\", \n \"url\": \"http://yipit.com/vancouver/deals/automotive-services/\"\n }\n ], \n \"business\": {\n \"id\": 34361, \n \"name\": \"H&A Service\", \n \"url\": \"http://www.haservice.ca/\", \n \"locations\": [\n {\n \"id\": 44414, \n \"address\": \"5678 199 St\", \n \"locality\": \"Langley\", \n \"phone\": null, \n \"lat\": 49.105925800000001, \n \"lon\": -122.6708802\n }\n ]\n }, \n \"source\": {\n \"name\": \"DealFind\", \n \"slug\": \"deal-find\", \n \"paid\": 0, \n \"url\": \"http://yipit.com/vancouver/deal-find\"\n }\n }, \n {\n \"id\": 54022, \n \"date_added\": \"2011-03-14 12:19:10\", \n \"end_date\": \"2011-03-15 08:00:00\", \n \"active\": 1, \n \"discount\": {\n \"raw\": 50, \n \"formatted\": \"50%\"\n }, \n \"price\": {\n \"raw\": \"10.00\", \n \"formatted\": \"$10\"\n }, \n \"value\": {\n \"raw\": \"20.00\", \n \"formatted\": \"$20\"\n }, \n \"purchased\": 7, \n \"left\": null, \n \"title\": \"$10 for $20 to Spend at Tenoch Mexican Grill\", \n \"yipit_title\": \"50% Off at Tenoch Mexican Grill\", \n \"url\": \"http://yipit.com/aff/click/?deal=DUZRJSF4&key=WYjGuDFf\", \n \"yipit_url\": \"http://yipit.com/seattle/voice-deal-of-the-day/10-for-20-to-spend-at-tenoch-mexican-grill/\", \n \"mobile_url\": \"http://m.yipit.com/seattle/voice-deal-of-the-day/10-for-20-to-spend-at-tenoch-mexican-grill/\", \n \"images\": {\n \"image_big\": \"http://d22nv2k05ynu7x.cloudfront.net/deal_images/deal/10-for-20-to-spend-at-tenoch-mexican-grill-1300105150_display_image.jpg\", \n \"image_small\": \"http://d22nv2k05ynu7x.cloudfront.net/deal_images/deal/10-for-20-to-spend-at-tenoch-mexican-grill-1300105150_small_image.jpg\"\n }, \n \"division\": {\n \"slug\": \"seattle\", \n \"name\": \"Seattle\", \n \"active\": 1, \n \"time_zone_diff\": -7, \n \"lat\": 47.606209499999999, \n \"lon\": -122.3320708, \n \"url\": \"http://yipit.com/seattle/\"\n }, \n \"tags\": [\n {\n \"name\": \"Restaurants\", \n \"slug\": \"restaurants\", \n \"url\": \"http://yipit.com/seattle/deals/restaurants/\"\n }\n ], \n \"business\": {\n \"id\": 34360, \n \"name\": \"Tenoch Mexican Grill\", \n \"url\": \"http://www.tenochmexicangrill.com/\", \n \"locations\": [\n {\n \"id\": 44413, \n \"address\": \"2232 Queen Anne Ave N\", \n \"locality\": \"Seattle\", \n \"phone\": \"206-352-3271\", \n \"lat\": 47.639417999999999, \n \"lon\": -122.35660300000001\n }\n ]\n }, \n \"source\": {\n \"name\": \"VOICE Deal of the Day\", \n \"slug\": \"voice-deal-of-the-day\", \n \"paid\": 0, \n \"url\": \"http://yipit.com/seattle/voice-deal-of-the-day\"\n }\n }\n ]\n }\n\
81
- }"
82
- http_version: "1.1"