From 27bf5349f62ce11763441eb2aa8e69ee10bf9987 Mon Sep 17 00:00:00 2001 From: re4k Date: Sat, 30 Mar 2013 01:22:54 +0900 Subject: [PATCH] Minor fixes --- app/assets/images/protected_profile_image.png | Bin 9350 -> 0 bytes app/controllers/search_controller.rb | 28 ++++++++++++------ app/views/main/about.html.haml | 1 - app/views/main/api.html.haml | 1 - app/views/main/index.html.haml | 7 +++-- config/routes.rb | 9 ++++-- 6 files changed, 29 insertions(+), 17 deletions(-) delete mode 100644 app/assets/images/protected_profile_image.png diff --git a/app/assets/images/protected_profile_image.png b/app/assets/images/protected_profile_image.png deleted file mode 100644 index 3d1e0f924bf3c03b8d443e263e7fbdc7f971e736..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9350 zcmd5?c{J5+yXGY-V?rX4$`~@oHbfy5m5mG`86xwv%}OcrED1@-l(x*;hB8l^Ov#*? zu#sV#_qliPx6b#y=RIew?~ilVI@YSa_HXa~JkRfb?(4d*`+9!CH#Jphj(Rv`Sfn|w!M@Twekff`W7QD z^pn;()A2`PKMLBH>HM^`w1)cX+8rrI(F$HT?bl+XozxDIW746fMFZv}k8+he4wF18 zCnE_${OgMoB?&!>gyf$u6SO3pI1-Y-yj&h8C8=j8`RB{u$AMA*Iu5-1+c?Bg|1u8o z-Cx)9k9YrE&p$@}%XM=BY&9L}Oa5XS)ne}N^kZ>h!F#+m5GE9}>M*ykI2qm;5D?Ja-Oa!46w@}X zo+--9o9!~&G1(NU#~&}6*xuBnn%?z5oK;?s6Boss*Jo2=usmAjjT^4$?d=uN`!HPP z-Ea2s&V?5f6B98pF(&@k)Ya8nTU$dyL+vCDCH7XzD=IuaJYWO|hh-VJpW+X`zR}6k zJ#*$vT3T9-F{havWj%X*=?gP)RxvTLp6+h@(MnGk9ag9sd3x2;<0r=%#i+LFX#r{e zc=a6Qi~btLClsA>_+gh$xh5~#AjGK-(~HTno}y>Yj88O#4h#%1hi1NiAJ+Nk32%I> zL5Ypq&tB`VZxr`;HYP8hu4msYLlJKP&&|V=gq?|rVW603zv7KT;hUSAS0|fPm6fAC z=uybH1~X~jo%Qj$=XC5c=AwyyzDkFawS*G-bF@{_{dA`;6Q{{aZ zzke()F0QPs?C!qJJ;|`QxA)0)zR-2Pd$8o;TAx4=!kjyH9#(7B`MSyx_KoTUHN}$# zvvC@?TO~GquP!-Ftk3s6?Eip$EF0uqqJ8tGBitK|7#9}@JIF@;Y;VtpxhF5oe&my& ze&IPTu7K(%<$6>Qf&FEFg7-vyutW9sOn0V+0%6a^$w}mXPK?r(EB){Fdn#P4c4#Mz zE%fuh)z{a@@@V14Y6!RyOkiMOdxp$|o_E+!ZVQ8D4xPN0hx6iol_anu+!u$+mLUc{ z5(YFSc0-$MoeKE1wfl^mI2}cMd)&wSP40`|qmz^OtjgMzCA!L;ChP03rf4?72zOuh z*@TCNhK7gV(9jUz=Qrbobah+!b{Fn4`&K&3p&*RLApBqkn^Z$M@YXe5VY4amTAgS( z&VBvIW-TY~gKKg1y}D-*>d|W7B&k3A8?jhB2pD8}#xf@^#(laq9uoHZ_wR9WjLhFw z&rLaRKRt5X%*<>K5rmmK$IT7-0I?e~y(sIoo-MO}Ee8qtR$(OM65X^oU|U*PD4N&D zk42n`gd5%X*|*MKf0ti=dn#7Wdox+VzdAcRJD1jo{wXBfysJ!=F$V)f_j`RYe}8{E zy2vqtdawfLZdbbM_V#v`X37q}hLDn&$XD`^>KQHjC!0Qg%`{Rcv^kJ~(ML071A|ur ze%e20W^@l+(@ahn(US)%-AY%X5f&CUF)_*4WjpozkC}O9dD*1M@4vs0Ll58w~?b@Jp%g@dihzC69au@`$NO!4H*`STWI)xIq)Ez;7`5rz?Y`b9GdCVm5HS12uMCvcaEsF+nCYimRlr zHba$rs{zoJZ3Yz_uDtKBNdG!OP3*`t^1Q<$1SQVMY2l z^-SHo@SvbM$jI4_lx=sUjc;UduzrPeCOdwh*t&=6gwV>04n6+p#{t_TM~)1Y+J#0& zmfg9)uzi=0@o2cpaTXR9CZ^2(1ps}sa#)N-iGkkxJIC1B_qSH>doQ`v2OWb?OiMX& zT)w+YWw18~duyF*zkc!i+B;Vax3w({Sfws~O#=>PhoVrgBPi612dq-F%k-Ly4p=<5 zDcJ#5y75Z<9*m*IbN1~0rU-Tf3fJD!k~189B;Y2-eM!=85WX)CNh>ZMhiX#Z_1pe6 zeNxQw91qXX^zlB}5QxIXJM?&-_>`3W`K(m?v1&O1fjnoeXSev{?S@KIF5atsh^}fB z_3B%xqf=;46q|)Db>B`JeoRKWgJ14MDh?CyANxMs#Yn)jf{axEhd$KU#L$a$?pAo$BU0+mDnxA;--$moD_!sD>8u$M1iLIKj75bQss zxPr%XK%U59~~w`gFDL?j6tP*SWPX1|%mZLoE?BEWIEi z^0BZGH$Hxhkx~3!?NivKt5>hCyhC1jLP68o-fmQ4qoe%6T}Vi1w9LT-iDdL2x>6$V zEL`)|wIPIwM>9D)P9Ub&#tr6#APrzp4hjki@)3Q*s4-u_crk!V$DBtd1-Cd*L`q89 z9$T*0R6b-|3is+TR4NGC;P$s~Oh=W?&8Hv>>gwtm)hpmRjPRPzIQj0 z28yio%x`6umtT^TOIhx|S@mt0?zC*V&-Sm@Pr>P&hiO>FUrM{oXb4v^GBDKUgm2YV z)14HZ0;~XYyhS;W*B%OOsLij3f*TbbErP-g15LJmI@QwI>ChU-m#z{%(W|mo0)>z; z$w9cLrgm(9<6vp146;ASTS9Lm!QujQ+xL(6&z?OSd0NhZ&jNiHvze=t2Q^y4VN^Cn zQ*~ff0cu}9S7&EiOG}0G^wIn0a5@8}c0;cu9+vv|~Z!>W4UtFCSxw(A`g!goE9D zgOZ6W6vw#Eo|Ti8txriaG%$dQs%+UD?X9C-O}hqw<>BU*sabTc0D!pyPXGkd7wNH0 zO;EyQCQ3^NY|HFNK&OU9m+P@F^rIbmv%5BzhEn`*#X$6_sly^7fD*ko`t-JK)40T0 zZ#X&@%wfY-&N`uIaytsI+t~b!AiuM!5$kyTEE#!I3l^K-JbkRgB$M0;O)7Xt3JXTT?Tl z#~7J|ggkKX%hmbvF z5%L0#2ho_hH7|Xa=WX>PwvuSWGW-4yca@cuH9e%Ejj1wLa2Ty5C8Jp3Q?y{O2(7LP z<2-z-;y9|m0F);XsZ81;v<9-WKI?N`vD`N%)<`3U6^Gg9hAUj42Wao?M9t-SczC!j z4Z01NJ3)$0tFdOga>wQbBoRxw2m@*!@&s-KIs@lnjqJXkfJ)&z1((tNE_XT3DdqKr zAX@Hn$3k(**KMN?#$=r5<~}Xs+N_8Qi*B0+N-~1@KpEP;_b6j;YcldJ8l%h0NL-?t z7z;HNgWTr29|R?++pyq~8h=7m6utb>s8_wc$gTwA-K{OhXm+QB;`R0QsVQ>|M=7KN z{%79;R%$FPDCoxlY1A9ocF3#X(MpwYR>%X5K}Z4+G7e4bt<%3&R#xWb<_Zcfe!Itc z!?I{QR!hDDwfuTcZfkqnsm5eNXg<=z%j*;SvdB%qMy5u>=Hh@DFK-b3bc`Ele5f@# zQ|=y}^1BxR$}thUz|V_rpGTozq?6x*Agq13QfMn_sH9Zuy4d4a2_lO&oG|9r7yGf|xzVQl@#T@9evL~t#m>+Jpsi8qU2#*eKETt}UP&*u8$CtUWJpZ+hob z@pD~JQ6_T^EC4bCx#G%K@$jE^Hg!}yYfi)g|p;XY4dAj*8FB+Z2J%0T72_+pZ z9i9KL8?|+HAko{yB{;E#P_|t^KOzNjSh)OpsN`Xj4Z?^IH%+-b*%) zf1qyD$Hxa|Qw?YBLz^g6s|S+X4HQ~@d$0eN|#l0N{yWbLR3)+k-hp}p}s@H{A0wkfhKw5>2X-<|Yd=B`Ut{Mqd$)$$0 z+-A7#B=s}E#{2j0O?HfpH$gI28F$Jc&hhf`&HwoFgiX?xS5UBIx5Kd1w!)%~Sx7Cg zt!clX@>flL$`!Y3&@9dZ@8dz!Sy)*i%m_<^C59MxK?~LR5CrGylSn9#7Huzl@gpdA zlaOfO@<1+rejDhb_UxGach1}+e>Bo|nvD%(iG4Lx=75;^(bC_K0x_4ob$EjI5@xaO zg<#R{cEq%d`=ZB>&yTHMdp^50iEcSbYASr_&>`3o9}t=Bx7-!!RU%JUp_YwXBY1W` z7tGLp&szi`4!%s*S!PJY0Z^QJ`34PqkseAH+DP0Tp)1VM&hp#e=%*bd0Bu7L(iD7; z6ZdG%+}u2jMFfgt-7!Q$+cYQ>6XG3FI#DJYY(}3|mC0V@kGFwl1jf%={QV0H3v8;w zn4$$56dw?yiT}P^wc;W8L6fayXOh%1D2Rwl0%=g^p$}q_w0)_bX$I}WqqWv*DEAg`SacV(!9ISh z#%Cacfq+0^ zSXfxN59f0p1}lcce{U5Q=xK0zF+dpkm?u6lQQEpY16^}4Se@0>3r#pA66`~dO-USk zJ-g#i(%rr7HSj^A5)!P&AXJ$IEP%jrAJ*v2(Y68+1IWr+bYy*Danl#r zg^ZH6JxQwb7#_73SXPEt;@CNlQXP$2`KKD8Yx4Noe1QcgyjkeCQ?d;yaY)_b%fyqOf~2TSePI5;|& zK7%jXRA`V7{c>+QeNNw@~m}pM!p{u(0sdjuJ?bWY8LH z4wY#=^DKxU#E+H2$WzkYwvvbyE48!--5D*=%@})5GiiEW&771)A$_5b0AD5@X!`2` zC^*=E3J}xg%~9@4gCdTOQ?!@9fuds;G%&x&a>~u|+~JLdehvjcAJ|j`^nITdVU?mR z)F4pR)YYAbTO!mmL0|_0H`#wLI70?-J0&D9?+3aX#65%;lmk?05Kz}MZ;Ln*Z((zJ zOaXkQfPg=ms-7k!^n)$Mi^vEQM&8Oicm8}8I2jR`Gnnh#RMgZ{#>D+v1Do~fvu85v zLZ;x|43{}@Sji~uOofr?Jn4F1J62sa+4?~@?}V`NDGm;;fpLaAE~+|?(1n+cdM*5# zZlfKnL8BdPZ5OG8D?f7)gH%}v`fwW%AMw3{^DxM2gBm|y;Co(#(cv~xM>~~tr!N7A zW;;_+U&~aX+57&3itoT328I3(81Ax#42Xl)cmZ$*mkP_^{(*0`(fwj~kUAIIK1(c))r=WO zVyTWEeWl>q~v1S{V;o#Q1@i?sPE%uc_{tPge%`Gf+9C=v7xn*QNfhTSB z=xD?+X-+vrR9R9luMbFe{1GV`n7Az5K?u$xAVzYV|{VWS+|*F zlK5OxfH`6AW-pn{98miEYzu6fr#FA?@; z6`;6sDGWG!g2;J!hPVv40ECj$8~}?Wxlc~K0chcKa&q2E;WszIx|ja*Vv<8OxP!;5 zDxjB%jHDx8JXdd1^6uR`Fe-vZi8g{q)M?^~;D5mezm-C{xKPp1oW}t`iy2Rx(3?uj z866!><|mt=z1D#r^LO}o=c>c$Q>WhdFZ^djn0y&Bl9CJ|G=Gqh{dpB&%UG2UjWCEI zG2;3fY$dI%tU^bL9?@GfvOWhE``1+nrLfdUl2lsIpFM z{ESC&GH{f24QXwiQ%)1Fe!hncG^qM|IOUYHd^h~=91}CM?!*innVqVIBcAnA$)tR) zBp4xTA{v9WoNQ)?;}R}#YXg~+Ygs>b+$kv$&ckg!rbmHveN2m!&w$3mIEi;W@KjOmcfCLe!DDi1g3oaO3FcK zM@A>FuayL*3T9x(LvFpJ1Y#*EcR76y(hH8?I`&*csv>gA%U{kvE+=C+zhm8BPmIS0 zDAGYg1sNGn*$BkRrY0w~qqEW=D@3o*qb@sxLy#ilcGbaem4yG`HaN477`HE?NgnG7x1~l$8Gb;MlQaz@pT& zw0^k?bVPsh*s(9`uqpF4W7YdWQm-AI8sXrQpFbDWPCHFs;t*!Jx{Z<339ts@M_51r z<20#q>sD9l$g%4=NSl&Dr^!YrxZ&vAx3EWseaJr4J`itgY67cs7HT2HeQ$#(&02?s zFv_9K=&DTvNLpUR<>7I&+uGWbu)*5eG!%6p+bl#A4f1Kh6aw41CyQ=j5m3~|(VU?0 zhhbKaQ#LIe@n-K_GNkzXQSg6rq#Q=_Z+-2*oM8W7pFF=Y(7yNw(v#xJIK&3166jUX zp!n+p@pf{6zD{s(F!Zf*(1QU1`E4i2%iH}dhGz@N4v5bJ$U~Tyda^p9)g~h&OJvC9 z|6*AratJ8`>c`|07>!G)YN=qXz*HdZ0)%vr_fNXPmzBC;Y z5+W)p+HNTpOXTcYvyae^6RW_=_f#SeF_;w%`0dQ|%m63I4xJ zviN0WMDF6nsNY}ZI;;ewSZt90+nhN>PJU4hh{K?=swzp`n##9$u|w-z?M8i@=O zs+$LtlM7`k$PP{^h<3I;feJo|fWp%GT5cD=OekifASb_`DxXpZn)&iu=**!{?SqqE zp1q9#PH1hgDTp#41)unk+~>O$=^^ywY5GN$V2mO2`cxxMd4g$XvS$YFGgu7JMX0E# z+;&G|QxCtcf0|owSu_F`e5i2s_hReVFQ&Zw{5x0<5-@SV^n%(t`}r}MVTnycJ)k(@ z7Mu*i5kyRkGe{{IAC4-o(LV*nyR*Cd{Mob3pM9ZdE#T!7y1KfS;;i5}lPi9mcYXhv z_)LTmi&fjdKI8E}JyTJia_ryw+P^*u@;^R$@wZ1fVAj7q5dydNZ#)t5HyR*5ukyDi rLjLw-$)6?ZztF}1n`Iew5J;zW3KWL6KIao35K>dty!t`OG~hn~36UEz diff --git a/app/controllers/search_controller.rb b/app/controllers/search_controller.rb index b5933d7..2777c0a 100644 --- a/app/controllers/search_controller.rb +++ b/app/controllers/search_controller.rb @@ -4,12 +4,14 @@ class SearchController < ApplicationController def search @show_search = true + # TODO: OR とか () とか対応したいよね unless params[:query] render_tweets(Tweet.where(:id => -1)) return end - p words = Shellwords.shellwords(params[:query]) + words = Shellwords.shellwords(params[:query]) + dateformat = "(20[0-9]{2})([-_\/]?)([0-9]{2})\\2([0-9]{2})" # $1: year, $3: month, $4: day result = words.inject(Tweet.order_by_id) do |tweets, word| case word @@ -17,9 +19,13 @@ def search # 特殊 key, value = word.split(":", 2) case key.downcase - when /^user$/ + when /^-?user$/ user = User.cached(value) - tweets.where(:user_id => user ? user.id : -1) + if key[0] == "-" + tweets.where("user_id != ?", user ? user.id : -1) + else + tweets.where(:user_id => user ? user.id : -1) + end when /^-?fav/ search_unless_zero(tweets, "favorites_count", key[0], value) when /^-?re?t/ @@ -39,7 +45,7 @@ def search else tweets end - when "text" + when /^-?text$/ sourcetext = word.split(":", 2).last.gsub("%", "\\%").gsub("*", "%") sourcetext = "%#{sourcetext}%".gsub(/%+/, "%") op = key[0] == "-" ? " NOT LIKE " : " LIKE " @@ -52,12 +58,16 @@ def search # unknown command tweets end - when /^20[0-9]{6}\.\.20[0-9]{6}$/ - since, to = word.split(/\.\./) - since = Time.utc(since[0...4].to_i, since[4...6].to_i, since[6...8].to_i) - 9 * 60 * 60 - to = Time.utc(to[0...4].to_i, to[4...6].to_i, to[6...8].to_i + 1) - 9 * 60 * 60 + when /^-?#{dateformat}\.\.#{dateformat}$/ - tweets.where(:id => first_id_of_time(since)...first_id_of_time(to)) + since = Time.utc($1.to_i, $3.to_i, $4.to_i) - 9 * 60 * 60 + to = Time.utc($5.to_i, $7.to_i, $8.to_i + 1) - 9 * 60 * 60 + + if word[0] == "-" + tweets.where("id < ? OR id >= ?", first_id_of_time(since), first_id_of_time(to)) + else + tweets.where(:id => first_id_of_time(since)...first_id_of_time(to)) + end else # TODO: ツイート検索 tweets diff --git a/app/views/main/about.html.haml b/app/views/main/about.html.haml index 660a511..5d2f964 100644 --- a/app/views/main/about.html.haml +++ b/app/views/main/about.html.haml @@ -1,4 +1,3 @@ -%h1 aclog について %p = link_to "@re4k", "https://twitter.com/re4k" が Favstar BAN されたので仕方なく代わりを作りました。 diff --git a/app/views/main/api.html.haml b/app/views/main/api.html.haml index 8a42042..a4c1e81 100644 --- a/app/views/main/api.html.haml +++ b/app/views/main/api.html.haml @@ -1,4 +1,3 @@ -%h1 API %p ドキュメントは今度もっとわかりやすく書き直しますね %p diff --git a/app/views/main/index.html.haml b/app/views/main/index.html.haml index c5b5446..1d273dc 100644 --- a/app/views/main/index.html.haml +++ b/app/views/main/index.html.haml @@ -34,10 +34,11 @@ %p Favstar のパスにアクセスされた場合リダイレクトするようになっているはず… %h3 検索クエリ -半角スペース区切りで、すべて AND 検索になります。 +%p 半角スペース区切りで、すべて AND 検索になります。OR 検索付けたいけどまだ使えません。 +%p order 以外は先頭に - を付けることで否定になります。 %dl %dt ユーザーの - %dt user:sg4k + %dd user:sg4k %dt 反応数 〜〜以上 %dd reaction:30 %dd favorite:30 @@ -49,4 +50,4 @@ %dd order:retweet %dt 期間 %dd 20130328..20130330 - %dt ツイート本文の検索はできません。付けるかはわかんない + %dt ツイート本文・クライアント名での検索はできません。クライアント名での検索は付けたいけれど… diff --git a/config/routes.rb b/config/routes.rb index 09e0b43..7faac83 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -65,7 +65,10 @@ get "/users/:screen_name/most_retweeted" => redirect("/%{screen_name}/retweet"), :constraints => constraints get "/users/:screen_name/discovered" => redirect("/%{screen_name}/discovered"), :constraints => constraints get "/users/:screen_name/recent" => redirect("/%{screen_name}/timeline"), :constraints => constraints - get "/users/:screen_name/favs_from(/:screen_name_b)" => redirect("/%{screen_name}/favorited_by/%{screen_name_b}"), :constraints => constraints - get "/users/:screen_name/retweeted_by(/:screen_name_b)" => redirect("/%{screen_name}/retweeted_by/%{screen_name_b}"), :constraints => constraints - get "/users/:screen_name/given_to(/:screen_name_b)" => redirect("/%{screen_name}/given_favorites_to/%{screen_name_b}"), :constraints => constraints + get "/users/:screen_name/favs_from" => redirect("/%{screen_name}/favorited_by"), :constraints => constraints + get "/users/:screen_name/favs_from/:screen_name_b" => redirect("/%{screen_name}/favorited_by/%{screen_name_b}"), :constraints => constraints + get "/users/:screen_name/retweeted_by" => redirect("/%{screen_name}/retweeted_by"), :constraints => constraints + get "/users/:screen_name/retweeted_by/:screen_name_b" => redirect("/%{screen_name}/retweeted_by/%{screen_name_b}"), :constraints => constraints + get "/users/:screen_name/given_to" => redirect("/%{screen_name}/given_favorites_to"), :constraints => constraints + get "/users/:screen_name/given_to/:screen_name_b" => redirect("/%{screen_name}/given_favorites_to/%{screen_name_b}"), :constraints => constraints end