История изменений
Исправление LINUX-ORG-RU, (текущая версия) :
Во. Теперь игрался с luarocks
и автоматической проверки зависимостей и их накатки.
package.path = package.path .. ";/home/"..os.getenv("USER").."/.luarocks/share/lua/5.1/?.lua;"
package.cpath = package.cpath .. ";/home/"..os.getenv("USER").."./lualib/lib/lua/5.1/?.so;"
local json, https;
function loadmodules()
json = require("rxi-json-lua")
https = require("ssl.https")
end
-----------------------------------------------------------
if pcall(loadmodules) then
--print("all okey")
else
print("Первый запуск, установка зависимостей")
os.execute("luarocks --local install rxi-json-lua")
json = require("rxi-json-lua")
os.execute("luarocks --local install luasec")
https = require("ssl.https")
end
------------------------------------------------------------
BOOK = "https://www.googleapis.com/books/v1/volumes?q=isbn:"
ISBN = arg[1] -- example "3940862215"
LANG = arg[2] -- "ru" or "en"
if ISBN == "en" or ISBN == "ru" then
LANG = ISBN
ISBN = nil
end
if ISBN == nil then
clip_pipe = io.popen("xclip -selection clipboard -o")
clip_data = tonumber(clip_pipe:read("*a"))
if type(clip_data) == "number" then
ISBN = clip_data;
end
end
if ISBN == nil then
print("Нужно задать ISBN номер книги в параметры запуска скрипта: $lua script.lua ISBN_НОМЕР [en ru опционально] ")
print("Или скопировать номер ISBN в буфер обмена")
return
end
------------------------------------------------------------
if LANG == nil then
LANG = "ru" -- default russian
end
------------------------------------------------------------
body, code, headers, status = https.request(BOOK..ISBN)
data = json.decode(body)
------------------------------------------------------------
if data == nil or data.items == nil then
print("Нет книг для этого ISBN")
return
end
------------------------------------------------------------
title = data.items[1].volumeInfo.title;
author = ""
for k,v in pairs(data.items[1].volumeInfo.authors) do
author = v .. ", "
end
author = author:sub(0,#author-2)
publisher = data.items[1].volumeInfo.publisher;
date = data.items[1].volumeInfo.publishedDate;
year = date:sub(0, 4);
------------------------------------------------------------
if LANG == "ru" then
template = "{{" .. "Книга" .. "\n" ..
" |название=" .. tostring(title) .. "\n" ..
" |автор=" .. tostring(author) .. "\n" ..
" |год=" .. tostring(year) .. "\n" ..
" |издательство=" .. tostring(publisher) .. "\n" ..
" |isbn=" .. tostring(ISBN) .. "\n" ..
" |ref=" .. "\n" ..
"}}";
else
template = "{{" .. "Book" .. "\n" ..
" |title=" .. tostring(title) .. "\n" ..
" |author=" .. tostring(author) .. "\n" ..
" |date=" .. tostring(year) .. "\n" ..
" |publisher=" .. tostring(publisher) .. "\n" ..
" |isbn=" .. tostring(ISBN) .. "\n" ..
" |ref=" .. "\n" ..
"}}";
end
------------------------------------------------------------
print(template)
clipboard = io.popen("xclip -selection clipboard","w")
clipboard:write(template)
clipboard:close()
print("Шаблон скопирован в буфер обмена")
os.execute("notify-send -e 'Шаблон скопирован в буфер обмена'")
Теперь оно само развернёт при первом запуске необходимое, а патчи прописаны сразу. en/ru
на выбор. В случае неправильного кода ISBN будут сообщения, мол такой книги нету. Если парамерты не заданы то пытается взять код из буфера обмена, если это удаётся то получает данные, в терминале можно отдельно задать язык без указывания кода ISBN тогда код будет браться только из буфера обмена. Номер ISBN обязан быть числом иначе не распознает
Всё вроде работает, всё я наигрался. Досвиданья.
Исходная версия LINUX-ORG-RU, :
Во. Теперь игрался с luarocks
и автоматической проверки зависимостей и их накатки.
package.path = package.path .. ";/home/"..os.getenv("USER").."/.luarocks/share/lua/5.1/?.lua;"
package.cpath = package.cpath .. ";/home/"..os.getenv("USER").."./lualib/lib/lua/5.1/?.so;"
local json, https;
function loadmodules()
json = require("rxi-json-lua")
https = require("ssl.https")
end
-----------------------------------------------------------
if pcall(loadmodules) then
--print("all okey")
else
print("Первый запуск, установка зависимостей")
os.execute("luarocks --local install rxi-json-lua")
json = require("rxi-json-lua")
os.execute("luarocks --local install luasec")
https = require("ssl.https")
end
------------------------------------------------------------
BOOK = "https://www.googleapis.com/books/v1/volumes?q=isbn:"
ISBN = arg[1] -- example "3940862215"
LANG = arg[2] -- "ru" or "en"
if ISBN == "en" or ISBN == "ru" then
LANG = ISBN
ISBN = nil
end
if ISBN == nil then
clip_pipe = io.popen("xclip -selection clipboard -o")
clip_data = tonumber(clip_pipe:read("*a"))
if type(clip_data) == "number" then
ISBN = clip_data;
end
end
if ISBN == nil then
print("Нужно задать ISBN номер книги в параметры запуска скрипта: $lua script.lua ISBN_НОМЕР [en ru опционально] ")
print("Или скопировать номер ISBN в буфер обмена")
return
end
------------------------------------------------------------
if LANG == nil then
LANG = "ru" -- default russian
end
------------------------------------------------------------
body, code, headers, status = https.request(BOOK..ISBN)
data = json.decode(body)
------------------------------------------------------------
if data == nil or data.items == nil then
print("Нет книг для этого ISBN")
return
end
------------------------------------------------------------
title = data.items[1].volumeInfo.title;
author = ""
for k,v in pairs(data.items[1].volumeInfo.authors) do
author = v .. ", "
end
author = author:sub(0,#author-2)
publisher = data.items[1].volumeInfo.publisher;
date = data.items[1].volumeInfo.publishedDate;
year = date:sub(0, 4);
------------------------------------------------------------
if LANG == "ru" then
template = "{{" .. "Книга" .. "\n" ..
" |название=" .. tostring(title) .. "\n" ..
" |автор=" .. tostring(author) .. "\n" ..
" |год=" .. tostring(year) .. "\n" ..
" |издательство=" .. tostring(publisher) .. "\n" ..
" |isbn=" .. tostring(ISBN) .. "\n" ..
" |ref=" .. "\n" ..
"}}";
else
template = "{{" .. "Book" .. "\n" ..
" |title=" .. tostring(title) .. "\n" ..
" |author=" .. tostring(author) .. "\n" ..
" |date=" .. tostring(year) .. "\n" ..
" |publisher=" .. tostring(publisher) .. "\n" ..
" |isbn=" .. tostring(ISBN) .. "\n" ..
" |ref=" .. "\n" ..
"}}";
end
------------------------------------------------------------
print(template)
clipboard = io.popen("xclip -selection clipboard","w")
clipboard:write(template)
clipboard:close()
print("Шаблон скопирован в буфер обмена")
os.execute("notify-send -e 'Шаблон скопирован в буфер обмена'")
Теперь оно само развернёт при первом запуске необходимое, а патчи прописаны сразу. en/ru
на выбор. В случае неправильного кода ISBN будут сообщения, мол такой книги нету. Если парамерты не заданы то пытается взять код из буфера обмена, если это удаётся то получает данные, в терминале можно отдельно задать язык без указывания кода ISBN тогда код будет браться только из буфера обмена.
Всё вроде работает, всё я наигрался. Досвиданья.