Files
danbooru/app/logical/source/url/newgrounds.rb
evazion f062f2d145 sources: factor out Source::URL::Newgrounds.
Also fix it so that the image URL is set as the source for Newgrounds
posts, not the page URL. It's possible to generate the page URL from the
image URL (except for images after the first in multi-image posts).

* Page: https://www.newgrounds.com/art/view/natthelich/weaver
* Image: https://art.ngfiles.com/images/1520000/1520217_natthelich_weaver.jpg?f1606365031
2022-02-25 23:04:03 -06:00

93 lines
3.2 KiB
Ruby

# frozen_string_literal: true
# Image Urls
#
# * https://art.ngfiles.com/images/1543000/1543982_natthelich_pandora-2.jpg?f1607971817
# * https://art.ngfiles.com/images/1033000/1033622_natthelich_fire-emblem-marth-plus-progress-pic.png?f1569487181
#
# * https://www.newgrounds.com/art/view/natthelich/weaver (page)
# * https://art.ngfiles.com/images/1520000/1520217_natthelich_weaver.jpg?f1606365031
# * https://art.ngfiles.com/comments/57000/iu_57615_7115981.jpg
#
# Thumbnail URLs
#
# * https://art.ngfiles.com/thumbnails/1543000/1543982_full.png?f1607971901
# * https://art.ngfiles.com/thumbnails/1254000/1254985.png?f1588263349
#
# Page URLs
#
# * https://www.newgrounds.com/art/view/puddbytes/costanza-at-bat
# * https://www.newgrounds.com/art/view/natthelich/weaver (multiple)
#
# Video URLs
#
# * https://www.newgrounds.com/portal/view/825916 (page)
# * https://picon.ngfiles.com/825000/flash_825916_card.png?f1639666239 (poster)
# * https://uploads.ungrounded.net/alternate/1801000/1801343_alternate_165104.1080p.mp4?1639666238
# * https://uploads.ungrounded.net/alternate/1801000/1801343_alternate_165104.720p.mp4?1639666238
# * https://uploads.ungrounded.net/alternate/1801000/1801343_alternate_165104.360p.mp4?1639666238
#
# Flash URLs
#
# * https://www.newgrounds.com/portal/view/225625 (page)
# * https://uploads.ungrounded.net/225000/225625_colormedressup.swf?1111143751 (file)
#
# Other URLs
#
# * https://www.newgrounds.com/reviews/portal/1543982/4/
# * https://www.newgrounds.com/reviews/portal/1543982/4/score/1
# * https://www.newgrounds.com/content/share/1543982/4/
# * https://www.newgrounds.com/favorites/content/who/1543982/4
#
# Profile URLs
#
# * https://natthelich.newgrounds.com
# * https://natthelich.newgrounds.com/art
#
class Source::URL::Newgrounds < Source::URL
attr_reader :username, :work_id, :work_title
def self.match?(url)
url.domain.in?(["newgrounds.com", "ngfiles.com", "ungrounded.net"])
end
def parse
case [host, *path_segments]
# https://www.newgrounds.com/art/view/puddbytes/costanza-at-bat
# https://www.newgrounds.com/art/view/natthelich/fire-emblem-marth-plus-progress-pic
in "www.newgrounds.com", "art", "view", username, work_title
@username = username
@work_title = work_title
# https://art.ngfiles.com/images/1254000/1254722_natthelich_pandora.jpg
# https://art.ngfiles.com/images/1033000/1033622_natthelich_fire-emblem-marth-plus-progress-pic.png?f1569487181
in "art.ngfiles.com", "images", _, /^(\d+)_([^_]+)_(.*)\.\w+$/ => filename
@work_id = $1
@username = $2
@work_title = $3
@filename = filename
# https://art.ngfiles.com/thumbnails/1254000/1254985.png?f1588263349
in "art.ngfiles.com", "thumbnails", _, /^(\d+)\.\w+$/ => filename
@work_id = $1
@filename = filename
# https://art.ngfiles.com/comments/57000/iu_57615_7115981.jpg
in "art.ngfiles.com", "comments", _, /^iu/ => filename
@filename = filename
# https://natthelich.newgrounds.com
# https://natthelich.newgrounds.com/art/
in /^([a-z0-9-]+)\.newgrounds\.com$/, *rest if host != "www.newgrounds.com"
@username = $1
else
end
end
def image_url?
url.host == "art.ngfiles.com"
end
end