yipit 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,9 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
5
+ *.swp
6
+ *.swo
7
+ coverage
8
+ doc
9
+ .yardoc
data/.rvmrc ADDED
@@ -0,0 +1 @@
1
+ rvm 1.9.2@yipit
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in yipit.gemspec
4
+ gemspec
data/README.md ADDED
@@ -0,0 +1 @@
1
+ This is a work in progress. Coming soon, bitches.
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
@@ -0,0 +1,5 @@
1
+ class Array
2
+ def extract_options!
3
+ last.is_a?(::Hash) ? pop : {}
4
+ end
5
+ end
@@ -0,0 +1,3 @@
1
+ module Yipit
2
+ VERSION = "0.0.1"
3
+ end
data/lib/yipit.rb ADDED
@@ -0,0 +1,25 @@
1
+ require 'faraday'
2
+ require 'faraday_middleware'
3
+ require 'core_ext/array'
4
+
5
+ module Yipit
6
+ class Client
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|
11
+ builder.adapter Faraday.default_adapter
12
+ builder.adapter :logger
13
+ builder.use Faraday::Response::ParseJson
14
+ builder.use Faraday::Response::Mashify
15
+ end
16
+ end
17
+ def method_missing(sym, *args, &block)
18
+ puts "Method: #{sym }"
19
+ options = args.extract_options!
20
+ options = options.merge(:key => api_key)
21
+ response = conn.get("/v1/#{sym.to_s}/#{args[0]}") { |req| req.params = options }
22
+ response.body.response.send sym
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,82 @@
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"
@@ -0,0 +1,57 @@
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 "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
+ end
56
+ end
57
+
@@ -0,0 +1,20 @@
1
+ require 'simplecov'
2
+ SimpleCov.start do
3
+ add_group 'Yipit', 'lib/yipit'
4
+ add_group 'Specs', 'spec'
5
+ end
6
+
7
+ require File.expand_path('../../lib/yipit', __FILE__)
8
+ require 'rubygems'
9
+ require 'rspec'
10
+ require 'vcr'
11
+
12
+ VCR.config do |c|
13
+ c.cassette_library_dir = 'spec/cassettes'
14
+ c.stub_with :typhoeus
15
+ c.default_cassette_options = { :record => :new_episodes }
16
+ end
17
+
18
+ RSpec.configure do |c|
19
+ c.extend VCR::RSpec::Macros
20
+ end
data/yipit.gemspec ADDED
@@ -0,0 +1,33 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "yipit/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "yipit"
7
+ s.version = Yipit::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Josh Deeden"]
10
+ s.email = ["jdeeden@gmail.com"]
11
+ s.homepage = "http://github.com/jdeeden/yipit"
12
+ s.summary = %q{A simple wrapper for the Yipit API}
13
+ s.description = %q{A simple wrapper for the Yipit API}
14
+
15
+ s.rubyforge_project = "yipit"
16
+ s.add_development_dependency('rake', '~> 0.8')
17
+ s.add_development_dependency('rspec', '~> 2.5')
18
+ s.add_development_dependency('simplecov', '~> 0.4')
19
+ s.add_development_dependency('vcr', '~> 1.7.0')
20
+ s.add_development_dependency('fakeweb')
21
+ s.add_development_dependency('yard', '~> 0.6')
22
+ s.add_development_dependency('maruku', '~> 0.6')
23
+ s.add_runtime_dependency("faraday", '~> 0.5.7')
24
+ s.add_runtime_dependency("faraday_middleware", '~> 0.3.2')
25
+ s.add_runtime_dependency("typhoeus", '~> 0.2.4')
26
+ s.add_runtime_dependency('hashie', '~> 1.0.0')
27
+ s.add_runtime_dependency('multi_json', '~> 0.0.5')
28
+
29
+ s.files = `git ls-files`.split("\n")
30
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
31
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
32
+ s.require_paths = ["lib"]
33
+ end
metadata ADDED
@@ -0,0 +1,201 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: yipit
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.0.1
6
+ platform: ruby
7
+ authors:
8
+ - Josh Deeden
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2011-03-14 00:00:00 -04:00
14
+ default_executable:
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: rake
18
+ prerelease: false
19
+ requirement: &id001 !ruby/object:Gem::Requirement
20
+ none: false
21
+ requirements:
22
+ - - ~>
23
+ - !ruby/object:Gem::Version
24
+ version: "0.8"
25
+ type: :development
26
+ version_requirements: *id001
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec
29
+ prerelease: false
30
+ requirement: &id002 !ruby/object:Gem::Requirement
31
+ none: false
32
+ requirements:
33
+ - - ~>
34
+ - !ruby/object:Gem::Version
35
+ version: "2.5"
36
+ type: :development
37
+ version_requirements: *id002
38
+ - !ruby/object:Gem::Dependency
39
+ name: simplecov
40
+ prerelease: false
41
+ requirement: &id003 !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ~>
45
+ - !ruby/object:Gem::Version
46
+ version: "0.4"
47
+ type: :development
48
+ version_requirements: *id003
49
+ - !ruby/object:Gem::Dependency
50
+ name: vcr
51
+ prerelease: false
52
+ requirement: &id004 !ruby/object:Gem::Requirement
53
+ none: false
54
+ requirements:
55
+ - - ~>
56
+ - !ruby/object:Gem::Version
57
+ version: 1.7.0
58
+ type: :development
59
+ version_requirements: *id004
60
+ - !ruby/object:Gem::Dependency
61
+ name: fakeweb
62
+ prerelease: false
63
+ requirement: &id005 !ruby/object:Gem::Requirement
64
+ none: false
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: "0"
69
+ type: :development
70
+ version_requirements: *id005
71
+ - !ruby/object:Gem::Dependency
72
+ name: yard
73
+ prerelease: false
74
+ requirement: &id006 !ruby/object:Gem::Requirement
75
+ none: false
76
+ requirements:
77
+ - - ~>
78
+ - !ruby/object:Gem::Version
79
+ version: "0.6"
80
+ type: :development
81
+ version_requirements: *id006
82
+ - !ruby/object:Gem::Dependency
83
+ name: maruku
84
+ prerelease: false
85
+ requirement: &id007 !ruby/object:Gem::Requirement
86
+ none: false
87
+ requirements:
88
+ - - ~>
89
+ - !ruby/object:Gem::Version
90
+ version: "0.6"
91
+ type: :development
92
+ version_requirements: *id007
93
+ - !ruby/object:Gem::Dependency
94
+ name: faraday
95
+ prerelease: false
96
+ requirement: &id008 !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ~>
100
+ - !ruby/object:Gem::Version
101
+ version: 0.5.7
102
+ type: :runtime
103
+ version_requirements: *id008
104
+ - !ruby/object:Gem::Dependency
105
+ name: faraday_middleware
106
+ prerelease: false
107
+ requirement: &id009 !ruby/object:Gem::Requirement
108
+ none: false
109
+ requirements:
110
+ - - ~>
111
+ - !ruby/object:Gem::Version
112
+ version: 0.3.2
113
+ type: :runtime
114
+ version_requirements: *id009
115
+ - !ruby/object:Gem::Dependency
116
+ name: typhoeus
117
+ prerelease: false
118
+ requirement: &id010 !ruby/object:Gem::Requirement
119
+ none: false
120
+ requirements:
121
+ - - ~>
122
+ - !ruby/object:Gem::Version
123
+ version: 0.2.4
124
+ type: :runtime
125
+ version_requirements: *id010
126
+ - !ruby/object:Gem::Dependency
127
+ name: hashie
128
+ prerelease: false
129
+ requirement: &id011 !ruby/object:Gem::Requirement
130
+ none: false
131
+ requirements:
132
+ - - ~>
133
+ - !ruby/object:Gem::Version
134
+ version: 1.0.0
135
+ type: :runtime
136
+ version_requirements: *id011
137
+ - !ruby/object:Gem::Dependency
138
+ name: multi_json
139
+ prerelease: false
140
+ requirement: &id012 !ruby/object:Gem::Requirement
141
+ none: false
142
+ requirements:
143
+ - - ~>
144
+ - !ruby/object:Gem::Version
145
+ version: 0.0.5
146
+ type: :runtime
147
+ version_requirements: *id012
148
+ description: A simple wrapper for the Yipit API
149
+ email:
150
+ - jdeeden@gmail.com
151
+ executables: []
152
+
153
+ extensions: []
154
+
155
+ extra_rdoc_files: []
156
+
157
+ files:
158
+ - .gitignore
159
+ - .rvmrc
160
+ - Gemfile
161
+ - README.md
162
+ - Rakefile
163
+ - lib/core_ext/array.rb
164
+ - lib/yipit.rb
165
+ - lib/yipit/version.rb
166
+ - spec/cassettes/Yipit_Client/api/search_deals.yml
167
+ - spec/client/client_spec.rb
168
+ - spec/spec_helper.rb
169
+ - yipit.gemspec
170
+ has_rdoc: true
171
+ homepage: http://github.com/jdeeden/yipit
172
+ licenses: []
173
+
174
+ post_install_message:
175
+ rdoc_options: []
176
+
177
+ require_paths:
178
+ - lib
179
+ required_ruby_version: !ruby/object:Gem::Requirement
180
+ none: false
181
+ requirements:
182
+ - - ">="
183
+ - !ruby/object:Gem::Version
184
+ version: "0"
185
+ required_rubygems_version: !ruby/object:Gem::Requirement
186
+ none: false
187
+ requirements:
188
+ - - ">="
189
+ - !ruby/object:Gem::Version
190
+ version: "0"
191
+ requirements: []
192
+
193
+ rubyforge_project: yipit
194
+ rubygems_version: 1.6.2
195
+ signing_key:
196
+ specification_version: 3
197
+ summary: A simple wrapper for the Yipit API
198
+ test_files:
199
+ - spec/cassettes/Yipit_Client/api/search_deals.yml
200
+ - spec/client/client_spec.rb
201
+ - spec/spec_helper.rb