LINUX.ORG.RU

История изменений

Исправление 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 тогда код будет браться только из буфера обмена.

Всё вроде работает, всё я наигрался. Досвиданья.