movie_show_times 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +18 -0
- data/Gemfile +4 -0
- data/LICENSE +22 -0
- data/README.md +30 -0
- data/Rakefile +5 -0
- data/lib/movie_show_times.rb +7 -0
- data/lib/movie_show_times/crawler.rb +50 -0
- data/lib/movie_show_times/parser.rb +68 -0
- data/lib/movie_show_times/version.rb +3 -0
- data/movie_show_times.gemspec +25 -0
- data/spec/fixtures/movies_bsas.html +21 -0
- data/spec/fixtures/movies_bsas_1.txt +33 -0
- data/spec/fixtures/movies_bsas_2.txt +33 -0
- data/spec/fixtures/movies_bsas_3.txt +33 -0
- data/spec/fixtures/movies_bsas_4.txt +33 -0
- data/spec/fixtures/movies_bsas_5.txt +33 -0
- data/spec/fixtures/movies_bsas_6.txt +33 -0
- data/spec/movie_show_times_spec.rb +127 -0
- data/spec/spec_helper.rb +7 -0
- metadata +140 -0
@@ -0,0 +1,33 @@
|
|
1
|
+
HTTP/1.1 200 OK
|
2
|
+
Date: Sun, 15 Apr 2012 14:14:28 GMT
|
3
|
+
Expires: Sun, 15 Apr 2012 14:14:28 GMT
|
4
|
+
Cache-Control: private, max-age=3600
|
5
|
+
Content-Type: text/html; charset=ISO-8859-1
|
6
|
+
Set-Cookie: PREF=ID=ef2b4419965762b5:TM=1334499268:LM=1334499268:S=z9ub2-eMRioiQcPv; expires=Tue, 15-Apr-2014 14:14:28 GMT; path=/; domain=.google.com
|
7
|
+
X-Content-Type-Options: nosniff
|
8
|
+
Server: MoviesFE
|
9
|
+
X-XSS-Protection: 1; mode=block
|
10
|
+
X-Frame-Options: SAMEORIGIN
|
11
|
+
Transfer-Encoding: chunked
|
12
|
+
|
13
|
+
<html><head><script async="" src="movies_bsas_6_files/cbgapi.js"></script><script>(function(){try{var e=!0,j=!1;var aa=function(a,b,c,d){d=d||{};d._sn=["cfg",b,c].join(".");window.gbar.logger.ml(a,d)};var ba={A:1,C:2,U:3,u:4,N:5,H:6,j:7,e:8,Y:9,M:10,G:11,o:12,L:13,k:14,K:15,J:16,W:17,w:18,I:19,X:20,V:21,v:22,B:23,$:24,aa:25,Z:26,z:27,g:28,p:29,h:30,T:31,P:32,Q:33,D:34,F:35,S:36,R:37,O:38};var k=window.gbar=window.gbar||{},l=window.gbar.i=window.gbar.i||{},m={};function _tvn(a,b){var c=parseInt(a,10);return isNaN(c)?b:c}function _tvf(a,b){var c=parseFloat(a);return isNaN(c)?b:c}function _tvv(a){return!!a}function n(a,b,c){(c||k)[a]=b}k.bv={n:_tvn("2",0),r:"",f:"",m:_tvn("0",1)};var o=function(a){return function(){return k.bv.m==a}},ca=o(1),da=o(2);n("sb",ca);n("kn",da);l.a=_tvv;l.b=_tvf;l.c=_tvn;
|
14
|
+
l.i=aa;var ea=window.gbar.i.i;var p,q,s,t,u;function fa(a){t=a}function ga(a){var b=t&&window.encodeURIComponent&&!a.href.match(/^http[s]?:\/\/accounts\.google\.[^/]*\/ClearSID/i)&&!a.href.match(/^http[s]?:\/\/[^/]*\/accounts\/ClearSID/i)&&encodeURIComponent(t());b&&(a.href=a.href.replace(/([?&]continue=)[^&]*/,"$1"+b))}function ha(a){var b=window.encodeURIComponent&&(document.forms[0].q||"").value;b&&(a.href=a.href.replace(/([?&])q=[^&]*|$/,function(a,d){return(d||"&")+"q="+encodeURIComponent(b)}))}p=ha;var ia=fa,ja=ga;
|
15
|
+
function v(a,b,c,d,h,f){var g=document.getElementById(a);if(g){var i=g.style;i.left=d?"auto":b+"px";i.right=d?b+"px":"auto";i.top=c+"px";i.visibility=s?"hidden":"visible";h&&f?(i.width=h+"px",i.height=f+"px"):(v(q,b,c,d,g.offsetWidth,g.offsetHeight),s=s?"":a)}}
|
16
|
+
function ka(a,b,c){var d="on"+b;if(a.addEventListener)a.addEventListener(b,c,j);else if(a.attachEvent)a.attachEvent(d,c);else{var h=a[d];a[d]=function(){var a=h.apply(this,arguments),b=c.apply(this,arguments);return void 0==a?b:void 0==b?a:b&&a}}}
|
17
|
+
var w=[],la=function(a,b){w.push(b)},ma=function(a){var a=a||window.event,b=a.target||a.srcElement;a.cancelBubble=e;null==q&&(a=document.createElement(Array.every||window.createPopup?"iframe":"div"),a.frameBorder="0",q=a.id="gbs",a.src="javascript:''",b.parentNode.appendChild(a),ka(document,"click",x));var c=b,b=0;"gb3"!=c.className&&(c=c.parentNode);var a=c.getAttribute("aria-owns")||"gbi",d=c.offsetWidth,h=20<c.offsetTop?46:24;document.getElementById("tphdr")&&(h-=3);var f=j;do b+=c.offsetLeft||
|
18
|
+
0;while(c=c.offsetParent);var c=(document.documentElement.clientWidth||document.body.clientWidth)-b-d,g,d=document.body,i=document.defaultView;i&&i.getComputedStyle?(d=i.getComputedStyle(d,""))&&(g=d.direction):g=d.currentStyle?d.currentStyle.direction:d.style.direction;g="rtl"==g;if("gbi"==a){for(d=0;i=w[d++];)i();y(null,window.navExtra);g&&(b=c,f=e)}else g||(b=c,f=e);s!=a&&x();v(a,b,h,f)},x=function(){s&&v(s,0,0)},y=function(a,b){var c,d=document.getElementById("gbi"),h=a;h||(h=d.firstChild);for(;b&&
|
19
|
+
(c=b.pop());){var f=d,g=c,i=h;u||(u="gb2");f.insertBefore(g,i).className=u}},na=function(a,b,c){if((b=document.getElementById(b))&&a){a.className="gb4";var d=document.createElement("span");d.appendChild(a);d.appendChild(document.createTextNode(" | "));d.id=c;b.appendChild(d)}},oa=function(){return document.getElementById("gb_70")};n("qs",p);n("setContinueCb",ia);n("pc",ja);n("tg",ma);n("close",x);n("addLink",na);n("almm",y);n("si",oa);n("adh",la);var z=function(){},A=function(){},D=function(a){var b=new Image,c=B;b.onerror=b.onload=b.onabort=function(){try{delete C[c]}catch(a){}};C[c]=b;b.src=a;B=c+1},C=[],B=0;n("logger",{il:A,ml:z});var E=window.gbar.logger;var pa=l.a("1"),F={},qa={},G=[],ra=function(a,b){G.push([a,b])},sa=function(a,b){F[a]=b},ta=function(a){return a in F},H={},I=function(a,b){H[a]||(H[a]=[]);H[a].push(b)},ua=function(a){I("m",a)},J=function(a){var b=document.createElement("script");b.src=a;pa&&(b.async=e);(document.getElementById("xjsc")||document.body).appendChild(b)},L=function(a){for(var b=0,c;(c=G[b])&&!(c[0]==a);++b);c&&!c[1].l&&!c[1].s&&(c[1].s=e,K(2,a),c[1].url&&J(c[1].url),c[1].libs&&m.d&&m.d(c[1].libs))},
|
20
|
+
M=function(a){I("gc",a)},N=null,va=function(a){N=a},K=function(a,b,c){if(N){a={t:a,b:b};if(c)for(var d in c)a[d]=c[d];try{N(a)}catch(h){}}};n("mdc",F);n("mdi",qa);n("bnc",G);n("qGC",M);n("qm",ua);n("qd",H);n("lb",L);n("mcf",sa);n("bcf",ra);n("aq",I);n("mdd","");n("has",ta);n("trh",va);n("tev",K);var O=l.b("0.0001",1.0E-4),P=0;
|
21
|
+
function _mlToken(a,b){try{if(1>P){P++;var c,d=a,h=b||{},f=encodeURIComponent,g=["//www.google.com/gen_204?atyp=i&zx=",(new Date).getTime(),"&jexpid=",f("17483"),"&srcpg=",f("prop=15"),"&jsr=",Math.round(1/O),"&ogf=",k.bv.f,"&ogv=",f("1334215692.0"),"&ogd=",f("com"),"&ogl=",f("en")];h._sn&&(h._sn="og."+h._sn);for(var i in h)g.push("&"),g.push(f(i)),g.push("="),g.push(f(h[i]));g.push("&emsg=");g.push(f(d.name+":"+d.message));var r=g.join("");Q(r)&&
|
22
|
+
(r=r.substr(0,2E3));c=r;var xa=window.gbar.logger._aem(a,c);D(xa)}}catch(Ha){}}var Q=function(a){return 2E3<=a.length},wa=function(a,b){return b};function R(a){z=a;n("_itl",Q,E);n("_aem",wa,E);n("ml",z,E);a={};F.er=a}l.a("")?R(function(a){throw a;}):l.a("1")&&Math.random()<O&&R(_mlToken);G.push(["m",{url:"//ssl.gstatic.com/gb/js/scm_ef3fb0817adf68812790766ec8e6b58f.js"}]);k.mcf("c",{});if(l.a("1")){var ya=l.a("");G.push(["gc",{auto:ya,url:"//ssl.gstatic.com/gb/js/abc/gci_78c17c085d1740ee894d9fec9ece5033.js",libs:"googleapis.client:plusone"}]);var za={version:"gcm_f33b375e36e8c1fa70957777bf47af4a.js",index:"0",lang:"en"};F.gc=za;var S=function(a){window.googleapis&&window.iframes?a&&a():(a&&M(a),L("gc"))};n("lGC",S);l.a("1")&&n("lPWF",S)};window.__PVT="APfa0boCDdLjgUt03VuCOxIEorudei47cI4EMFxowr0ISHzbS8yXLVFNSeubgc0m4NSxlCpooprvQ8Ld3pOSeWRLTwBPZhPW5A==";if(l.a("1")&&l.a("1")){var T=function(a){S(function(){I("pw",a);L("pw")})};n("lPW",T);G.push(["pw",{url:"//ssl.gstatic.com/gb/js/abc/pwm_9f2309242efa34f253d8a3f7d8abb48c.js"}]);var U=[],Aa=function(a){U[0]=a},Ba=function(a,b){var c=b||{};c._sn="pw";z(a,c)},Ca={signed:U,elog:Ba,base:"https://plusone.google.com/u/0",loadTime:(new Date).getTime()};F.pw=Ca;var V=function(a,b){for(var c=b.split("."),d=function(){var b=arguments;a(function(){for(var a=k,d=0,f=c.length-1;d<f;++d)a=a[c[d]];a[c[d]].apply(a,b)})},h=k,f=0,g=c.length-
|
23
|
+
1;f<g;++f)h=h[c[f]]=h[c[f]]||{};return h[c[f]]=d};V(T,"pw.clk");V(T,"pw.hvr");n("su",Aa,k.pw)};function Da(){function a(){for(var b;(b=f[g++])&&!("m"==b[0]||b[1].auto););b&&(K(2,b[0]),b[1].url&&J(b[1].url),b[1].libs&&m.d&&m.d(b[1].libs));g<f.length&&setTimeout(a,0)}function b(){0<h--?setTimeout(b,0):a()}var c=l.a("1"),d=l.a(""),h=3,f=G,g=0,i=window.gbarOnReady;if(i)try{i()}catch(r){ea(r,"ml","or")}d?n("ldb",a):c?window.addEventListener?window.addEventListener("load",b,j):window.attachEvent("onload",b):b()}n("rdl",Da);var W=l.b("0",1.0E-4),X=l.b("1.0",1),Y=j,Z=j;if(l.a("")){var Ea=Math.random();Ea<=W&&(Y=e);Ea<=X&&(Z=e)}var $=ba;
|
24
|
+
function Fa(a,b){var c=W,d=Y,h;h=34>=a?a<=$.k?a==$.j||a==$.e||a==$.o?j:e:a>=$.g&&a<=$.h?e:j:200<=a?e:j;h&&(c=X,d=Z);if(d){d=encodeURIComponent;c=["//www.google.com/gen_204?atyp=i&zx=",(new Date).getTime(),"&oge=",a,"&ogex=",d("17483"),"&ogf=",k.bv.f,"&ogp=",d("15"),"&ogsr=",Math.round(1/c),"&ogv=",d("1334215692.0"),"&ogd=",d("com"),"&ogl=",d("en")];if(b){"ogw"in b&&(c.push("&ogw="+b.ogw),delete b.ogw);var f;h=b;var g=[];for(f in h)0!=g.length&&g.push(","),
|
25
|
+
g.push(f),g.push("."),g.push(h[f]);f=g.join("");""!=f&&(c.push("&ogad="),c.push(d(f)))}D(c.join(""))}}A=Fa;n("il",A,E);var Ga={};F.il=Ga;setTimeout(function(){A($.e)},0);}catch(e){window.gbar&&gbar.logger&&gbar.logger.ml(e,{"_sn":"cfg.init"});}})();
|
26
|
+
(function(){try{var a=window.gbar;a.mcf("pm",{p:""});}catch(e){window.gbar&&gbar.logger&&gbar.logger.ml(e,{"_sn":"cfg.init"});}})();
|
27
|
+
(function(){try{window.gbar.rdl();}catch(e){window.gbar&&gbar.logger&&gbar.logger.ml(e,{"_sn":"cfg.init"});}})();
|
28
|
+
if(!window.google)window.google={};if(!window.google.movies)window.google.movies={};window.google.movies.registerFixdir=function(){var c="[\u0000- !-@[-`{-\u00bf\u00d7\u00f7\u02b9-\u02ff\u2000-\u2bff]",g=new RegExp("^"+c+"*([0-9]"+c+"*$|[A-Za-z\u00c0-\u00d6\u00d8-\u00f6\u00f8-\u02b8\u0300-\u0590\u0800-\u1fff\u2c00-\ufb1c\ufdfe-\ufe6f\ufefd-\uffff])"),h=new RegExp("^"+c+"*$");function e(d,a){if(!a)a=d&&d.target?d.target:window.event.srcElement;a.dir=g.test(a.value)?"ltr":(h.test(a.value)?"":"rtl")}
|
29
|
+
var i=[document.getElementsByName("q")[0],document.getElementById("mtq")];for(var f=0,b;b=i[f];f++)if(b){b.onkeyup=e;e(null,b)}};
|
30
|
+
</script><meta http-equiv="content-type" content="text/html; charset=UTF-8"><title>Movie Showtimes - Google Search</title><style>.fl:link{}a:link,.w,a.w:link,.w a:link{color:#00c}a:visited{color:#551a8b}a:active{color:red}.t a:link,.t a:active,.t a:visited,.t{color:#000}.left{width:12em}.box{background:#fff}.nopadding{padding:0}.k{background:#36c}.z{display:none}.x{width:3em}.y{width:23em}.b{color:#00c;font-size:12pt;font-weight:bold}.i,.i:link{color:#a90a08}.n a{color:#000;font-size:10pt}.n .b a{color:#00c}.n .i{font-size:10pt;font-weight:bold}.h{cursor:pointer}body{background:#fff;font:82% Arial,Helvetica,sans-serif;margin:3px 0 0;padding:0}table{border-collapse:collapse;border-spacing:0}img{border:0}td,th{vertical-align:top}h1,h2{font-size:100%;margin:0}a{color:#00c}/* CSS for page */#title_bar{background:#f0f7f9;border-top:1px solid #6b90da;padding-bottom:4px;padding-left:8px;padding-top:4px}#google_bar{margin:0px 10px}#search_form{margin:3px 10px}#bottom_search{background-color:#e5ecf9;border-style:solid;border-color:#36C;border-width:1px 0 1px 0;padding:5px;text-align:center}#bottom_search_form{margin:1em 0 1.5em 0}#bottom_search_links{margin:1em}#left_nav{border-right:1px solid #c9d7f1;margin-top:11px;position:absolute;left:9px;width:13.4em}#left_nav .section{margin-bottom:1.2em}.hidden{visibility:hidden}#results{height:auto !important;height:400px;margin-left:15em;min-height:400px;min-width:800px;width:expression(document.body.clientWidth<1000?"800px":"99.9%")}.name{font-size:124%;margin:0}.times{clear:both;margin:0}.address{margin:0}#movie_results{overflow:auto}.movie_results{margin-top:11px}.movie{clear:both;margin-bottom:40px}.movie .header{padding-left:8px}.movie .img{border:1px solid #ccc;float:left;margin-bottom:10px}.movie .desc{margin-bottom:15px;max-width:44em}.movie h2{font-size:124%;margin-bottom:2px}.movie .info{margin-bottom:10px}.movie .links{display:inline-block;height:15px;margin-right:10px}.movie .syn{margin-bottom:10px}.movie .section_title{background:#f0f7f9;clear:both;font-size:108%;margin-bottom:11px;margin-top:11px;padding-bottom:4px;padding-left:8px;padding-top:5px}.movie .showtimes{margin-bottom:8px;padding-left:8px}.movie .show_left{width:49%}.movie .show_right{width:49%}.movie .theater{padding-bottom:15px}.theater{clear:both;padding-bottom:1px}.theater_after_icon{padding-left:25px}.theater .show_left{width:49%}.theater .show_right{width:49%}.theater h2{font-size:124%;margin-bottom:2px}.theater .icon{float:left;height:3em;margin-right:5px}.theater .closure{font-size:100%}.theater .info{font-size:100%;padding-bottom:5px;padding-top:5px}.theater .movie{margin-bottom:8px;margin-right:8px;max-width:42em}.theater .movie .desc{margin-bottom:5px;margin-left:0}.theater .movie .info{margin-top:0}.theater .showtimes{margin-bottom:40px;margin-top:8px}#theater_map{right:0;left:0;position:relative;top:0}#theater_static_map{border:1px solid #c9d7f1;margin:10px}.map_marker .name{margin-top:10px}.photo{border:1px solid #ccc;margin-bottom:20px;margin-left:8px}.show_left{float:left;margin:0;width:49.999%}.show_right{float:right;margin:0;width:50%}.show_more{clear:both;font-size:124%;margin:0}.show_more a{color:#77c}.reviews{margin-bottom:8px;padding-left:8px}.review{margin-bottom:5px}.review .publisher{color:green}.review .date{color:#6f6f6f}.trailer{margin-bottom:8px;padding-left:8px}.clear{clear:both}.iconA{background:url(http://maps.gstatic.com/mapfiles/red_icons_A_J.png) repeat 0 0}.iconB{background:url(http://maps.gstatic.com/mapfiles/red_icons_A_J.png) repeat 0 -38px}.iconC{background:url(http://maps.gstatic.com/mapfiles/red_icons_A_J.png) repeat 0 -76px}.iconD{background:url(http://maps.gstatic.com/mapfiles/red_icons_A_J.png) repeat 0 -114px}.iconE{background:url(http://maps.gstatic.com/mapfiles/red_icons_A_J.png) repeat 0 -152px}.iconF{background:url(http://maps.gstatic.com/mapfiles/red_icons_A_J.png) repeat 0 -190px}.iconG{background:url(http://maps.gstatic.com/mapfiles/red_icons_A_J.png) repeat 0 -228px}.iconH{background:url(http://maps.gstatic.com/mapfiles/red_icons_A_J.png) repeat 0 -266px}.iconI{background:url(http://maps.gstatic.com/mapfiles/red_icons_A_J.png) repeat 0 -304px}.iconJ{background:url(http://maps.gstatic.com/mapfiles/red_icons_A_J.png) repeat 0 -342px}.iconK{background:url(http://maps.gstatic.com/mapfiles/red_icons_K_Z.png) repeat 0 0}.iconL{background:url(http://maps.gstatic.com/mapfiles/red_icons_K_Z.png) repeat 0 -38px}.iconM{background:url(http://maps.gstatic.com/mapfiles/red_icons_K_Z.png) repeat 0 -76px}.iconN{background:url(http://maps.gstatic.com/mapfiles/red_icons_K_Z.png) repeat 0 -114px}.iconO{background:url(http://maps.gstatic.com/mapfiles/red_icons_K_Z.png) repeat 0 -152px}.iconP{background:url(http://maps.gstatic.com/mapfiles/red_icons_K_Z.png) repeat 0 -190px}.iconQ{background:url(http://maps.gstatic.com/mapfiles/red_icons_K_Z.png) repeat 0 -228px}.iconR{background:url(http://maps.gstatic.com/mapfiles/red_icons_K_Z.png) repeat 0 -266px}.iconS{background:url(http://maps.gstatic.com/mapfiles/red_icons_K_Z.png) repeat 0 -304px}.iconT{background:url(http://maps.gstatic.com/mapfiles/red_icons_K_Z.png) repeat 0 -342px}.iconU{background:url(http://maps.gstatic.com/mapfiles/red_icons_K_Z.png) repeat 0 -380px}.iconV{background:url(http://maps.gstatic.com/mapfiles/red_icons_K_Z.png) repeat 0 -418px}.iconW{background:url(http://maps.gstatic.com/mapfiles/red_icons_K_Z.png) repeat 0 -456px}.iconX{background:url(http://maps.gstatic.com/mapfiles/red_icons_K_Z.png) repeat 0 -494px}.iconY{background:url(http://maps.gstatic.com/mapfiles/red_icons_K_Z.png) repeat 0 -532px}.iconZ{background:url(http://maps.gstatic.com/mapfiles/red_icons_K_Z.png) repeat 0 -570px}#gbar,#guser{font-size:13px;padding-top:1px !important;}#gbar{float:left;height:22px}#guser{padding-bottom:7px !important;text-align:right}.gbh,.gbd{border-top:1px solid #c9d7f1;font-size:1px}.gbh{height:0;position:absolute;top:24px;width:100%}#gbs,.gbm{background:#fff;left:0;position:absolute;text-align:left;visibility:hidden;z-index:1000}.gbm{border:1px solid;border-color:#c9d7f1 #36c #36c #a2bae7;z-index:1001}.gb1{margin-right:.5em}.gb1,.gb3{zoom:1}.gb2{display:block;padding:.2em .5em}.gb2,.gb3{text-decoration:none !important;border-bottom:none}a.gb1,a.gb4{text-decoration:underline !important}a.gb1,a.gb2,a.gb3,a.gb4{color:#00c !important}.gbi .gb3,.gbi .gb2,.gbi .gb4{color:#dd8e27 !important}.gbf .gb3,.gbf .gb2,.gbf .gb4{color:#900 !important}a.gb2:hover{background:#36c;color:#fff !important}#gbar .gbz0l{color:#000 !important;cursor:default;font-weight:bold;text-decoration:none !important}</style></head><body onload="document.gs.reset();google.movies.registerFixdir()" onresize="google.movies.resizeApp()"><div id="header"><div id="google_bar"><div id="gbar"><nobr><a onclick="gbar.qs(this);" class="gb1" id="gb_1" href="http://www.google.com/search?near=Buenos+Aires&hl=en&sa=N&tab=Vw&authuser=0">Search</a> <a onclick="gbar.qs(this);" class="gb1" id="gb_2" href="http://www.google.com/search?near=Buenos+Aires&hl=en&tbm=isch&source=og&sa=N&tab=Vi&authuser=0">Images</a> <a onclick="gbar.qs(this);" class="gb1" id="gb_12" href="http://www.google.com/search?near=Buenos+Aires&hl=en&tbo=u&tbm=vid&source=og&sa=N&tab=Vv&authuser=0">Videos</a> <a onclick="gbar.qs(this);" class="gb1" id="gb_8" href="http://maps.google.com/maps?near=Buenos+Aires&hl=en&sa=N&tab=Vl&authuser=0">Maps</a> <a class="gb1" id="gb_5" href="http://news.google.com/nwshp?hl=en&tab=Vn&authuser=0">News</a> <a onclick="gbar.qs(this);" class="gb1" id="gb_6" href="http://www.google.com/search?near=Buenos+Aires&hl=en&tbo=u&tbm=shop&source=og&sa=N&tab=Vf&authuser=0">Shopping</a> <a id="gb_23" href="https://mail.google.com/mail/?tab=Vm&authuser=0" class="gb1">Gmail</a> <a class="gb3" href="http://www.google.com/intl/en/options/" onclick="this.blur();gbar.tg(event);return !1" aria-haspopup="true"><u>More</u> <small>▼</small></a><div class="gbm" id="gbi"><a onclick="gbar.qs(this);" class="gb2" id="gb_51" href="http://translate.google.com/?near=Buenos+Aires&hl=en&sa=N&tab=VT">Translate</a><a onclick="gbar.qs(this);" class="gb2" id="gb_10" href="http://www.google.com/search?near=Buenos+Aires&hl=en&tbo=u&tbm=bks&source=og&sa=N&tab=Vp&authuser=0">Books</a><a onclick="gbar.qs(this);" class="gb2" id="gb_27" href="http://www.google.com/finance?near=Buenos+Aires&hl=en&sa=N&tab=Ve&authuser=0">Finance</a><a onclick="gbar.qs(this);" class="gb2" id="gb_9" href="http://scholar.google.com/scholar?near=Buenos+Aires&hl=en&sa=N&tab=Vs">Scholar</a><a onclick="gbar.qs(this);" class="gb2" id="gb_13" href="http://www.google.com/search?near=Buenos+Aires&hl=en&tbo=u&tbm=blg&source=og&sa=N&tab=Vb&authuser=0">Blogs</a><div class="gb2"><div class="gbd"></div></div><a onclick="gbar.qs(this);" class="gb2" id="gb_36" href="http://www.youtube.com/results?near=Buenos+Aires&hl=en&sa=N&tab=V1&authuser=0">YouTube</a><a class="gb2" id="gb_24" href="https://www.google.com/calendar?tab=Vc&authuser=0">Calendar</a><a onclick="gbar.qs(this);" class="gb2" id="gb_31" href="http://picasaweb.google.com/lh/view?near=Buenos+Aires&hl=en&q=&sa=N&tab=Vq">Photos</a><a class="gb2" id="gb_25" href="https://docs.google.com/?tab=Vo&authuser=0">Documents</a><a class="gb2" id="gb_38" href="https://sites.google.com/?tab=V3&authuser=0">Sites</a><a onclick="gbar.qs(this);" class="gb2" id="gb_3" href="https://groups.google.com/groups?near=Buenos+Aires&hl=en&sa=N&tab=Vg&authuser=0">Groups</a><a class="gb2" id="gb_32" href="http://www.google.com/reader/view/?hl=en&tab=Vy&authuser=0">Reader</a><div class="gb2"><div class="gbd"></div></div><a href="http://www.google.com/intl/en/options/" class="gb2">Even more »</a></div></nobr></div><div id="guser" width="100%"><nobr><span id="gbn" class="gbi"></span><span id="gbf" class="gbf"></span><b class="gb4">chrishein@gmail.com</b> | <span id="gbe"></span><a onclick="this.blur();gbar.tg(event);return !1" aria-haspopup="true" aria-owns="gbg" class="gb3"><u>Settings</u> <small>▼</small></a> | <a target="_top" id="gb_71" href="https://accounts.google.com/Logout?hl=en&continue=http://www.google.com/movies%3Fnear%3DBuenos%2BAires%26hl%3Den%26start%3D50" class="gb4">Sign out</a><div class="gbm" id="gbg"><a id="gb_156" href="https://accounts.google.com/ManageAccount?hl=en" class="gb2">Google Account settings</a> </div></nobr></div><div class="gbh" style="left:0"></div><div class="gbh" style="right:0"></div></div><div id="search_form" class="clear"><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td valign="top"><a href="http://www.google.com/webhp?hl=en" title="Go to Google Home"><img src="movies_bsas_6_files/logo_sm.gif" alt="Google" border="0" height="55" vspace="12" width="150"></a></td><td> </td><td valign="top"><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td height="27" valign="bottom"></td></tr></tbody></table><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td nowrap="nowrap"><form name="gs" method="get" action="/movies"><input dir="" name="q" size="41" maxlength="2048" type="text"><font size="-1"> <input name="btnG" value="Search Movies" type="submit"> <input name="btnmeta=search=search" value="Search the Web" type="submit"><input name="near" value="Buenos Aires" type="hidden"><input name="hl" value="en" type="hidden"></font></form><span></span></td><td nowrap="nowrap"><font size="-2"> <a href="http://www.google.com/advanced_search?near=Buenos+Aires&hl=en&start=50">Advanced Search</a><br> <a href="http://www.google.com/preferences?hl=en">Preferences</a></font></td></tr></tbody></table></td></tr></tbody></table></div></div><h1 id="title_bar">Showtimes for Buenos Aires, Ciudad Autónoma de Buenos Aires</h1><div id="left_nav"><form action="/movies" style="padding:0;margin:0"><div class="section" style="padding-left:6px"><b>Change Location</b><br><input dir="" id="mtq" name="near" size="13" style="margin-bottom: 0.1em;" type="text"><br><input value="Change" type="submit"><input name="rl" value="1" type="hidden"><input name="hl" value="en" type="hidden"><input name="stok" value="ABAPP2vuHRxe_xgoCMDzCcf9JdKI6BYFlQ:1334502931049" type="hidden"></div></form><div class="section"><div><b>› Today</b></div><div><span class="hidden"> › </span><a href="http://www.google.com/movies?near=Buenos+Aires&hl=en&date=1">Tomorrow</a></div><div><span class="hidden"> › </span><a href="http://www.google.com/movies?near=Buenos+Aires&hl=en&date=2">Tuesday</a></div><div><span class="hidden"> › </span><a href="http://www.google.com/movies?near=Buenos+Aires&hl=en&date=3">Wednesday</a></div></div><div class="section"><div><b>› All times</b></div><div><span class="hidden"> › </span><a href="http://www.google.com/movies?near=Buenos+Aires&hl=en&time=1">Morning</a></div><div><span class="hidden"> › </span><a href="http://www.google.com/movies?near=Buenos+Aires&hl=en&time=2">Afternoon</a></div><div><span class="hidden"> › </span><a href="http://www.google.com/movies?near=Buenos+Aires&hl=en&time=3">Evening</a></div><div><span class="hidden"> › </span><a href="http://www.google.com/movies?near=Buenos+Aires&hl=en&time=4">Late</a></div></div><div class="section"><div><b>› Theaters</b></div><div><span class="hidden"> › </span><a href="http://www.google.com/movies?near=Buenos+Aires&hl=en&sort=1">Movies</a></div></div><div class="section"><div><b>› Show list view</b></div><div><span class="hidden"> › </span><a href="http://www.google.com/movies?near=Buenos+Aires&hl=en&view=map">Show map view</a></div></div></div><div id="results"><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td><img src="movies_bsas_6_files/pixel_white.gif" alt="" height="1" width="800"></td></tr></tbody></table><div id="movie_results"><div class="movie_results"><div class="theater"><div class="desc" id="theater_2203798906914821059"><h2 class="name"><a href="http://www.google.com/movies?near=Buenos+Aires&hl=en&tid=1e95776dfb0d53c3" id="link_1_theater_2203798906914821059">Fundación PROA</a></h2><div class="info">La Boca - Caminito, Avenida Pedro de Mendoza 1929, Buenos Aires, Argentina - 0-11-4104-1000<a href="" class="fl" target="_top"></a></div></div><div class="showtimes"><div class="show_left"><div class="movie"><div class="name"><a href="http://www.google.com/movies?near=Buenos+Aires&hl=en&mid=a85e591782c9fc92">Il sorriso del capo</a></div><span class="info">1hr 15min - Documentary - English</span><div class="times"><span style="color:"><span style="padding:0 "></span><!-- -->15:45</span></div></div></div><div class="show_right"><div class="movie"><div class="name"><a href="http://www.google.com/movies?near=Buenos+Aires&hl=en&mid=c6bef7ed8f2f8dc">Mesa Cine Político</a></div><span class="info">Program - Spanish</span><div class="times"><span style="color:"><span style="padding:0 "></span><!-- -->17:00</span></div></div></div><p class="clear"></p></div></div><div class="theater"><div class="desc" id="theater_1330987898330821919"><h2 class="name">Beckett Teatro</h2> - <span class="closure">Closed for maintenance</span><div class="info">Guardia Vieja 3556, Buenos Aires, Argentina - 0-11-4867-5185<a href="" class="fl" target="_top"></a></div></div><div class="showtimes"><div class="movie"><div class="name"><a href=""></a></div><span class="info"></span><div class="times"></div></div><p class="clear"></p></div></div><div class="theater"><div class="desc" id="theater_18270903741562327668"><h2 class="name">Elefante - Club de Cine</h2> - <span class="closure">Closed for maintenance</span><div class="info">Soler 3964, Buenos Aires, Argentina - 0-11-4821-4425<a href="" class="fl" target="_top"></a></div></div><div class="showtimes"><div class="movie"><div class="name"><a href=""></a></div><span class="info"></span><div class="times"></div></div><p class="clear"></p></div></div><div class="theater"><div class="desc" id="theater_5713644769997381445"><h2 class="name">Cobra - Pequeña librería y galería</h2> - <span class="closure">Closed for maintenance</span><div class="info">Doctor Juan Felipe Aranguren 150, Buenos Aires, Argentina - 0-1536395371<a href="" class="fl" target="_top"></a></div></div><div class="showtimes"><div class="movie"><div class="name"><a href=""></a></div><span class="info"></span><div class="times"></div></div><p class="clear"></p></div></div><div class="theater"><div class="desc" id="theater_1017591528439152157"><h2 class="name">Cine Bernasconi</h2> - <span class="closure">Closed for maintenance</span><div class="info">Marcos Sastre 3195, Buenos Aires, Argentina - 0-45016462<a href="" class="fl" target="_top"></a></div></div><div class="showtimes"><div class="movie"><div class="name"><a href=""></a></div><span class="info"></span><div class="times"></div></div><p class="clear"></p></div></div><div class="theater"><div class="desc" id="theater_5226007103328127021"><h2 class="name">Cine Coral</h2> - <span class="closure">Closed for maintenance</span><div class="info">Lebensohn N° 185 - entre Espora y Buchardo, Mar de Ajó, Argentina - 0-2257-422-667<a href="" class="fl" target="_top"></a></div></div><div class="showtimes"><div class="movie"><div class="name"><a href=""></a></div><span class="info"></span><div class="times"></div></div><p class="clear"></p></div></div><div class="theater"><div class="desc" id="theater_9652686705385911944"><h2 class="name">Cine Teatro San Pedro</h2> - <span class="closure">Not showing movies</span><div class="info">Bermúdez 2052, Buenos Aires, Argentina - 0-11-4639-1879<a href="" class="fl" target="_top"></a></div></div><div class="showtimes"><div class="movie"><div class="name"><a href=""></a></div><span class="info"></span><div class="times"></div></div><p class="clear"></p></div></div></div></div><p class="clear"></p></div><br clear="all"><div id="navbar" class="n"><table align="center" border="0" cellpadding="0" cellspacing="0" width="1%"><tbody><tr style="text-align: center;" align="center" valign="top"><td class="b" align="right" nowrap="nowrap"><a href="http://www.google.com/movies?near=Buenos+Aires&hl=en&start=40"><img src="movies_bsas_6_files/nav_previous.gif" alt="" border="0" height="26" width="68"><br>Previous</a></td><td nowrap="nowrap"><a href="http://www.google.com/movies?near=Buenos+Aires&hl=en"><img src="movies_bsas_6_files/nav_page.gif" alt="" border="0" height="26" width="16"><br>1</a></td><td nowrap="nowrap"><a href="http://www.google.com/movies?near=Buenos+Aires&hl=en&start=10"><img src="movies_bsas_6_files/nav_page.gif" alt="" border="0" height="26" width="16"><br>2</a></td><td nowrap="nowrap"><a href="http://www.google.com/movies?near=Buenos+Aires&hl=en&start=20"><img src="movies_bsas_6_files/nav_page.gif" alt="" border="0" height="26" width="16"><br>3</a></td><td nowrap="nowrap"><a href="http://www.google.com/movies?near=Buenos+Aires&hl=en&start=30"><img src="movies_bsas_6_files/nav_page.gif" alt="" border="0" height="26" width="16"><br>4</a></td><td nowrap="nowrap"><a href="http://www.google.com/movies?near=Buenos+Aires&hl=en&start=40"><img src="movies_bsas_6_files/nav_page.gif" alt="" border="0" height="26" width="16"><br>5</a></td><td nowrap="nowrap"><img src="movies_bsas_6_files/nav_current.gif" alt="" height="26" width="16"><br><span class="i">6</span></td><td nowrap="nowrap"><img src="movies_bsas_6_files/nav_last.gif" alt="" height="26" width="46"><br></td></tr></tbody></table></div><br><script gapi_processed="true" type="text/javascript" src="movies_bsas_6_files/plusone.js"></script><div id="bottom_search"><form method="get" action="/movies" id="bottom_search_form"><input name="q" size="31" maxlength="2048" type="text"> <input name="btnG" value="Search Movies" type="submit"> <input name="btnmeta=search=search" value="Search the Web" type="submit"><input name="near" value="Buenos Aires" type="hidden"><input name="hl" value="en" type="hidden"></form><p id="bottom_search_links"><a href="http://www.google.com/language_tools">Language Tools</a> | <a href="http://www.google.com/intl/en/help.html">Search Tips</a></p></div><center><p></p><hr class="z"><table border="0" cellpadding="2" cellspacing="0" width="100%"><tbody><tr><td align="center"><font size="-1"><a href="http://www.google.com/">Google Home</a> - <a href="http://www.google.com/intl/en/ads/">Advertising Programs</a> - <a href="http://www.google.com/services/">Business Solutions</a> - <a href="http://www.google.com/intl/en/about.html">About Google</a></font></td></tr></tbody></table><br><font class="p" size="-1">©2012 Google</font><p></p></center><script>if(!window.google)window.google={};if(!window.google.movies)window.google.movies={};function f(){if(typeof window.innerHeight=="number")return window.innerHeight;else if(document.documentElement&&document.documentElement.clientHeight)return document.documentElement.clientHeight;else if(document.body&&document.body.clientHeight)return document.body.clientHeight;else return 0}function g(a){var c=0;for(var b=a;b;b=b.offsetParent)c+=b.offsetTop;return c}window.google.movies.resizeApp=function(){var a=
|
31
|
+
document.getElementById("theater_map");if(!a)return;var c=document.getElementById("theater_static_map");if(c)c.style.display="none";var b=f(),h=g(a),d=Math.max(100,b-h),e=d;if(navigator.appName!="Microsoft Internet Explorer")e-=2;a.style.height=e+"px";a.style.border="1px solid #c9d7f1";var i=document.getElementById("movie_results");i.style.height=d+"px";document.body.style.overflowY="hidden"};
|
32
|
+
if(gbar.lPWF)gbar.lPWF(function(){gapi.plusone.go()});
|
33
|
+
</script><script async="" src="movies_bsas_6_files/gci_78c17c085d1740ee894d9fec9ece5033.js"></script><script async="" src="movies_bsas_6_files/scm_ef3fb0817adf68812790766ec8e6b58f.js"></script></body></html>
|
@@ -0,0 +1,127 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
require 'spec_helper'
|
3
|
+
require 'fakeweb'
|
4
|
+
|
5
|
+
describe MovieShowTimes do
|
6
|
+
context 'parsing a results page' do
|
7
|
+
|
8
|
+
before :all do
|
9
|
+
@movieShowTimes = MovieShowTimes::Parser.new
|
10
|
+
doc = Nokogiri::HTML(File.read('spec/fixtures/movies_bsas.html'))
|
11
|
+
@movieShowTimes.parse_show_times(doc)
|
12
|
+
end
|
13
|
+
|
14
|
+
it "provides a list of all theaters" do
|
15
|
+
@movieShowTimes.theaters.length.should == 10
|
16
|
+
end
|
17
|
+
|
18
|
+
it "provides names of theaters" do
|
19
|
+
@movieShowTimes.theaters.should have_key('Monumental')
|
20
|
+
@movieShowTimes.theaters.should have_key('Premier')
|
21
|
+
@movieShowTimes.theaters.should have_key('Arteplex Centro')
|
22
|
+
@movieShowTimes.theaters.should have_key('Cine Hoyts Abasto')
|
23
|
+
end
|
24
|
+
|
25
|
+
it "provides info of theaters" do
|
26
|
+
theater = @movieShowTimes.theaters['Monumental']
|
27
|
+
theater[:info].should match('Lavalle 780, Buenos Aires, Argentina - 0-11-4393-9008')
|
28
|
+
end
|
29
|
+
|
30
|
+
it "provides list of movies for a theater" do
|
31
|
+
theater = @movieShowTimes.theaters['Monumental']
|
32
|
+
theater[:movies].length.should == 12
|
33
|
+
|
34
|
+
theater = @movieShowTimes.theaters['Cine Hoyts Abasto']
|
35
|
+
theater[:movies].length.should == 43
|
36
|
+
end
|
37
|
+
|
38
|
+
it "provides names of movies for a theater" do
|
39
|
+
theater = @movieShowTimes.theaters['Monumental']
|
40
|
+
theater[:movies].map{ |m| m[:name] }.should
|
41
|
+
include('Wrath of the Titans', 'American Reunion', 'La suerte en tus manos')
|
42
|
+
end
|
43
|
+
|
44
|
+
it "provides language of movies" do
|
45
|
+
theater = @movieShowTimes.theaters['Monumental']
|
46
|
+
movie = theater[:movies][0]
|
47
|
+
movie[:language].should_not be_nil
|
48
|
+
movie[:language].should match('English')
|
49
|
+
|
50
|
+
theater = @movieShowTimes.theaters['Atlas Patio Bullrich']
|
51
|
+
movie = theater[:movies][3]
|
52
|
+
movie[:language].should_not be_nil
|
53
|
+
movie[:language].should match('Italian')
|
54
|
+
|
55
|
+
end
|
56
|
+
|
57
|
+
it "provides list of times for movies at a theater" do
|
58
|
+
theater = @movieShowTimes.theaters['Monumental']
|
59
|
+
movie = theater[:movies][0]
|
60
|
+
movie[:times].length.should == 6
|
61
|
+
end
|
62
|
+
|
63
|
+
it "provides showtimes for movies at a theater" do
|
64
|
+
theater = @movieShowTimes.theaters['Monumental']
|
65
|
+
movie = theater[:movies][0]
|
66
|
+
movie[:times][0].should match('14:00')
|
67
|
+
end
|
68
|
+
|
69
|
+
it "provides list of movies" do
|
70
|
+
@movieShowTimes.movies.should have_key('Mirror Mirror')
|
71
|
+
@movieShowTimes.movies.should have_key('Reus')
|
72
|
+
end
|
73
|
+
|
74
|
+
it "provides movie info with duration" do
|
75
|
+
movie = @movieShowTimes.movies['Mirror Mirror']
|
76
|
+
movie[:info][:duration].should == (60*60 + 46) #'1hr 46min'
|
77
|
+
|
78
|
+
movie = @movieShowTimes.movies['Titanic 3D']
|
79
|
+
movie[:info][:duration].should == (3*60*60 + 14) #'3hr 14min'
|
80
|
+
|
81
|
+
movie = @movieShowTimes.movies['La sensibilidad']
|
82
|
+
movie[:info][:duration].should == 55 #'55min'
|
83
|
+
|
84
|
+
movie = @movieShowTimes.movies['Tupac Amaru, algo está cambiando']
|
85
|
+
movie[:info][:duration].should be_nil
|
86
|
+
end
|
87
|
+
|
88
|
+
it "provides movie info with genre" do
|
89
|
+
movie = @movieShowTimes.movies['Mirror Mirror']
|
90
|
+
movie[:info][:genre].should_not be_nil
|
91
|
+
movie[:info][:genre].should match('Scifi/Fantasy')
|
92
|
+
|
93
|
+
movie = @movieShowTimes.movies['American Reunion']
|
94
|
+
movie[:info][:genre].should_not be_nil
|
95
|
+
movie[:info][:genre].should match('Comedy/Romance')
|
96
|
+
end
|
97
|
+
|
98
|
+
end
|
99
|
+
|
100
|
+
context 'when initialized without location' do
|
101
|
+
it "should raise an exception" do
|
102
|
+
lambda { MovieShowTimes::Crawler.new() }.should raise_error(MovieShowTimes::Crawler::MissingLocationArgument)
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
context 'when initialized with location' do
|
107
|
+
before :all do
|
108
|
+
FakeWeb.allow_net_connect = false
|
109
|
+
(1..6).each do |i|
|
110
|
+
uri = "http://www.google.com/movies?hl=en&near=Buenos+Aires"
|
111
|
+
uri += "&start=#{10*(i - 1)}" if i > 1
|
112
|
+
FakeWeb.register_uri(:get, uri,
|
113
|
+
:response => File.open("spec/fixtures/movies_bsas_#{i}.txt", 'r').read
|
114
|
+
)
|
115
|
+
end
|
116
|
+
|
117
|
+
@movieShowTimes = MovieShowTimes::Crawler.new({ :location => 'Buenos Aires' })
|
118
|
+
end
|
119
|
+
|
120
|
+
it "should crawl all result pages" do
|
121
|
+
@movieShowTimes.theaters.should_not be_empty
|
122
|
+
@movieShowTimes.movies.should_not be_empty
|
123
|
+
@movieShowTimes.theaters.length.should == 37
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,140 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: movie_show_times
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Christian Hein
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-04-16 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: mechanize
|
16
|
+
requirement: &2153457520 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *2153457520
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: nokogiri
|
27
|
+
requirement: &2153457100 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
type: :runtime
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *2153457100
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: chronic_duration
|
38
|
+
requirement: &2153456680 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
type: :runtime
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *2153456680
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: rspec
|
49
|
+
requirement: &2153456260 !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
type: :development
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: *2153456260
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: rake
|
60
|
+
requirement: &2153455840 !ruby/object:Gem::Requirement
|
61
|
+
none: false
|
62
|
+
requirements:
|
63
|
+
- - ! '>='
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0'
|
66
|
+
type: :development
|
67
|
+
prerelease: false
|
68
|
+
version_requirements: *2153455840
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: fakeweb
|
71
|
+
requirement: &2153455420 !ruby/object:Gem::Requirement
|
72
|
+
none: false
|
73
|
+
requirements:
|
74
|
+
- - ! '>='
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0'
|
77
|
+
type: :development
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: *2153455420
|
80
|
+
description: Get Movie Show Times by Location
|
81
|
+
email:
|
82
|
+
- chrishein@gmail.com
|
83
|
+
executables: []
|
84
|
+
extensions: []
|
85
|
+
extra_rdoc_files: []
|
86
|
+
files:
|
87
|
+
- .gitignore
|
88
|
+
- Gemfile
|
89
|
+
- LICENSE
|
90
|
+
- README.md
|
91
|
+
- Rakefile
|
92
|
+
- lib/movie_show_times.rb
|
93
|
+
- lib/movie_show_times/crawler.rb
|
94
|
+
- lib/movie_show_times/parser.rb
|
95
|
+
- lib/movie_show_times/version.rb
|
96
|
+
- movie_show_times.gemspec
|
97
|
+
- spec/fixtures/movies_bsas.html
|
98
|
+
- spec/fixtures/movies_bsas_1.txt
|
99
|
+
- spec/fixtures/movies_bsas_2.txt
|
100
|
+
- spec/fixtures/movies_bsas_3.txt
|
101
|
+
- spec/fixtures/movies_bsas_4.txt
|
102
|
+
- spec/fixtures/movies_bsas_5.txt
|
103
|
+
- spec/fixtures/movies_bsas_6.txt
|
104
|
+
- spec/movie_show_times_spec.rb
|
105
|
+
- spec/spec_helper.rb
|
106
|
+
homepage: https://github.com/chrishein/movie_show_times
|
107
|
+
licenses: []
|
108
|
+
post_install_message:
|
109
|
+
rdoc_options: []
|
110
|
+
require_paths:
|
111
|
+
- lib
|
112
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
114
|
+
requirements:
|
115
|
+
- - ! '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
119
|
+
none: false
|
120
|
+
requirements:
|
121
|
+
- - ! '>='
|
122
|
+
- !ruby/object:Gem::Version
|
123
|
+
version: '0'
|
124
|
+
requirements: []
|
125
|
+
rubyforge_project:
|
126
|
+
rubygems_version: 1.8.6
|
127
|
+
signing_key:
|
128
|
+
specification_version: 3
|
129
|
+
summary: Google Movies crawler and parser
|
130
|
+
test_files:
|
131
|
+
- spec/fixtures/movies_bsas.html
|
132
|
+
- spec/fixtures/movies_bsas_1.txt
|
133
|
+
- spec/fixtures/movies_bsas_2.txt
|
134
|
+
- spec/fixtures/movies_bsas_3.txt
|
135
|
+
- spec/fixtures/movies_bsas_4.txt
|
136
|
+
- spec/fixtures/movies_bsas_5.txt
|
137
|
+
- spec/fixtures/movies_bsas_6.txt
|
138
|
+
- spec/movie_show_times_spec.rb
|
139
|
+
- spec/spec_helper.rb
|
140
|
+
has_rdoc:
|