sources: factor out Source::URL::PixivSketch.
Add upload support for Pixiv Sketch. Fetch tags, commentary, and artist, and rewrite sample images to full images. Authentication isn't required. R18 images are hidden in the browser but visible in the API.
This commit is contained in:
@@ -28,6 +28,7 @@ module Source
|
||||
Source::URL::Moebooru,
|
||||
Source::URL::Nijie,
|
||||
Source::URL::Newgrounds,
|
||||
Source::URL::PixivSketch,
|
||||
Source::URL::Plurk,
|
||||
Source::URL::Skeb,
|
||||
Source::URL::TwitPic,
|
||||
|
||||
47
app/logical/source/url/pixiv_sketch.rb
Normal file
47
app/logical/source/url/pixiv_sketch.rb
Normal file
@@ -0,0 +1,47 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module Source
|
||||
class URL::PixivSketch < Source::URL
|
||||
attr_reader :work_id, :username, :full_image_url
|
||||
|
||||
def self.match?(url)
|
||||
url.host.in?(%w[sketch.pixiv.net img-sketch.pixiv.net img-sketch.pximg.net])
|
||||
end
|
||||
|
||||
def parse
|
||||
case [host, *path_segments]
|
||||
|
||||
# https://sketch.pixiv.net/items/5835314698645024323
|
||||
in "sketch.pixiv.net", "items", work_id
|
||||
@work_id = work_id
|
||||
|
||||
# https://img-sketch.pixiv.net/uploads/medium/file/4463372/8906921629213362989.jpg (page: https://sketch.pixiv.net/items/5835314698645024323)
|
||||
# https://img-sketch.pximg.net/c!/w=540,f=webp:jpeg/uploads/medium/file/4463372/8906921629213362989.jpg
|
||||
# https://img-sketch.pixiv.net/c/f_540/uploads/medium/file/9986983/8431631593768139653.jpg
|
||||
in *, "uploads", "medium", "file", dir, file if image_url?
|
||||
@full_image_url = "https://img-sketch.pixiv.net/uploads/medium/file/#{dir}/#{file}"
|
||||
|
||||
# https://sketch.pixiv.net/@user_ejkv8372
|
||||
# https://sketch.pixiv.net/@user_ejkv8372/followings
|
||||
in "sketch.pixiv.net", /^@/ => username, *rest
|
||||
@username = username.delete_prefix("@")
|
||||
|
||||
else
|
||||
end
|
||||
end
|
||||
|
||||
def image_url?
|
||||
url.host.in?(%w[img-sketch.pixiv.net img-sketch.pximg.net])
|
||||
end
|
||||
|
||||
def page_url
|
||||
# https://sketch.pixiv.net/items/5835314698645024323
|
||||
"https://sketch.pixiv.net/items/#{work_id}" if work_id.present?
|
||||
end
|
||||
|
||||
def api_url
|
||||
# https://sketch.pixiv.net/api/items/5835314698645024323.json (won't work in the browser; use curl)
|
||||
"https://sketch.pixiv.net/api/items/#{work_id}.json" if work_id.present?
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user