first cut implementation at using public pixiv api
This commit is contained in:
67
app/logical/pixiv_api_client.rb
Normal file
67
app/logical/pixiv_api_client.rb
Normal file
@@ -0,0 +1,67 @@
|
||||
class PixivApiClient
|
||||
CLIENT_ID = "bYGKuGVw91e0NMfPGp44euvGt59s"
|
||||
CLIENT_SECRET = "HP3RmkgAmEGro0gn1x9ioawQE8WMfvLXDz3ZqxpK"
|
||||
|
||||
def works(illust_id)
|
||||
headers = {
|
||||
"Referer" => "http://www.pixiv.net",
|
||||
"User-Agent" => "#{Danbooru.config.safe_app_name}/#{Danbooru.config.version}",
|
||||
"Content-Type" => "application/x-www-form-urlencoded",
|
||||
"Authorization" => "Bearer #{access_token}"
|
||||
}
|
||||
params = {
|
||||
"image_sizes" => "large",
|
||||
"include_stats" => "true"
|
||||
}
|
||||
url = URI.parse("https://public-api.secure.pixiv.net/v1/works/#{illust_id.to_i}.json")
|
||||
url.query = URI.encode_www_form(params)
|
||||
json = nil
|
||||
|
||||
Net::HTTP.start(url.host, url.port, :use_ssl => true) do |http|
|
||||
resp = http.request_get(url.request_uri, headers)
|
||||
if resp.is_a?(Net::HTTPSuccess)
|
||||
json = JSON.parse(resp.body)
|
||||
end
|
||||
end
|
||||
|
||||
map(json)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def map(raw_json)
|
||||
{
|
||||
:moniker => raw_json["response"][0]["user"]["account"],
|
||||
:file_ext => File.extname(raw_json["response"][0]["image_urls"]["large"]),
|
||||
:page_count => raw_json["response"][0]["page_count"]
|
||||
}
|
||||
end
|
||||
|
||||
def access_token
|
||||
Cache.get("pixiv-papi-access-token", 3000) do
|
||||
access_token = nil
|
||||
headers = {
|
||||
"Referer" => "http://www.pixiv.net"
|
||||
}
|
||||
params = {
|
||||
"username" => Danbooru.config.pixiv_login,
|
||||
"password" => Danbooru.config.pixiv_password,
|
||||
"grant_type" => "password",
|
||||
"client_id" => CLIENT_ID,
|
||||
"client_secret" => CLIENT_SECRET
|
||||
}
|
||||
url = URI.parse("https://oauth.secure.pixiv.net/auth/token")
|
||||
|
||||
Net::HTTP.start(url.host, url.port, :use_ssl => true) do |http|
|
||||
resp = http.request_post(url.request_uri, URI.encode_www_form(params), headers)
|
||||
|
||||
if resp.is_a?(Net::HTTPSuccess)
|
||||
json = JSON.parse(resp.body)
|
||||
access_token = json["response"]["access_token"]
|
||||
end
|
||||
end
|
||||
|
||||
access_token
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user