add source + rewrite strategy for pawoo

This commit is contained in:
r888888888
2017-04-17 14:15:05 -07:00
parent 9718c6e107
commit b053a2d783
10 changed files with 176 additions and 2 deletions

View File

@@ -10,7 +10,7 @@ module Downloads
end
def self.strategies
[Downloads::RewriteStrategies::Pixiv, Downloads::RewriteStrategies::NicoSeiga, Downloads::RewriteStrategies::ArtStation, Downloads::RewriteStrategies::Twitpic, Downloads::RewriteStrategies::DeviantArt, Downloads::RewriteStrategies::Tumblr, Downloads::RewriteStrategies::Moebooru, Downloads::RewriteStrategies::Twitter, Downloads::RewriteStrategies::Nijie]
[Downloads::RewriteStrategies::Pixiv, Downloads::RewriteStrategies::NicoSeiga, Downloads::RewriteStrategies::ArtStation, Downloads::RewriteStrategies::Twitpic, Downloads::RewriteStrategies::DeviantArt, Downloads::RewriteStrategies::Tumblr, Downloads::RewriteStrategies::Moebooru, Downloads::RewriteStrategies::Twitter, Downloads::RewriteStrategies::Nijie, Downloads::RewriteStrategies::Pawoo]
end
def rewrite(url, headers, data = {})

View File

@@ -0,0 +1,21 @@
module Downloads
module RewriteStrategies
class Pawoo < Base
attr_accessor :url, :source
def initialize(url)
@url = url
end
def rewrite(url, headers, data = {})
if PawooApiClient::Status.is_match?(url)
client = PawooApiClient.new
response = client.get_status(url)
url = client.image_url
end
return [url, headers, data]
end
end
end
end

View File

@@ -0,0 +1,81 @@
class PawooApiClient
extend Memoist
class MissingConfigurationError < Exception ; end
class Account
attr_reader :json
def self.is_match?(url)
url =~ %r!https://pawoo.net/web/accounts/(\d+)!
$1
end
def initialize(json)
@json = get
end
def profile_url
json["url"]
end
end
class Status
attr_reader :json
def self.is_match?(url)
url =~ %r!https?://pawoo.net/web/statuses/(\d+)! || url =~ %r!https?://pawoo.net/@.+?/(\d+)!
$1
end
def initialize(json)
@json = json
end
def account_profile_url
json["account"]["url"]
end
def account_name
json["account"]["username"]
end
def image_url
image_urls.first
end
def image_urls
json["media_attachments"].map {|x| x["url"]}
end
end
def get_status(url)
if id = Status.is_match?(url)
Status.new(JSON.parse(access_token.get("/api/v1/statuses/#{id}").body))
else
nil
end
end
private
def fetch_access_token
raise MissingConfigurationError.new("missing pawoo client id") if Danbooru.config.pawoo_client_id.nil?
raise MissingConfigurationError.new("missing pawoo client secret") if Danbooru.config.pawoo_client_secret.nil?
Rails.cache.fetch("pawoo-token") do
result = client.client_credentials.get_token
result.token
end
end
def access_token
OAuth2::AccessToken.new(client, fetch_access_token)
end
def client
OAuth2::Client.new(Danbooru.config.pawoo_client_id, Danbooru.config.pawoo_client_secret, :site => "https://pawoo.net")
end
memoize :client
end

View File

@@ -10,7 +10,7 @@ module Sources
:artist_commentary_desc, :rewrite_thumbnails, :illust_id_from_url, :to => :strategy
def self.strategies
[Strategies::PixivWhitecube, Strategies::Pixiv, Strategies::NicoSeiga, Strategies::DeviantArt, Strategies::ArtStation, Strategies::Nijie, Strategies::Twitter, Strategies::Tumblr]
[Strategies::PixivWhitecube, Strategies::Pixiv, Strategies::NicoSeiga, Strategies::DeviantArt, Strategies::ArtStation, Strategies::Nijie, Strategies::Twitter, Strategies::Tumblr, Strategies::Pawoo]
end
def initialize(url, options = {})

View File

@@ -0,0 +1,25 @@
module Sources::Strategies
class Pawoo < Base
attr_reader :image_urls
def self.url_match?(url)
PawooApiClient::Status.is_match?(url)
end
def site_name
"Pawoo"
end
def get
response = PawooApiClient.new.get_status(url)
@artist_name = response.account_name
@profile_url = response.account_profile_url
@image_url = response.image_urls.first
@image_urls = response.image_urls
end
def normalizable_for_artist_finder?
true
end
end
end