--OBTENER PRIMER IMAGEN DE GOOGLE (PEXABOSH @ AMSSPECIALIST)
--PARA XtremeTHN23
function GetFirstGoogleImage(Search)
--MODULO JSON RXI PARA SOLICITUDES EN LA API
local Json = loadstring("local a={_version=\"0.1.2\"}local b;local c={[\"\\\\\"]=\"\\\\\",[\"\\\"\"]=\"\\\"\",[\"\\b\"]=\"b\",[\"\\f\"]=\"f\",[\"\\n\"]=\"n\",[\"\\r\"]=\"r\",[\"\\t\"]=\"t\"}local d={[\"/\"]=\"/\"}for e,f in pairs(c)do d[f]=e end;local function g(h)return\"\\\\\"..(c[h]or string.format(\"u%04x\",h:byte()))end;local function i(j)return\"null\"end;local function k(j,l)local m={}l=l or{}if l[j]then error(\"circular reference\")end;l[j]=true;if rawget(j,1)~=nil or next(j)==nil then local n=0;for e in pairs(j)do if type(e)~=\"number\"then error(\"invalid table: mixed or invalid key types\")end;n=n+1 end;if n~=#j then error(\"invalid table: sparse array\")end;for o,f in ipairs(j)do table.insert(m,b(f,l))end;l[j]=nil;return\"[\"..table.concat(m,\",\")..\"]\"else for e,f in pairs(j)do if type(e)~=\"string\"then error(\"invalid table: mixed or invalid key types\")end;table.insert(m,b(e,l)..\":\"..b(f,l))end;l[j]=nil;return\"{\"..table.concat(m,\",\")..\"}\"end end;local function p(j)return\'\"\'..j:gsub(\'[%z\\1-\\31\\\\\"]\',g)..\'\"\'end;local function q(j)if j~=j or j<=-math.huge or j>=math.huge then error(\"unexpected number value \'\"..tostring(j)..\"\'\")end;return string.format(\"%.14g\",j)end;local r={[\"nil\"]=i,[\"table\"]=k,[\"string\"]=p,[\"number\"]=q,[\"boolean\"]=tostring}b=function(j,l)local s=type(j)local t=r[s]if t then return t(j,l)end;error(\"unexpected type \'\"..s..\"\'\")end;function a.Encode(j)return b(j)end;local u;local function v(...)local m={}for o=1,select(\"#\",...)do m[select(o,...)]=true end;return m end;local w=v(\" \",\"\\t\",\"\\r\",\"\\n\")local x=v(\" \",\"\\t\",\"\\r\",\"\\n\",\"]\",\"}\",\",\")local y=v(\"\\\\\",\"/\",\'\"\',\"b\",\"f\",\"n\",\"r\",\"t\",\"u\")local z=v(\"true\",\"false\",\"null\")local A={[\"true\"]=true,[\"false\"]=false,[\"null\"]=nil}local function B(C,D,E,F)for o=D,#C do if E[C:sub(o,o)]~=F then return o end end;return#C+1 end;local function G(C,D,H)local I=1;local J=1;for o=1,D-1 do J=J+1;if C:sub(o,o)==\"\\n\"then I=I+1;J=1 end end;error(string.format(\"%s at line %d col %d\",H,I,J))end;local function K(n)local t=math.floor;if n<=0x7f then return string.char(n)elseif n<=0x7ff then return string.char(t(n/64)+192,n%64+128)elseif n<=0xffff then return string.char(t(n/4096)+224,t(n%4096/64)+128,n%64+128)elseif n<=0x10ffff then return string.char(t(n/262144)+240,t(n%262144/4096)+128,t(n%4096/64)+128,n%64+128)end;error(string.format(\"invalid unicode codepoint \'%x\'\",n))end;local function L(M)local N=tonumber(M:sub(1,4),16)local O=tonumber(M:sub(7,10),16)if O then return K((N-0xd800)*0x400+O-0xdc00+0x10000)else return K(N)end end;local function P(C,o)local m=\"\"local Q=o+1;local e=Q;while Q<=#C do local R=C:byte(Q)if R<32 then G(C,Q,\"control character in string\")elseif R==92 then m=m..C:sub(e,Q-1)Q=Q+1;local h=C:sub(Q,Q)if h==\"u\"then local S=C:match(\"^[dD][89aAbB]%x%x\\\\u%x%x%x%x\",Q+1)or C:match(\"^%x%x%x%x\",Q+1)or G(C,Q-1,\"invalid unicode escape in string\")m=m..L(S)Q=Q+#S else if not y[h]then G(C,Q-1,\"invalid escape char \'\"..h..\"\' in string\")end;m=m..d[h]end;e=Q+1 elseif R==34 then m=m..C:sub(e,Q-1)return m,Q+1 end;Q=Q+1 end;G(C,o,\"expected closing quote for string\")end;local function T(C,o)local R=B(C,o,x)local M=C:sub(o,R-1)local n=tonumber(M)if not n then G(C,o,\"invalid number \'\"..M..\"\'\")end;return n,R end;local function U(C,o)local R=B(C,o,x)local V=C:sub(o,R-1)if not z[V]then G(C,o,\"invalid literal \'\"..V..\"\'\")end;return A[V],R end;local function W(C,o)local m={}local n=1;o=o+1;while 1 do local R;o=B(C,o,w,true)if C:sub(o,o)==\"]\"then o=o+1;break end;R,o=u(C,o)m[n]=R;n=n+1;o=B(C,o,w,true)local X=C:sub(o,o)o=o+1;if X==\"]\"then break end;if X~=\",\"then G(C,o,\"expected \']\' or \',\'\")end end;return m,o end;local function Y(C,o)local m={}o=o+1;while 1 do local Z,j;o=B(C,o,w,true)if C:sub(o,o)==\"}\"then o=o+1;break end;if C:sub(o,o)~=\'\"\'then G(C,o,\"expected string for key\")end;Z,o=u(C,o)o=B(C,o,w,true)if C:sub(o,o)~=\":\"then G(C,o,\"expected \':\' after key\")end;o=B(C,o+1,w,true)j,o=u(C,o)m[Z]=j;o=B(C,o,w,true)local X=C:sub(o,o)o=o+1;if X==\"}\"then break end;if X~=\",\"then G(C,o,\"expected \'}\' or \',\'\")end end;return m,o end;local _={[\'\"\']=P,[\"0\"]=T,[\"1\"]=T,[\"2\"]=T,[\"3\"]=T,[\"4\"]=T,[\"5\"]=T,[\"6\"]=T,[\"7\"]=T,[\"8\"]=T,[\"9\"]=T,[\"-\"]=T,[\"t\"]=U,[\"f\"]=U,[\"n\"]=U,[\"[\"]=W,[\"{\"]=Y}u=function(C,D)local X=C:sub(D,D)local t=_[X]if t then return t(C,D)end;G(C,D,\"unexpected character \'\"..X..\"\'\")end;function a.Decode(C)if type(C)~=\"string\"then error(\"expected argument of type string, got \"..type(C))end;local m,D=u(C,B(C,1,w,true))D=B(C,D,w,true)if D<=#C then G(C,D,\"trailing garbage\")end;return m end;return a")()
local ApiKeys = {
"f7001d724cae9e4824fedcf5dcb9de5aacce3c9f5d34f4a2fc3cee3037a1fea2",
"3dae2771c047069f3ded05e230d425437713469b444f3e4bf04db6056a8e9530",
"bf8d9cbd4a41a5aadaffa3b5e4f9f2593992fa51875986d44a7630322b294896",
"3d0917560bc84abbb2327d582b39be10e9e84708d2b9d8ef23935fed262e9605",
"7ed9f4e45e0c5b8d87e2ee2241afa169ad078effce55e87bb6f5c2e812d478a9"
}
local Api = ApiKeys[Math.Random(1, Table.Count(ApiKeys))]
local Reply = HTTP.SubmitSecure("https://serpapi.com/search.json", {q = Search, tbm = "isch", ijn = 0, api_key = Api})
if Reply ~= "" then
Reply = Json.Decode(Reply)
local ImgSource = Reply.images_results[1].original
if ImgSource == nil then
return nil, 2
end
local Filename = Math.Random(100000, 999999)..".png"
Filename = Shell.GetFolder(SHF_APPLICATIONDATA).."\\Cache\\"..Filename
if ImgSource:sub(1, 5) == "https" then
HTTP.DownloadSecure(ImgSource, Filename)
else
HTTP.Download(ImgSource, Filename)
end
if Image.GetFileInfo(Filename) == nil then
return nil, 3
end
return Filename
else
return nil, 1
end
end