Create archiver.rb

This commit is contained in:
王戈wg
2021-07-27 10:10:19 +08:00
committed by GitHub
parent 7ddbcc434b
commit 3beb44a4e8

64
archiver.rb Normal file
View File

@@ -0,0 +1,64 @@
require 'nokogiri'
require 'octokit'
require 'uri'
require 'net/http'
require 'cgi'
require 'json'
WEBSITES = []
def register_website config
WEBSITES << config
end
def get_with_headers uri, headers
get = Net::HTTP::Get.new(uri)
res = Net::HTTP.start(uri.hostname, uri.port, {use_ssl: uri.scheme == 'https'}) { |http|
http.request_get(uri, headers)
}
res.body
end
Dir["#{__dir__}/websites/*.rb"].each{|path| require path}
def fetch_article url
begin
uri = URI(url)
rescue URI::InvalidURIError
uri = URI(URI.escape(url))
end
website = WEBSITES.find{|x| x[:test].(uri) } || WEBSITES.find{|x| x[:name] == 'default'}
request = website[:request] || ->(uri) {
get_with_headers(uri, {})
}
process = website[:process]
process.(request.(uri))
end
def run token, repo
client = Octokit::Client.new(access_token: token)
client.list_issues(repo, state: 'open').each do |issue|
begin
number = issue[:number]
title = issue[:title]
body = issue[:body]
if title == 'archive_request'
article = fetch_article(body)
client.add_comment(repo, number, "#{article[:title]} by #{article[:author]}\n------\n#{article[:content]}")
client.update_issue(repo, number, title: article[:title])
else
raise 'invalid request'
end
rescue
client.add_comment(repo, number, $!.inspect)
client.update_issue(repo, number)
ensure
client.close_issue(repo, number)
end
end
end