Исходник github api(put,delete,get)

Vespan

loneliness
Автор темы
Проверенный
2,105
1,633
Можно создавать, изменить или удалить файл из вашего репозитория на гитхабе!
require requests, base64
github - settings - developer settings - personal acess token - tokens(classic) - generate new token - generate new token(classic)

{githubapi}:
githubapi = {}
setmetatable(githubapi,{
    __call = function(_,token)
        return setmetatable({token=token},{
            __index = function(self,k)
                local requests = require "requests"
                local base64 = require "base64"
                if requests[k] ~= nil then
                    return function(args)
                        local headers = {
                            ['Authorization'] = 'token '..self.token,
                            ['Accept'] = 'application/vnd.github+json',
                        }
                        if args['url'] ~= nil and args['url']:find("^https%:%/%/github%.com%/%S+/%S.%S+$") then
                            args.repository = args['url']:match("https%:%/%/github%.com%/(%w+/%w+)%/")
                            args.path = args['url']:match("https%:%/%/github%.com%/%S+/master/(.+)")
                        end

                        if k == "get" then
                            local r = requests.get(("https://raw.githubusercontent.com/%s/master/%s"):format(args.repository,args.path))
                            return (r.status_code==200),r
                        end
                        local r = requests.get(("https://api.github.com/repos/%s/contents/%s"):format(args.repository,args.path),{
                            ['headers']  = headers,
                        })
                        local old = decodeJson(r.text)
                        if r.status_code ~= 200 then
                            print('sha nil')
                            old['sha'] = nil
                        end
                        local data = {
                            ['message'] = 'new commint from API',
                            ['sha'] = old['sha'],
                        }
                        if args['content'] ~= nil then
                            data['content'] = base64.encode(args.content)
                        end

                        local r = requests.put(("https://api.github.com/repos/%s/contents/%s"):format(args.repository,args.path),{
                            ['headers']  = headers,
                            ['data'] = encodeJson(data) ,
                        })
                        return (r.status_code == 200),r
                    end
                end
            end
        })
    end,
})
put:
local g = githubapi("TOKEN")
local status,resp = g.put({url="https://github.com/v3sp4n/test/blob/master/1234.txt",content='QQ'})
--если будет существовать файл то изменится его содержимое, если файла не будет то он создаться с содержимым content
print(status,resp.text)
delete:
local g = githubapi("TOKEN")
local status,resp = g.delete({url="https://github.com/v3sp4n/test/blob/master/1234.txt"})
--удаление файла
print(status,resp.text)
get:
local g = githubapi("TOKEN")
local status,resp = g.get({url="https://github.com/v3sp4n/test/blob/master/1234.txt"})
--вернуть содержимое файла
print(status,resp.text)
 
Последнее редактирование: