Create README.md
This commit is contained in:
parent
20f2daf383
commit
2c18da4f6c
1 changed files with 132 additions and 0 deletions
132
README.md
Normal file
132
README.md
Normal file
|
|
@ -0,0 +1,132 @@
|
||||||
|
# lua534
|
||||||
|
Lua Web Dumper<br>
|
||||||
|
|
||||||
|
I wrote this thing because in some period of my life i was needed in fast way to dump websites, so here it's
|
||||||
|
|
||||||
|
## Introduction
|
||||||
|
Lua534 supports multithreading. It's not coroutines, it's real threads with different lua states (for 20 threads you
|
||||||
|
have 20 lua states). Also providen htmlcxx and curl libraries
|
||||||
|
|
||||||
|
## task table
|
||||||
|
task table stands for multitasking manipulations with threads.<br>
|
||||||
|
```setThreadCount(number)``` -- sets default number of threads in payload. Used when you launch 100 jobs but need 10 threads per each payload.<br>
|
||||||
|
```setDelay(msecs)``` -- sets delay between thread spawning<br>
|
||||||
|
```setTimeOut(msecs)``` -- set timeout for thread. Used when you need close thread after some period of time if it's doesn't closed yet<br>
|
||||||
|
```getGlobal(name)``` -- returns variable from Global Lua State. Used to get some settings or variables in Thread Lua States<br>
|
||||||
|
```lockGlobal()``` -- regular mutex<br>
|
||||||
|
```unlockGlobal()``` -- regular mutex<br>
|
||||||
|
|
||||||
|
## file table
|
||||||
|
some file utils<br>
|
||||||
|
```exists(path)``` -- checks if file or dir exists<br>
|
||||||
|
```mkdir(name)``` -- creates directory<br>
|
||||||
|
```stat(path)``` -- stat C function. Returns ```struct stat``` table, like in C<br>
|
||||||
|
```size(path)``` -- returns file size<br>
|
||||||
|
```remove(path)``` -- removes file or directory<br>
|
||||||
|
|
||||||
|
## u8 table
|
||||||
|
UTF-8 and UTF-16 conversion functions<br>
|
||||||
|
```print(utf16text)``` -- prints UTF-16 text<br>
|
||||||
|
```scan(bufsize)``` -- reads UTF-16 input from console<br>
|
||||||
|
```write(file,utf16text)``` -- writes UTF-16 text to file<br>
|
||||||
|
```conv_u16(utf16text)``` -- convers UTF-16 to UTF-8<br>
|
||||||
|
```conv_u8(text)``` -- convers UTF-8 to UTF-16<br>
|
||||||
|
|
||||||
|
## global functions
|
||||||
|
```tohtml(html_text)``` -- returns html object<br>
|
||||||
|
### HTML's Object Metatable
|
||||||
|
```contentOf(child)``` -- returns content of child<br>
|
||||||
|
```toTable()``` -- returns table of html childs<br>
|
||||||
|
```byTagName(tagname)``` -- returns table of tags with name ```tagname```<br>
|
||||||
|
```getChildsOf(child)``` -- returns table of childs of ```child```<br>
|
||||||
|
## global functions
|
||||||
|
```curl_open()``` -- returns CURL handle object<br>
|
||||||
|
### CURL's Object Metatable
|
||||||
|
```close()``` -- closes handle<br>
|
||||||
|
```setOpt(CURLOPT_,arg)``` -- sets curl opt. Arg can be string or number. Supported CURLOPT_*:<br>
|
||||||
|
* CURLOPT_URL
|
||||||
|
* CURLOPT_PORT
|
||||||
|
* CURLOPT_POST
|
||||||
|
* CURLOPT_PROXY
|
||||||
|
* CURLOPT_VERBOSE
|
||||||
|
* CURLOPT_TIMEOUT
|
||||||
|
* CURLOPT_USERAGENT
|
||||||
|
* CURLOPT_POSTFIELDS
|
||||||
|
* CURLOPT_AUTOREFERER
|
||||||
|
* CURLOPT_REFERER
|
||||||
|
* CURLOPT_COOKIE
|
||||||
|
* CURLOPT_COOKIEFILE
|
||||||
|
* CURLOPT_COOKIEJAR
|
||||||
|
* CURLOPT_COOKIELIST
|
||||||
|
* CURLOPT_FOLLOWLOCATION
|
||||||
|
* CURLOPT_CONNECTTIMEOUT
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
```getInfo(CURLINFO_)``` -- returns curl info. Supported CURLINFO_*:<br>
|
||||||
|
* CURLINFO_RESPONSE_CODE
|
||||||
|
* CURLINFO_HTTP_CODE
|
||||||
|
## global functions
|
||||||
|
```performMultiTask(thread_function,args)``` -- Launch Lua Threads for each element in table. Notice that each thread have it own lua state,
|
||||||
|
so you must access variables from Global Lua State via ```task.getGlobal(name)```. If you did dofile in Global Lua State, you must it in Lua Thread State<br>
|
||||||
|
|
||||||
|
## Example
|
||||||
|
```lua
|
||||||
|
--<a href="/img/Lena/-4quaSExzHc.jpg" target="_blank">
|
||||||
|
dofile("base.lua")
|
||||||
|
task.setThreadCount(10)
|
||||||
|
|
||||||
|
USERAGENT = "GM9 REVCOUNCIL"
|
||||||
|
URL = "https://anonymus-lenofag.github.io"
|
||||||
|
MAXERRORS = 5
|
||||||
|
|
||||||
|
curl = curl_open()
|
||||||
|
curl:setOpt(CURLOPT_USERAGENT,USERAGENT)
|
||||||
|
curl:setOpt(CURLOPT_URL,URL)
|
||||||
|
data,res,code = _performCurl(curl,MAXERRORS)
|
||||||
|
curl:close()
|
||||||
|
|
||||||
|
function download(pic)
|
||||||
|
dofile("base.lua")
|
||||||
|
local l,k = pic:find("Lena/")
|
||||||
|
local fpic = io.open("lena"..pic:sub(k),"wb")
|
||||||
|
local curl = curl_open()
|
||||||
|
|
||||||
|
curl:setOpt(CURLOPT_URL,task.getGlobal("URL")..pic)
|
||||||
|
curl:setOpt(CURLOPT_USERAGENT,task.getGlobal("USERAGENT"))
|
||||||
|
local res,code = _performFileCurl(curl,fpic,task.getGlobal("MAXERRORS"))
|
||||||
|
if res == 0 then print(pic) end
|
||||||
|
fpic:close()
|
||||||
|
curl:close()
|
||||||
|
end
|
||||||
|
|
||||||
|
pics = {}
|
||||||
|
prs = tohtml(data)
|
||||||
|
for k,v in pairs(prs:toTable()) do
|
||||||
|
local href = v:attribute("href")
|
||||||
|
local target = v:attribute("target")
|
||||||
|
if v:tagName() == "a" and href ~= nil
|
||||||
|
and target ~= nil then
|
||||||
|
pics[#pics+1] = href
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
file.mkdir("lena/")
|
||||||
|
performMultiTask(download,pics)
|
||||||
|
```
|
||||||
|
|
||||||
|
## P.S.
|
||||||
|
Also there is table of arguments ```args``` in Global Lua State.<br>
|
||||||
|
```reimu.exe myscript.lua arg1 arg2 arg3```<br>
|
||||||
|
```lua
|
||||||
|
for k,v in pairs(args) do
|
||||||
|
print(v)
|
||||||
|
end
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
* myscript.lua
|
||||||
|
* arg1
|
||||||
|
* arg2
|
||||||
|
* arg3
|
||||||
Loading…
Add table
Reference in a new issue