add source + rewrite strategy for pawoo
This commit is contained in:
@@ -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 = {})
|
||||
|
||||
21
app/logical/downloads/rewrite_strategies/pawoo.rb
Normal file
21
app/logical/downloads/rewrite_strategies/pawoo.rb
Normal 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
|
||||
81
app/logical/pawoo_api_client.rb
Normal file
81
app/logical/pawoo_api_client.rb
Normal 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
|
||||
@@ -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 = {})
|
||||
|
||||
25
app/logical/sources/strategies/pawoo.rb
Normal file
25
app/logical/sources/strategies/pawoo.rb
Normal 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
|
||||
Reference in New Issue
Block a user