From 4f2e37c94e4097ffadd80c5b7fd23a4236c77425 Mon Sep 17 00:00:00 2001 From: jolav Date: Tue, 7 Mar 2023 15:32:09 +0100 Subject: [PATCH] 0.9.0 NEW Random Data API --- README.md | 42 +++++++++- _utils/utils.go | 20 +++++ main.go | 7 +- random/random.go | 113 ++++++++++++++++++++++++++ www/_public/icons/random48.png | Bin 0 -> 995 bytes www/_public/images/sprite.png | Bin 6897 -> 7156 bytes www/_public/sprites/random32.png | Bin 0 -> 686 bytes www/_public/templates/version.html | 2 +- www/index.css | 113 +++++--------------------- www/index.html | 51 ++++++++---- www/random-data/random-data.html | 123 +++++++++++++++++++++++++++++ 11 files changed, 358 insertions(+), 113 deletions(-) create mode 100644 random/random.go create mode 100644 www/_public/icons/random48.png create mode 100644 www/_public/sprites/random32.png create mode 100644 www/random-data/random-data.html diff --git a/README.md b/README.md index 017bbcc..4860886 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,11 @@ -![Version](https://img.shields.io/badge/version-0.8.5-orange.svg) +![Version](https://img.shields.io/badge/version-0.9.0-orange.svg) ![Maintained YES](https://img.shields.io/badge/Maintained%3F-yes-green.svg) ![Ask Me Anything !](https://img.shields.io/badge/Ask%20me-anything-1abc9c.svg) # ![logo](https://github.com/jolav/codetabs/blob/master/www/_public/icons/ct/ct64r.png?raw=true) **ONLINE TOOLS ([codetabs.com](https://codetabs.com))** -**version 0.8.5** +**version 0.9.0** 1. [Count LOC (lines of code) online from github/gitlab repos or zipped uploaded folder](#count-loc-online) 2. [CORS proxy](#cors-proxy) @@ -15,6 +15,7 @@ 6. [HTTP Headers](#headers) 7. [API weather temp](#weather) 8. [Video To Gif](#video2gif) +9. [Random Data API](#random-data-api) [To Do List](#to-do) @@ -233,6 +234,43 @@ Scale : Set width:height , if one parameter is -1 it will automatically determin
+![logo](https://github.com/jolav/codetabs/blob/master/www/_public/icons/random48.png?raw=true) + +## **RANDOM DATA API** + +### **[Demo and Docs online](https://codetabs.com/random-data/random-data.html)** + +- Api to generate random data +- Only suppports GET request. +- Limit : 10 request per seconds. Once reached subsequent requests will result in error 429 (too many requests) until your quota is cleared. + + +### **Endpoints** + +- Get Random Integers +``` +http Request : +GET https://api.codetabs.com/v1/random/integer?range=X-Y +``` + +Examples +Get random number between 1-10 both inclusive +https://api.codetabs.com/v1/random/integer?min=1&max=10 +You can also specify how many times you want the result with the parameter times. +Default is 1 and there is no need to specify it. Max times = 10.000 +https://api.codetabs.com/v1/random/integer?min=1&max=10×=50 + +- List with randomized order +``` +http Request : +GET https://api.codetabs.com/v1/random/list?len=X +``` +Max list elements : 10.000 +Example: Get random order numbers for a list of 1000 elements +https://api.codetabs.com/v1/random/list?len=1000 + +
+ ## TO DO - [ ] **WWW** clean unused parts, css, etc diff --git a/_utils/utils.go b/_utils/utils.go index c988f4c..93b7b48 100644 --- a/_utils/utils.go +++ b/_utils/utils.go @@ -26,6 +26,16 @@ func SliceContainsString(str string, slice []string) bool { return false } +// SliceContainsInteger ... returns true/false +func SliceContainsInteger(num int, slice []int) bool { + for _, v := range slice { + if v == num { + return true + } + } + return false +} + // GenericCommandSH ... func GenericCommandSH(comm string) (chunk []byte, err error) { chunk, err = exec.Command("sh", "-c", comm).CombinedOutput() @@ -35,6 +45,16 @@ func GenericCommandSH(comm string) (chunk []byte, err error) { return chunk, err } +// RemoveElementFromSliceString +func RemoveElementFromSliceString(index int, slice []string) []string { + return append(slice[:index], slice[index+1:]...) +} + +// RemoveElementFromSliceInt +func RemoveElementFromSliceInt(index int, slice []int) []int { + return append(slice[:index], slice[index+1:]...) +} + // GenericCommand ... func GenericCommand(args []string) (err error) { _, err = exec.Command(args[0], args[1:len(args)]...).CombinedOutput() diff --git a/main.go b/main.go index 33bcdbe..0e661fc 100644 --- a/main.go +++ b/main.go @@ -8,6 +8,7 @@ import ( "flag" "fmt" "log" + "math/rand" "net/http" "os" "os/user" @@ -20,13 +21,14 @@ import ( "github.com/jolav/codetabs/headers" "github.com/jolav/codetabs/loc" "github.com/jolav/codetabs/proxy" + "github.com/jolav/codetabs/random" "github.com/jolav/codetabs/stars" "github.com/jolav/codetabs/store" "github.com/jolav/codetabs/video2gif" "github.com/jolav/codetabs/weather" ) -var version = "0.8.5" +var version = "0.9.0" var when = "undefined" type Conf struct { @@ -42,6 +44,8 @@ type Conf struct { } func main() { + + rand.Seed(time.Now().UnixNano()) checkFlags() var c Conf @@ -91,6 +95,7 @@ func main() { mux.HandleFunc("/v1/headers/", mw(headers.Router, "headers", c)) mux.HandleFunc("/v1/weather/", mw(weather.Router, "weather", c)) mux.HandleFunc("/v1/video2gif/", mw(video2gif.Router, "video2gif", c)) + mux.HandleFunc("/v1/random/", mw(random.Router, "random", c)) mux.HandleFunc("/v1/stars/", mw(stars.Router, "stars", c)) mux.HandleFunc("/v1/proxy/", mw(proxy.Router, "proxy", c)) mux.HandleFunc("/v1/tmp/", mw(proxy.Router, "proxy", c)) diff --git a/random/random.go b/random/random.go new file mode 100644 index 0000000..a12820e --- /dev/null +++ b/random/random.go @@ -0,0 +1,113 @@ +/* */ + +package random + +import ( + "fmt" + "net/http" + "strconv" + "strings" + + u "github.com/jolav/codetabs/_utils" +) + +type random struct { + Quest string `json:"quest"` + Result []int `json:"data"` +} + +func Router(w http.ResponseWriter, r *http.Request) { + params := strings.Split(strings.ToLower(r.URL.Path), "/") + path := params[1:len(params)] + if path[len(path)-1] == "" { // remove last empty slot after / + path = path[:len(path)-1] + } + //log.Printf("Going ....%s %s %d", path, r.Method, len(path)) + if len(path) < 2 || path[0] != "v1" { + u.BadRequest(w, r) + return + } + if len(path) != 3 { + u.BadRequest(w, r) + return + } + + if r.Method == "POST" { + u.BadRequest(w, r) + return + } + + rd := newRandom() + randomType := path[2] + switch randomType { + case "integer": + rd.randomInteger(w, r) + case "list": + rd.randomList(w, r) + default: + u.BadRequest(w, r) + return + } +} + +func (rd random) randomInteger(w http.ResponseWriter, r *http.Request) { + times := 1 + + r.ParseForm() + min, err := strconv.Atoi(r.Form.Get("min")) + if err != nil { + u.BadRequest(w, r) + return + } + max, err := strconv.Atoi(r.Form.Get("max")) + if err != nil || min > max || min < 0 || max > 10000000000 { + u.BadRequest(w, r) + return + } + if r.Form.Get("times") != "" { + times, err = strconv.Atoi(r.Form.Get("times")) + if err != nil || times > 10000 { + u.BadRequest(w, r) + return + } + } + if times == 1 { + rd.Quest = fmt.Sprintf("Random Integer between %d-%d", min, max) + } else { + rd.Quest = fmt.Sprintf("%d Random Integers between %d-%d", times, min, max) + } + + for time := 1; time <= times; time++ { + rd.Result = append(rd.Result, u.GetRandomInt(min, max)) + } + + u.SendJSONToClient(w, rd, 200) +} + +func (rd random) randomList(w http.ResponseWriter, r *http.Request) { + r.ParseForm() + elements, err := strconv.Atoi(r.Form.Get("len")) + if err != nil || elements < 2 || elements > 10000 { + u.BadRequest(w, r) + return + } + + rd.Quest = fmt.Sprintf("Randomized order list with %d elements", elements) + element := 0 + for element < elements { + number := u.GetRandomInt(1, elements) + if !u.SliceContainsInteger(number, rd.Result) { + rd.Result = append(rd.Result, number) + element++ + } + } + u.SendJSONToClient(w, rd, 200) +} + +func newRandom() random { + rd := random{ + Quest: "", + Result: []int{}, + } + return rd +} diff --git a/www/_public/icons/random48.png b/www/_public/icons/random48.png new file mode 100644 index 0000000000000000000000000000000000000000..b2c12da3f0edaab7678c9af3ef401b9a857adc33 GIT binary patch literal 995 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-sR|9-PT!D06^LEOSTS6z$5ZCyQ z_a8pxH}81+{-Z}yPej4Iz|09}FW*h6S`(Zz(>HCBb6k6R?FOIJ-VdKXhviLv_2&J7 zlUK7FHfJ?#PN`ZQTe3JPYkFYTwEK@=T)X|aZTd#P^u8xA-W)r3bNA6p^Vb}RD405F z;g0Nv1sAVBXqdP*y=LCF1LvnN+g;JUBDr#Qar@HfqUm=ZJ-2X^W(9goq9n*Km_hme z&3);nT)*Buy}YEYNQY-uFCPa zFEf_2ewJa8VSG0Dr<=gmnU``eo0`mZG>*CKr>ei|M7`hTjk3%aJ{bH7_QKaXv*yzX-^GwLk2{7<9DyRDXH?^gMj&@p-LF}a;S zfo)NmTkPh%U%%`{&&yNKxuUe6&Ji%ZFn_}jHzB2-0EdPXt}`TbPJ7P3^<#EO>nx+o zfBFR%`aYI(v{9XY(eP_xkY6kNgbv2r3FrU1HhfHaZu~|}f}J})d17vovzK$o${QCW z8-xuv{QP9XmcLWc%T@c}{8iS-#%4=^2w_E zgW;iW{emZ3BGt28KUs^h9Gmw=zsE|OJMKlYlg>34#`SsZ3;W;RYU*la2ohqMyOZ5t zQPn_~W5K-eW$_Ew%w*EgHqrBD=xts)QL|wwW4C@VLpT4l?Ft-B0vxBM?Gz5w?7#Wu zc>%xtgb$rfhc-3n*DNw%VW=wK{np7xg6Yr<#ybATavBL|I+}Y9&rWQToX>hlLD+q% zhJd@O|0>SIGmNGgIvL8d8T4#E_P59^I<2QV(b?0zVcy1tfA*xBUj1!;^iA&fzTUrm piQZI>jQZ@?n;ZXU_IbAb;`6)jje&`p!PC{xWt~$(69A0Q=7<0Q literal 0 HcmV?d00001 diff --git a/www/_public/images/sprite.png b/www/_public/images/sprite.png index a0cea40a6a042340bf10e9d56523255aa8018316..c890b7290c70ab4990c149da02ac8a4c7fd18db1 100644 GIT binary patch literal 7156 zcmVvxFE#jB*8q$?{Z zgT2!S1OxoQX(u8a?TbP=JTd@c{_)GMdcrw}zS2ymAKohap6T%-{=3&aiF5l-O}Ix@y*ugU2N;(wPkp#o4@D7!^Gh2_Wi&?5_|uK zb&SAAcUMN8`L84Sp%wD$%(>l!>~=P5r~cxx#+^Nr{>uZ0@&5;KgQip0LNMht;Gx!JtRa$uMXCj_#V+DO4^IDB8~+Sj`)3!m-RYV% zTdJcG{2MSkl?FlZw2(s5OGrsJdoWN)v#^)mtQRSQpyKzvH^2Gi%}ko$H+5In{yzJA zZzgZvOASiwsll;{iN0Pk*57~52qZQ(8E-U_$sNjeIA2nRhlkJiJ*CwTUT7qDvbo%b zp0s$$e2U-~FSl+1>1*p^ES}8f@-vj#nOT{)#EbI|zEogf z+Li(X5M-RPsi&Bn*~mlycRXOb&sa)rqFxbB(F~^6Gk`(V{d!KJR{*h_ZQo&81Vqh2 z(VK&`0M-d;`SVw8B})yrYAGPu%v1wcq4ib-U{~pzYP;%wXqCkrAUW+mKxm25fRaVS zw&|YC)~Y3SQzi-6;I*28#C!rkjmDSq?@18yeGvxm(f|mXO>Q9c-qZmy7!VEY(>%3; z@68avOZ5f;7zEt}R%xCDmGB(+qhJ83d*4z{`EM;=t2JPT1RYp183?T~!48N>M*|Q% zBw`L`xP^`#K;RzKmkuZbi2{oCc@eD#4d51{C($a&dOramr#&w;ph)+@yb50n9pL8$ z0}BB5>22Ti>iq;epdJ`lSb*T)$`&SpjBKkU1P01ker9O^1lOb%_6cw@>Yc%W)zF?7 z8#^A508zI{D5T{2kg8c&TL3^P6-gIk$Yq59!v_Sh$xBzU;I`a?tjPdCvi@?NskzN! zIj07pfXkvBIk3z?7?A5F$4aVE_y7o=1uYnYOe+kucc8+9;M7peW6%Jk9Y{n9nL53* z9IGAJ2?HP?xcXmI;CGhYDz*(Q9|pXM*ms*{OBR=#Ze6>nQ?*Rd!v82{YG`0C0!XNt zSg$W3b^n>k>qEBGaGXXd>+fN5$q8fWCIBYzqF||}=x{*gg>suaiH?wEM?NvT&LrBZxy(9m-3 zm6w;64wlY}!--D}#`OBZi3`sJa$ZYcUt7i0n?se#(3?|jr}svZK0DZ^j}Gpr@P`I{ zhL`cmPnAmLr=Ke0hRURq#PMHdBd0z%Xp8*70EbkZ_hYL5Wa!4w$;r^r(1{Wz8z|4` z z_rL@x{s#sEsGN-a`>&|4jEoEz7=ax)?co(_f`I;kfn!t-3{>Q=64<59wKfV#w6L{r z-u4BI0l>(zX`Y;jdIUfU00b3%9u7?zzX!C?KaL^@qJ9+rI_?2j=OX5T02KvH4Je^9 zIx2uE1t5WW2my!$474yhS~(g09RM2O4uYeYVSw%j2^g=Bj{YtJ;dR`IO9G%4ve=l^ zTqiFD2K-3C7$;!dPykjd(Zh73?C-Pi^lX`0wgr#|fK0s(V)XSXg8&GKwmC@7xH@oK z3?Y370EYn~H1z{#5RfOmjsOz){%R07>;ml44$pOKMcKiQwrMM;I|B7h0o1(C<;B2$ z$d!jZQ)X7?3?KoZs2cY!XTFu6V}RaSoq+_6pn-C}CmA52Bak>SW%R=u14N{^!+<() zxN4>XXDtulb+Q{!orl1q@BtEf07%dQPv{ANprUs`&x|gBDFE()0SISxz*nK}3kU2tJu8F~0}##tAb2;vBLTZ$HpR8@fE`++q5wMb)aZaw->tjQs-lCu zDPy@wr;t-8lxP6iH}wEOAW_5_B@&=Rmm3AN{h@mnAccYkxbj-$t+o!3Tqi&hu2!$E zX2U<{>~sT=eYdRIZ`uC+kgrLi>dZ+X83ACI8al0L2NizeTz7S$;TBYSkN~3lT@aUAta!Ma1W?=`XhkB0}?vV17f4TK@Efk z0fA4@vYbX?&)d^Bk{9*yn9)fP#|4$meebo4FF#ov5F8xQI^;2&7I0k9QWxR#LCJ}a zMV0c2IYR?3$f??wEeL|KZ@fXw5_kfdGI|y4{E@4K)@1H zOe>)mfHw0i(4I?-Aqf2a=$`>#34kULfP?_lKl*3{fQVhN>o!0f9txm!c!*I10VERO zCq!{)$D}mTLr(yf1eg&>ChzP9m;G z?|_2}OI}SJaS1@8fWQ9^0SUPeZu*Ne0f+z=uTdWV_C3lA-}?cO5QBGld6$5?s{yPo z`oKru`oNVipq6I_W(ZhaTwGp;0sw*sT)Oi8*DL?D1I>9~pr<_nt1BzZrUW1maOukZ zKU>#4K+HjLo&*ABXFLEsteRg-00IG*e*VY0B!Pv*5`AcI*J=<<#6brDatgR;Ez1r_ zAmDxv*euE$!L3r<9L4lB426mZeJx=H{90xm6I6u{m>0xeLge7wt`2L)Wkf2|Mz z0RZZ+n#=bo079+(bLMOixQMK-0w4i^7X?75mrbPU$eBzv#jG|6pa38NfENi!BC#(I zR}lD~%wyB_EayQ#PjKGYyUaVNppZ*GW^~I#H~l@BOuLZZi5p!L<6Rs9Bw))hW^~V> zzk%T%Y!Pf3CX8P47&dYu`;=V~l=F_ED=`=uqb>J59n1p;=ia;8^U}RWI1hXm%)4#E zU1obOzQ_Ut@Ba9~haZ0S+1A$97i(*4pRE1*E(tndSy!(uzs3RsUzp|xAAI=DH(Of* z_~iP#5E$TkYvsO0^HmlYp!zLQ{|P#Pz0&4`20KgJsfB5KV?da(9M}GO?4`{0_M0fD93S)&~!Nb%X%; z>xW;KA*?)qcV__kk5jV=Z5j;Y_{3F2GoymoiVAh04naH!exi;EL;N^+@$=T(4y(42 zE=5-oWEx6 zy7Bz-f1dZvvcYUN8_(M^-HO0yoJ94LAb9HD+Vz<5Fvk`bVElf6P!YUJC7~L)W;cHS z{Qe>!1bRWL5WL$zIT=hQ2aGA; z;{Cqs%MkSSjTf?aCWn%RLcyP$no6a{$NT!0CAe6eyqm37a$~t%u2{@X6~`TY%a{Qq zC{~AfK9@`0E`Z==u$a;dbP+Ux!;vahs$)yuyyNj+4?nsV?aKC z;cjxQQmG78{EY(Fqrn?D2D@$d@`HD8Wn7H{V8tWUKsG7YA9Uyh*&CV6U_N#$b1Ta~ z(kJL~^gJy-LL+!tsivHc1_1=P5p>03JP7XI%RXvM&;!^hch|)+;9{4PviAVL3A%3u zU0KT@5)8(4Gw4Ck6bYAM*JC#c^@!hF2wGw>i!F8|V~M%+0u1~X0N7EvUeF!9cQ5AR zv-vFlXMqg#(TUz0%pz>)%$^{%=*lm2qH>(B|h2en(HVgRt<Q_%!0tOk#y`YDKc`Rr! zZ0p3;ZE6$R5JmW5;giDYKp-(uv&N91V3Bdu88!`TW9axzAhHpT6qF;tVT|P{w>pGQEWpq0^@6g%a%PSd zN@5_8j?P6O0*2@L>#AUrybQy~XMfBN;|QuiDzjpO@v-G75`6q9*?3%U`#xt;1gkr7 z{n{HJ3Ka3#Ib|Tb&*#m;JUvUrWGNxHp z2$xD_=>Za)m!w#=y6$}Ke1Yc`K}$QT-}-nC)&H3F-W=XmCz$>|Jv}`!lP*UB4%5uf z$jo%==g;#~kOLB^6Bs`34iOCM;LEK0I7H9{z7W(uNcYxiwQuv^Mn_AvpI`YZn!;3)=JT6bly4&2m@6-Mm51Df}too<)M2hGDMIB zL0-}XBFlcO{VbV$EGGrT( c9k5}P8En45co+{&!5{jR$HNc=NG_{_gz(HNr30)0 z8%dC+OAoVozCm!A^mr(mhC5pi?O{l#lK{tRbtgU(5-dh!)6tSOh6I=e!4c@6w!?$6 z(;kuxIYV$&MAU0D~8J=T#6hUn2B?JPzF*`8e5BA%5bt7FM85(vG z&7e&H<$&AWp$NjF$ciurh=2^H(vKiuv-|S}LS04@^3xsw1cWTux=9tVK8_6w5J6zk zDp)^O^O@iWS}K*!F9>#!Bx45w!ytjvjRL?3RDn4n2;qq|$B8pYFqetl_RW{dA9*xH z908_4qa|cW)PP$H0D`{(0?cKCV4$AFBXBGAzzO$XIidc)(T+Oc9@|uh!C+_x)&jd! z&^!2|q3PdPk7)XT))#?`N-RA~=GdD;Y*^&G&D*`(mlBL4G(pQD;I#6twe{xB)?LdI z932JrZ&UG%W!RafA-OvI81PZNSfCzsP6sD#M8=B5Me?IbjWMk9e7l=ARvmC*&xFCr@0t5&i zK78@wAr@$ZyxF<5U<3k;AOWBVv_X2;EG_sv^7-@5ro+7mEYJqIs@1z|F~LiOEC6Id zSP`hS#=+3Mga9Tmf&^g*fLqXLj>AfL-?lgZT>$7;0dou+-gfT#FTv&u!twa3_|3P7 zV}|7l4wxg-n{XQ%!*OJIhdWUPLkLB%vr*7;#OI4h5g-m3-poQh0G;RsBM4dWP~Aue zE^t1mo!e^u68YE`kIzOx@lIxq0e80<3w{x2{-8}naU4gikh6%>(V>k{G=p?04(Fj@ z2g?ZoIdO>SqR=f{Y06tXaCut;fyfqBAAzl3Mm7>2)g?!CA>UHtx87qi>{gwYoX zGgCErx|>kE|EQ8-n5JQr{?%>G-y+Rhz?i&k)@-|GS%y(A-DEelTQkh!KRv10S(>z3 z?KI6CyH>R!vBHaYw ziNq>f%MJm+URedeL=K&e4F+%qtOr5hq*?Il_AH(WyqI`YzNE!80r(cwqsl6{$(z-F#z#0H11XzxN5BwrKoV?y|>2zul5KAK^mlk*7RUJPJnbWXy-jml47+g@+1j@76R#HTslivdiM9n+tm7x{iasXa{PtZ=%Q1d@Em{KbL<#?=&@(tvZ`f{5a~ z*A?i@&-0qV%sE=HM~>r+sxvuKN_k!=wLbiL0i8esl?+DC=#oGz>F*nQjUV$eeRw(2 z^F_@8XlF_go>H;gJgv1}Z`K*04+Z!O2vogDbpHn%JMZq0{<4c4P8*k1VxA| zvEc`G+yyXjwuG7mS7tz20bRKrVr4NyG$54E0#aucXei)Ip*f7^lb~F1wSN-eLXNS9 z9l)GO7(}B8tzB8+Zys@#QOB6d=93V`%4LuR%9AfFBjZ{P=O(fUW5hrLKFX#fN*(Rj z1ZL+1Jn4~(lMO$68xr3&k73Ocyf9)TYy)py3P{(DOtu-KI0nH_l^2DsFQpGih=q+8 zG!ZIZPsos40^XWH2o3^wDyC)}hN1ElJ{s{sj;UX$L>M*pAp{>Di6-o_UtX3Xxz2ngP7gq_UV-D!rgudWLV3Y@04db;1c;hgxoPDVsVGchm#W&V46 zXy$c{*o9=YU#e`V!0B*;FNV;&Wuu3#%C%peXJ)K4GA`(IhNPUNUc3s8zR@x;F43jA z3J3?x#jSa>%7eYr{J?2xk3aRTD*$5ta&lW378RqKnoOtUjlIu*gT`B8LDFuUt(P<})7N#In#S1ilp9TCkZW&E+;^CNsLX+Ze6?n;)Nz{agFw)6 zoxZ)josMYpmk?UC3QbE)sByII$+Ye8^3-#kcza!4bhLtkyZ`_Ibg;*Db+iL;-e0s3 z0BQa|kN<(fN5w=4m6V6iTO^2xzwmd3^OhO%lojIJroPL!$Z4Vf|NpTnVW%i)y)IeA zFI3euNRT3VoF#C}F;Ct&L;-65^tdkh^YyLP;_&tUU!MKOZmZPQ*5>d0$;!&!=Kk-@ z*N~8q0AT+@PcN-FdAw1H*5~$_DR|00Vb(!d!A5oJ>+IZDaf7b&StddhFx3M6~w4 zJ82JjB7@X zXyo$C;;_Zhk+Ztqh0Eu%*wC2EVU0kf=KjA$B_$(Jk<|OIE3@3}smAM2TsWOQlZLnR z_TaGK-=x@OeE+&O!{h7u>$v&jo%+&jyUPFQUv2%S3?q;5=UHg+q8RIQGUvX~_Sk?k zj^Uoi`#GKVd&=|7(CF=Ic=m%nySI_jDn*2NwTK-U$bUpsp821of-JuHbBw@mXZI{=Iz04^rrqcPrW z@(9wub!$5U>vQyON@g_@^{HldO8() zdWuJ(CV>FmGL+($30V!k7d#0B*w#4%^b~%fI3kdUKmho+b8hKt zEOE!Ie61)?2`3(pXH1e6mug6Y27sFg$ui8otauTCvKf(8q6iEi!C%OmLFJw8C*v&u zPbtEwGYp^%@Q3Ag0SqHROfr)2hgEJ1*v)|RJcM*j`xlnQfL3#mFTt+^Vj@EW9#Xtg zb*gUMB7jqCc^9x8Gyno5II88+{0_!>qAcU466%&L+O$7*T&8-1|_Rv!RD8cj82<^>K0{x^70C*8t zP2LxZ5CSNI4rp3D1+=PlLZG5|y~=l~*g1Z-sl6EwhfCUgQsGgQL>N^sHx zq%=UDhoB>LfOb|h0QOz}Bw9_{nr#5N?TX+7gcL7jD+#+NyOIn7GB%&~D#2v{1fgPbgail@Qi$``WPnxNPVy3D833KP zm{2}1+=--XAu|D-Jkv!48$SgBF#u9!bz+q(l}Z^N0$?iajDK3WZY?iHq5xOm76{zP zhybAHO)Yq+I>?~`NU2Io0NssB7=W470WlHbZaE5YX>alv6hJDNAl8Bq_xEPO(g9hz znK}RokfD;-?N&J{+%iMDk=MAnZ~|te?pA7fs;Ba`3hdgxNV@U7CH^8_Mt~@Ql{()n zKuvkvtp*6xTE&<>PJ5>fo z5P=g!>dBnFV41OI!V^RYO4*~s&?DH+it)w_8bc_9LeSMRL(VR)G>m8j8pW=Z&uEcm!;Z>Hc&&4gcElhQWjh zm!E*aN+~5$387dbkruzEJ=w|X0{Z_+->58C?(G)m0(}H%m`@4n&k&4Xjf+~ zSh)=GbuC-D0vbnGD@`1xIc9Ab)!#pA!z}!kyXRunar`$2SzM$S_>kV9-#0vM=zs98 zzyIBX{tX6cE$p^!pY&8ZiJBfCPghAVU%c5gp8TUmJsd^aK>h-{@0@&UQURlCD6P2x zf(Wa>eEC9vhhM&|7R@*OuuJL1gVywuKp2Pd|M>o$01v-^|Ndi^F}{$rbLl{r6m6K9 zfKGR{0LT#E`+tA`vD#QtNW!n)KL|x$UZ__N#`+)7cj!mIX@04%H&$@>jtpT0tW4kt zM!jC|A65VHqYi(6{YTx{k|aRr9Z0z2=2;lh*Y`y@rN6IU?-LD&9D&N9RZ$I;_O+=R z;mwfsef8g_IZFEb>V4}O07d8FsVPMnsM#K}x=#{>e^Fmw-)aT~Gf0L4kO(lVj|lyX z774&C>Y28-%%A`y2`~_0QT^ShMV|mb0PY*5JB(le-wO#a)-PK0NeG1X1_MB#E~ipP z*P9CiSQ22YX25EL0YoTd{5mVUeMiF#=#1>r0Dxuz0XuDH)jJ1@182J%1Wcti4*;bg zpcZU6!+=INKqXX~gaM*g?F2}0g;%M#d6^(<>Hc4(HVL@(b-m&T0pU@dyff384Ud!n6m(nx+)SqL!ovU_xua-58hZ8MP+C&;U#* zbpga_MX@vh#0k0s6roo@N&~>od(#J~GwNg)047n(pa9#u0{AX8xnBzc_>5``*cChP zEkuscv}LEn0M5`7a2bGIF>m2-k@iH{tZ9HO5!wQ-h^~wGp4&_`E1<X&1Z$0`4kCiyI_dyLpa2*_R8vr?2M8%u<|Bi!d+G(fe*_@gHS+=)>`P?fbgX^37)F3FIW;a>K(_V z4q6Egf&>Bxg#qx79UBEmg57XY1cUHY7Ql_CPfJk%)CvIc6C$6@nyeZk z^a@C;D%w%co__$8>DvwAvQ;$X2Qa|{ zKm<5+5Ivlm{n2r2mtE_089YD69D|yS=7|@y!O{*4n@~u zrP02oDJ@3nny;o2Aog; zA`k${&BI^czkl@T{ZIfdiK(2|CBbni5In$vuQ%UA67caf2m|I0?v&s!r*<2fL>$Kf zJj-5OwVsF=fkY3B7V80#D5#BssEDB6L{Ysd_PWL7GBntm!G!W&h+Co9$#L$*A%e=% z+L#jO!m;q7Xt&a&Oekujq6b!szW=kc^I`Vzoi4WZ|J?8QyZ_xmZO|x(y`%us(~o`u zYiG>2Zr@_8w(Sin7#t+;;lWV_co`91+-;pdoQp2mkOGNbk8G~AP7T) zLWBs-z5h}{Z*OxdeKnmKA9trxDf0ezz@2er00=jQl-oTtnu^o{HG&$5xW_Z@jN2{r z2&tiQ;YDgr0al%sbBV2t9WknaX#$`FH;zB9eu z)msbL?by1iSiEK6#*G{O^6`bM0!kTojSu5n6@bP5pu79QC1VeJ{puCgQVk$8b^zmP zL0&&|qXtNKbL@52+s$^TIeVQ7Ah_)i+?nxA1nVmS6wsZuc(Yvg3VXFDZLg_7b3;R$ z%OAVlr z1H*yP%2$=ZrEE`6*21OjX|6tSn|$0Zztw<3;AN3t^8(~m`lAN0)QPbYxUB+I6|6fW zhxKN?jXI17s7jjJ?u{$k$W(t}xjDcYxf8MZOy4wRJ9MO?7GkJR4PyMgS0y ztPE^lR5z7(WqbX|fOereOO#isfWxNRSgC=-3;s5y&e~ko*gC6(){c%7C)$wKr8R&^ zKW@p3(P*rxsn|8m$>%ZBNmmLd^dqI{J6fxOxRa(SsldmkoKoT&kd7YnhN*fcT4aWYUXw4w(k`qs)J^0?4Fp=2zV(o)6A;eJb@3iOkJ4pJdMc9^=SJy%GS7(H?5Dg%2bcm%_$6@MWpiZ*BYMMEgI-+%fKWc_<82->AMpF7 zz~rQ4luN+pIi^zq*5NGR?MCrUoCkSrGS(s$k;2pA;Eo5{=>CJX|{0Z_I9S^t_L>%SUqUmIyv z?Smgbeth~AY>MRzx$jNEF9qpGbYFuD}Dq@jccz zF_C!ss+dR=C%(MSWXKd|6`%vFZ4Q&wVQTqmIAUg~*T>fUu0Z62QnG8J7zhMjbtRCv zyq^J-XRw2@noP9GN^49uhM`c(j-_S57xm$ovw@t?Bl-E+M8cEqH#+%TCI34 zX*3S26$C?3>&pNiz1t-Pb7GX|ebK2;#iwbOoJX$;*oE~b2Mqy$jT#sLv16SA^xci~ zK2ePNd_G=`1!lXl1Sk=|fWzpY*3cRNw3V_kW(LMN1(-q2!hP@OUn@ach50Bn7a>_NW)!6Fp9GtdR5PqE3kblNpxHKBhynMZ+&(J$j%W zC4eET2h6WA0;K}6B^Hk-gF&a$ACv*s``GiUn4ioj8)@lb2xNj33IKoxP=Eq7jB-EN z1%Ye<6u_t&Kz5iLMHw|t<$6`{j9s9LR;!ht`!&HgwF~|(r;t?({y(SONb`YtfBwfh zc1B2+&GXZR8{Z%M6VOcZ8(4D`*`|D@)4hKmUh+@Cwh3hK@-nbEtkY@#1=xL;WUKOT zFuE`i{s5%Zz|jN=fKoQ=!r`!PVSsc zK;$MiHUba;hdz=lF9G*efHq77?fig10^lJDfcy9F+`j{$ob3>>8yW+u3hp3k0E0vc z?^pa0cuul)!R|g1HGn}9VaXq7@ci@V&j7|qDgiP`-FxjH08HTHa~bICyHf=$3=`qo z3Tggg0;AtkhNkF4vID)d<+r5(`Zw zbwnV*n`bK)RsjfrCnPn%(hD(9ArvaaLgB@W!&67Ty?KTl+ddz#wG!BK!RZNo2u-dI z8A6k|D2{}tjzA#!HPB7_O2E%<%{MfOFplHPO%CTlBgVZr?1g3?Nrpj2iWUYzV@=v} z?_#W=_dA7d(i`6#6j*x`H1I_T>*d}F3++XMZ4wB3ksuZXiNQjMf-OdG`u?7quBo@~ zws(DTcO2XI^L(G*^E~%&O5w{IAiOt`&d{~vem0x`S<1c0zr_F1Zr=R;`WwP@5N_5& zEcSr`60scyn2K#OKrVI#zrLH#XS2Cnu3jg=j~}Nlp)(C2P>9nmif}?zH9%3_`AnKp zHNaa{r3mL6`Rr;A%A*_g`ipw01O!riI?V!z>LGxzcAr}+5dt~hWnXO7OZ7{Qe7@Ck zS+p7f@Z|%ksQ%m`O{wb}q*b-^z+t(N&8}wm5NC(0U)L!cV;gXYJ&V+=r2Ns|730G#QbQtsj&Zk5^5{52GBA3y{p zsU(xKyaLHxCFQ4oT}02FWe7BX$#-CpEk4xO-2-#}Htt1BjYiLDWn}E6zAQa|d*M~% zx~1>RY0=e4-`YR#8~Sf0I&RGb0yDF-4oB2(-VSrS)=Z@`wdHmoFvmEe8Ngf z2T<$Sp<1AgiVgx;y8)~{5pLC(9|Q(~zqZ^D@L9D87Pr-Ebsty~j&?VJl5Dn{N@`FM z-B!0gpp#$0nc)HXEByf2^t#{(>;qER3&0cb_fV`zF#5%$c)dC0QMP$Y?>4TRP?%_JC}O_dPUTcW3F9O6t|of8e`HdH9&X_!&67pjsYM*ft`SoJ_F84@nGITcxrKuz z+=H2r#Wx0ByUsK@MjAx|GZ{$QI|K})rlDiVK0Y*l40~ie;*EI6?MJmoCg$gZ!JzlX zkwVyqyz{{|JaQF+!ARr?fO|LQ*EaE5Y2$IB8uT6o5L{bl{>KZ|>cl(h4GAiya3)tL3ktp+Sts1&&J~1WKT! z%bFW`65RIXh@mmy1rJBDfzgD0k?ljGvE?UuoE^XcamEOcB#_s+2Po5sLe!0rF#s?DTa{6=aJ@{5uOqGEE0(dFRC2!Q8!O5vA0 z0ttj}MV$g~1Q3d{AYzEc5cbEE6Fi1$VAl%4RuvzP3r^1Ibb7EAgplzwNl2n?n5MP> zAqqC}un{l9vqI2>@Ds%!3WX$IipSA6L*o5Z2vDM0(Z#4J(oVD+^K0$e*=Z@vrZyTj rrLfppm^?5n%(3K`fH{ur=KOyEEhkQ|9*|tu00000NkvXXu0mjf^1AwJ diff --git a/www/_public/sprites/random32.png b/www/_public/sprites/random32.png new file mode 100644 index 0000000000000000000000000000000000000000..a7bc4285211176e2f9de6f1b2efa6faab33825be GIT binary patch literal 686 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dy8v}eoT!D06^L8?jYeHvU^A6{@ z_TFY~29GSRqN6XX=braSkSI&+tnZEnzrLFtVt=e{c_R4*={i_RGmn4?Y zdi(z4r5g_}T)Th%+WqkSDUAmnwE-P1ToU9L%zEWu-i4@LIsDV}*d>7}n{`He<~iJu7k7wde~p*!iv3=;J{{Fh{J&30)0L_S zk>%%M4c~EEciZv_vV~mh7D{9!-t06_owMosp}haoGMvO1tj=C4Ez|ihoB0#-hN$Cb z?KbRg_`blX~rAIJ4eu9Vvr8T%6kcNVZ;EV{eQmA{ft|KgUv+qUOk{PusJ r#hsUzA7B0b_EXf{)4!j8{m API doc - (version 0.8.5) + (version 0.9.0) diff --git a/www/index.css b/www/index.css index 8e4235d..275bac8 100644 --- a/www/index.css +++ b/www/index.css @@ -229,95 +229,24 @@ hr { } /* Generated by http://css.spritegen.com CSS Sprite Generator */ - -.ct64r, .ct48r, .alexa32, .ct32r, .gif32, .headers32, .ip32, .jolav32, .loc32, .notes32, .proxy32, .stars32, .weather32, .check { - display: inline-block; - background: url('/_public/images/sprite.png') no-repeat; - overflow: hidden; - text-indent: -9999px; - text-align: left; -} - -.ct64r { - background-position: -0px -0px; - width: 64px; - height: 64px; -} - -.ct48r { - background-position: -0px -64px; - width: 48px; - height: 48px; -} - -.alexa32 { - background-position: -0px -112px; - width: 32px; - height: 32px; -} - -.ct32r { - background-position: -32px -112px; - width: 32px; - height: 32px; -} - -.gif32 { - background-position: -0px -144px; - width: 32px; - height: 32px; -} - -.headers32 { - background-position: -32px -144px; - width: 32px; - height: 32px; -} - -.ip32 { - background-position: -0px -176px; - width: 32px; - height: 32px; -} - -.jolav32 { - background-position: -32px -176px; - width: 32px; - height: 32px; -} - -.loc32 { - background-position: -0px -208px; - width: 32px; - height: 32px; -} - -.notes32 { - background-position: -32px -208px; - width: 32px; - height: 32px; -} - -.proxy32 { - background-position: -0px -240px; - width: 32px; - height: 32px; -} - -.stars32 { - background-position: -32px -240px; - width: 32px; - height: 32px; -} - -.weather32 { - background-position: -0px -272px; - width: 32px; - height: 32px; -} - -.check { - background-position: -48px -64px; - width: 16px; - height: 16px; -} + +.ct64r, .ct48r, .alexa32, .ct32r, .gif32, +.headers32, .ip32, .jolav32, .loc32, .notes32, +.proxy32, .random32, .stars32, .weather32, .check +{ display: inline-block; background: url('_public/images/sprite.png') no-repeat; overflow: hidden; text-indent: -9999px; text-align: left; } + +.ct64r { background-position: -0px -0px; width: 64px; height: 64px; } +.ct48r { background-position: -0px -64px; width: 48px; height: 48px; } +.alexa32 { background-position: -0px -112px; width: 32px; height: 32px; } +.ct32r { background-position: -32px -112px; width: 32px; height: 32px; } +.gif32 { background-position: -0px -144px; width: 32px; height: 32px; } +.headers32 { background-position: -32px -144px; width: 32px; height: 32px; } +.ip32 { background-position: -0px -176px; width: 32px; height: 32px; } +.jolav32 { background-position: -32px -176px; width: 32px; height: 32px; } +.loc32 { background-position: -0px -208px; width: 32px; height: 32px; } +.notes32 { background-position: -32px -208px; width: 32px; height: 32px; } +.proxy32 { background-position: -0px -240px; width: 32px; height: 32px; } +.random32 { background-position: -32px -240px; width: 32px; height: 32px; } +.stars32 { background-position: -0px -272px; width: 32px; height: 32px; } +.weather32 { background-position: -32px -272px; width: 32px; height: 32px; } +.check { background-position: -48px -64px; width: 16px; height: 16px; } diff --git a/www/index.html b/www/index.html index 4fc0ca1..d39ff4c 100644 --- a/www/index.html +++ b/www/index.html @@ -71,15 +71,41 @@

+ + @@ -107,21 +133,15 @@

@@ -136,9 +156,6 @@

Check any website position in Alexa Top 1 million Ranking.
Daily Updates. -

API diff --git a/www/random-data/random-data.html b/www/random-data/random-data.html new file mode 100644 index 0000000..4775c3a --- /dev/null +++ b/www/random-data/random-data.html @@ -0,0 +1,123 @@ + + + + + + Random Data API + + + + + + + + +
+

+ Logo + Random Data +

+

+ Logo + Random Data +

+
+ +

NEW

+ + + + +
+
+ Description +
+
+ + - Api to generate random data +
+
+ + - Only suppports GET request. + +
+ + - + Limit : 10 request per seconds. Once reached subsequent requests will result in + error 429 (too many requests) + until your quota is cleared. +
+
+
+
+ +
+ +
+ Endpoint - Get Random Integers +
+
+ http Request : +
+ + GET https://api.codetabs.com/v1/random/integer?range=X-Y + +
+ Examples +
Get random number between 1-10 both inclusive +
+ + + https://api.codetabs.com/v1/random/integer?min=1&max=10 + +
+ You can also specify how many times you want the result with the parameter times.
+ Default is 1 and there is no need to specify it. Max times = 10.000
+ + https://api.codetabs.com/v1/random/integer?min=1&max=10&times=50> + +
+
+ +
+ +
+ +
+ Endpoint - List with randomized order +
+
+ http Request : +
+ + GET https://api.codetabs.com/v1/random/list?len=X + +
+ Max list elements : 10.000
+ Examples +
Get random order numbers for a list of 1000 elements +
+ + + https://api.codetabs.com/v1/random/list?len=1000 + +
+
+ +
+ +
+ + + + + + + + + + + + +