Hướng dẫn viết extension - Darkrai9x/vbook-extensions GitHub Wiki

Cấu trúc của extension

##Thông tin extension

  • Tạo một tệp với tên plugin.json vào thư mục của extensions, cấu trúc của tệp có dạng như sau
{
  "metadata": {
    "name": "<Tên của extension>",
    "author": "<Tên tác giả>",
    "version": <Phiên bản của extension dạng integer>,
    "source": "<Địa chỉ trang nguồn>",
    "regexp": "<RegExp khớp với URL của trang truyện>",
    "description": "<Mô tả về extension>",
    "local": "<Quốc gia áp dụng của extension>",
    "language": "<Ngôn ngữ của extension, 2 giá trị lua/javascript>",
    "type": "<Thể loại của extension, comic/novel>"
  },
  "script": {
    "home": "<Tên script trang home (không bắt buộc)>",
    "genre": "<Tên script danh sách thể loại, nếu không có thì không thêm>",
    "detail": "<Tên script thông tin truyện (bắt buộc)>",
    "search": "<Tên script tìm kiếm truyện (không bắt buộc)>",
	"page": "<Tên script danh sách trang của mục luc (không bắt buộc)>",
    "toc": "<Tên script mục lục (bắt buộc)ó>",
    "chap": "<Tên script nội dung chương (bắt buộc)>",
  }
}

Icon extension

  • Tạo một ảnh icon.png trong thư mục của extension

Script extension

  • Tạo các tệp script dặt tại thư mục src của extension

Cấu trúc script

Xem source code của các extension để tham khảo

Các funtion bổ trợ

LUA

  • Http request http:
local request = http:get(url) -- Tạo request GET, return Request object
local request = http:post(url) -- Tạo request POST, return Request object
request:header(key, value) -- Truyền tham số vào header key-value, return Request object
request:headers(headers) -- Truyền tham số header dạng lua table, return Request object
request:params(params) -- Truyền tham số FormData dạng lua table, return Request object
request:body(body)  -- Truyền tham số body payload string, return Request object
request:html() -- return response request dạng Document object
request:table() -- return response request dạng lua table object
request:string() -- return response request dạng string
request:code() -- return http status code của response
  • Html parse html:
html:parse(text) -- Parse html text to  Document object
  • Json convert to table json:
json:to_table(text) -- Parse json text to lua table object
  • Number convert num:
num:to_int(input, defaultValue) -- Convert input to Int
num:to_double(input, defaultValue) -- Convert input to Double
num:to_float(input, defaultValue) -- Convert input to Float
num:to_long(input, defaultValue) -- Convert input to Long
  • Regexp regexp:
regexp:find(text, regex) -- Trả về kết quả tìm kiếm đầu tiên khớp với regexp của group 1
regexp:find(text, regex, group) -- Trả về kết quả tìm kiếm đầu tiên khớp với regexp của group
regexp:find_last(text, regex) -- Trả về kết quả tìm kiếm cuối cùng khớp với regexp của group 1
regexp:find_last(text, regex, group) -- Trả về kết quả tìm kiếm cuối cùng khớp với regexp của group
  • Text, text:
text:index_of(str, s) -- Trả về vị trí đầu tiên chuỗi `s` trong `str`, không có trả về -1
text:last_index_of(str, s) -- Trả về vị trí cuối cùng chuỗi `s` trong `str`, không có trả về -1
text:matches(str, regexp) -- Kiểm trả `str` khớp với regexp không
text:index_of(str, s, start) -- Trả về vị trí đầu tiên của chuỗi `s` bắt dầu từ vị trí `start` trong `str`, không có trả về -1
text:last_index_of(str, s, start) -- Trả về vị trí cuối cùng của chuỗi `s` bắt đầu từ vị trí `start` trong `str`, không có trả về -1
text:sub(str, start, end) -- Cắt chuỗi `str` từ start -> end
text:split(text, regex) -- Chia chuỗi `text` thành các phần
text:trim(text) -- Xoá các ký tự empty ở đầu, cuối chuỗi
text:is_empty(text) -- Kiểm tra chuỗi rỗng
text:contains(text, value) -- Kiểm tra chuỗi `value` có nằm trong chuỗi `text` không
text:replace(str, regex, e) -- Thay thế chuỗi `regex` bằng `e`, có hỗ trợ regexp
text:remove(str, replace, regex) -- Xoá chuỗi `replace` trong `str`, regex = true/false để xác định replace có dùng regex hay không
  • Response ressponse:
ressponse:success(data) -- Trả về response thành công với data
ressponse:success(data, data2) -- Trả về response thành công với data, data2
ressponse:error(message) -- Trả về response thất bại với nội dung lỗi

-- Browser engine:browser()

local browser = engine:browser() -- Khởi tạo browser
browser:launch(url, timeout) -- Mở trang web với timeout, trả về Document object
browser:call_js(script, waitTime) -- Gọi Javascript function trên trang với waitTime, trả về Document object
browser:urls() -- Trả về các url đã request trên trang
browser:waitUrl(urls,  timeout) -- Đợi urls load với timeout
browser:html() -- Trả về Document object của trang web
browser:close() -- Đóng browser khi đã xử lý xong

Javascript

  • Http request
var request = Http.get(url) // Tạo request GET, return Request object
var request = Http.post(url) // Tạo request POST, return Request object
request.headers(headers) // Truyền tham số header, return Request object
request.params(params) // Truyền tham số FormData, return Request object
request.body(body) // Truyền tham số body payload string, return Request object
request.html() // Trả về response request dạng Document object
request.string() // Trả về response request dạng string
request.code()// Trả về http status code của response
  • Html parse
Html.parse(text) // Parse html text to  Document object
  • Response
Response.success(data) // Trả về response thành công với data
Response.success(data, data2) // Trả về response thành công với data, data2
Response.error(message) // Trả về response thất bại với nội dung lỗi

-- Browser

var browser = Engine.newBrowser() // Khởi tạo browser
browser.launch(url, timeout) // Mở trang web với timeout, trả về Document object
browser.callJs(script, waitTime) // Gọi Javascript function trên trang với waitTime, trả về Document object
browser.urls() // Trả về các url đã request trên trang
browser.waitUrl(urls,  timeout) // Đợi urls load với timeout
browser.html() // Trả về Document object của trang web
browser.close() // Đóng browser khi đã xử lý xong