diff --git a/app/controllers/artists_controller.rb b/app/controllers/artists_controller.rb index 74a50dd57..6144b1931 100644 --- a/app/controllers/artists_controller.rb +++ b/app/controllers/artists_controller.rb @@ -118,11 +118,7 @@ class ArtistsController < ApplicationController end def finder - url = params[:url] - headers = { - "User-Agent" => "#{Danbooru.config.safe_app_name}/#{Danbooru.config.version}" - } - url, headers = Downloads::Strategies::Pixiv.new.rewrite(url, headers) + url = Sources::Strategies::Pixiv.new(url).normalize_for_artist_finder!(params[:url]) @artists = Artist.url_matches(url).order("id desc").limit(20) respond_with(@artists) do |format| diff --git a/app/logical/sources/strategies/pixiv.rb b/app/logical/sources/strategies/pixiv.rb index 543acff87..b02e91dfb 100644 --- a/app/logical/sources/strategies/pixiv.rb +++ b/app/logical/sources/strategies/pixiv.rb @@ -25,6 +25,21 @@ module Sources @pixiv_moniker end + def normalize_for_artist_finder!(url) + illust_id = illust_id_from_url(url) + + # http://i2.pixiv.net/img04/img/syounen_no_uta/46170939_m.jpg + if url =~ %r!/img/([^/]+)/\d+(?:_\w+)?\.(?:jpg|jpeg|png|gif)!i + username = $1 + else + get_metadata_from_spapi!(illust_id) do |metadata| + username = metadata[24] + end + end + + "http://img.pixiv.net/img/#{username}" + end + def get agent.get(URI.parse(normalized_url)) do |page| @artist_name, @profile_url = get_profile_from_page(page)