Add Booth support
This commit is contained in:
83
app/logical/source/extractor/booth.rb
Normal file
83
app/logical/source/extractor/booth.rb
Normal file
@@ -0,0 +1,83 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
# @see Source::URL::Booth
|
||||
class Source::Extractor
|
||||
class Booth < Source::Extractor
|
||||
def match?
|
||||
Source::URL::Booth === parsed_url
|
||||
end
|
||||
|
||||
def image_urls
|
||||
if parsed_url.image_url?
|
||||
if parsed_url.full_image_url?
|
||||
[parsed_url.to_s]
|
||||
else
|
||||
[find_right_extension(parsed_url)]
|
||||
end
|
||||
else
|
||||
page&.css(".market-item-detail-item-image")&.pluck("data-origin").to_a.compact
|
||||
end
|
||||
end
|
||||
|
||||
def profile_url
|
||||
if page.present?
|
||||
page.at(".summary [data-product-list*='shop_index']")&.[]("href")&.chomp("/")
|
||||
else
|
||||
parsed_url.profile_url || parsed_referer&.profile_url
|
||||
end
|
||||
end
|
||||
|
||||
def artist_name
|
||||
return nil unless profile_url.present?
|
||||
Source::URL.parse(profile_url)&.username
|
||||
end
|
||||
|
||||
def display_name
|
||||
page&.at(".summary .user-avatar")&.[]("alt")
|
||||
end
|
||||
|
||||
def other_names
|
||||
[display_name].compact
|
||||
end
|
||||
|
||||
def artist_commentary_title
|
||||
page&.at(".summary .u-tpg-title1")&.text
|
||||
end
|
||||
|
||||
def artist_commentary_desc
|
||||
page&.at(".autolink")&.to_html
|
||||
end
|
||||
|
||||
def dtext_artist_commentary_desc
|
||||
DText.from_html(artist_commentary_desc)
|
||||
end
|
||||
|
||||
def tags
|
||||
page&.css(".item-info-detail [data-product-list*='tag_category_search']").to_a.map do |element|
|
||||
[element.text.gsub(/ x .*/, ""), element["href"]]
|
||||
end
|
||||
end
|
||||
|
||||
def page_url
|
||||
parsed_url.page_url || parsed_referer&.page_url
|
||||
end
|
||||
|
||||
def page
|
||||
return nil if parsed_url.page_url.blank?
|
||||
|
||||
resp = http.cache(1.minute).cookies(adult: "t").get(page_url)
|
||||
return nil if resp.code != 200
|
||||
|
||||
resp.parse
|
||||
end
|
||||
memoize :page
|
||||
|
||||
def find_right_extension(parsed_url)
|
||||
extensions = %w[png jpg jpeg]
|
||||
candidates = extensions.map { |ext| parsed_url.full_image_url_for(ext) }
|
||||
|
||||
chosen_url = candidates.find { |candidate| http_exists?(candidate) }
|
||||
chosen_url || parsed_url.to_s
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user