Files
danbooru/app/logical/pixiv_proxy.rb
albert 1c9d8c37c7 Fixed some major bugs with implications, cleaning up the cache
expiration process and adding some additional tests.

Cleaned up the unit tests.  They should all run cleanly with rake
test:units now.
2010-10-27 16:56:12 -04:00

95 lines
2.2 KiB
Ruby

class PixivProxy
def self.is_pixiv?(url)
url =~ /pixiv\.net/
end
def self.get(url)
if url =~ /\/(\d+)(_m)?\.(jpg|jpeg|png|gif)/i
url = "http://www.pixiv.net/member_illust.php?mode=medium&illust_id=#{$1}"
get_single(url)
elsif url =~ /member_illust\.php/ && url =~ /illust_id=/
get_single(url)
# elsif url =~ /member_illust\.php/ && url =~ /id=/
# get_listing(url)
# elsif url =~ /member\.php/ && url =~ /id=/
# get_profile(url)
else
{}
end
end
def self.get_profile(url)
url = URI.parse(url).request_uri
mech = create_mechanize
hash = {}
mech.get(url) do |page|
hash[:artist] = page.search("a.avatar_m").attr("title").value
hash[:listing_url] = "/member_illust.php?id=" + url[/id=(\d+)/, 1]
end
hash
end
def self.get_single(url)
url = URI.parse(url).request_uri
mech = create_mechanize
hash = {}
mech.get(url) do |page|
if page.search("a.avatar_m")
hash[:artist] = page.search("a.avatar_m").attr("title").value
hash[:image_url] = page.search("div.works_display/a/img").attr("src").value.sub("_m.", ".")
hash[:profile_url] = page.search("a.avatar_m").attr("href").value
hash[:jp_tags] = page.search("span#tags/a").map do |node|
[node.inner_text, node.attribute("href").to_s]
end.reject {|x| x[0].empty?}
else
hash[:artist] = "?"
hash[:image_url] = "?"
hash[:profile_url] = "?"
hash[:jp_tags] = []
end
end
hash
end
def self.get_listing(url)
mech = create_mechanize
p = 1
url = URI.parse(url).request_uri.sub(/&p=\d+/, "") + "&p=1"
more = true
images = []
while more
mech.get(url) do |page|
links = page.search("div#illust_c4/ul/li/a")
if links.empty?
more = false
else
images += links.map do |node|
image_src = node.child.attribute("src").to_s
[image_src, image_src.sub("_s.", "."), node.attribute("href").to_s]
end
end
p += 1
url.sub!(/&p=\d+/, "&p=#{p}")
end
end
images
end
def self.create_mechanize
mech = Mechanize.new
mech.get("http://www.pixiv.net") do |page|
page.form_with(:action => "/login.php") do |form|
form.pixiv_id = "uroobnad"
form.pass = "uroobnad556"
end.click_button
end
mech
end
end