From 7ca7ac27099f5af17de7ca42265f34ad900d864f Mon Sep 17 00:00:00 2001 From: Toks Date: Tue, 3 Jun 2014 18:42:24 -0400 Subject: [PATCH] #1866: Support Nijie source data getting --- app/logical/sources/site.rb | 2 +- app/logical/sources/strategies/nijie.rb | 97 +++++++++++++++++++++++++ config/danbooru_default_config.rb | 8 ++ 3 files changed, 106 insertions(+), 1 deletion(-) create mode 100644 app/logical/sources/strategies/nijie.rb diff --git a/app/logical/sources/site.rb b/app/logical/sources/site.rb index 1202fd8a6..da801affe 100644 --- a/app/logical/sources/site.rb +++ b/app/logical/sources/site.rb @@ -4,7 +4,7 @@ module Sources delegate :get, :referer_url, :site_name, :artist_name, :profile_url, :image_url, :tags, :artist_record, :unique_id, :to => :strategy def self.strategies - [Strategies::Pixiv, Strategies::NicoSeiga, Strategies::DeviantArt] + [Strategies::Pixiv, Strategies::NicoSeiga, Strategies::DeviantArt, Strategies::Nijie] end def initialize(url) diff --git a/app/logical/sources/strategies/nijie.rb b/app/logical/sources/strategies/nijie.rb new file mode 100644 index 000000000..7b51239ee --- /dev/null +++ b/app/logical/sources/strategies/nijie.rb @@ -0,0 +1,97 @@ +module Sources + module Strategies + class Nijie < Base + def self.url_match?(url) + url =~ /^https?:\/\/(?:.+?\.)?nijie\.info/ + end + + def referer_url(template) + if template.params[:ref] =~ /nijie\.info\/view\.php/ && template.params[:ref] =~ /id=\d+/ + template.params[:ref] + else + template.params[:url] + end + end + + def site_name + "Nijie" + end + + def unique_id + profile_url =~ /nijie\.info\/members.php\?id=(\d+)/ + "nijie" + $1.to_s + end + + def get + agent.get(url) do |page| + @artist_name, @profile_url = get_profile_from_page(page) + @image_url = get_image_url_from_page(page) + @tags = get_tags_from_page(page) + end + end + + protected + + def get_profile_from_page(page) + links = page.search("a.name") + + if links.any? + profile_url = "http://nijie.info" + links[0]["href"] + artist_name = links[0].text + else + profile_url = nil + artist_name = nil + end + + return [artist_name, profile_url].compact + end + + def get_image_url_from_page(page) + image = page.search("div#gallery a img") + + if image.any? + image[0]["src"] + else + nil + end + end + + def get_tags_from_page(page) + # puts page.root.to_xhtml + + links = page.search("div#view-tag a").find_all do |node| + node["href"] =~ /search\.php/ + end + + if links.any? + links.map do |node| + [node.inner_text, "http://nijie.info" + node.attr("href")] + end + else + [] + end + end + + def agent + @agent ||= begin + mech = Mechanize.new + + mech.get("http://nijie.info/login.php") do |page| + page.form_with(:action => "/login_int.php") do |form| + form['email'] = Danbooru.config.nijie_login + form['password'] = Danbooru.config.nijie_password + end.click_button + end + + # This cookie needs to be set to allow viewing of adult works while anonymous + cookie = Mechanize::Cookie.new("R18", "1") + cookie.domain = ".nijie.info" + cookie.path = "/" + mech.cookie_jar.add(cookie) + + mech + end + end + end + end +end diff --git a/config/danbooru_default_config.rb b/config/danbooru_default_config.rb index 759c09a1b..dbc137b25 100644 --- a/config/danbooru_default_config.rb +++ b/config/danbooru_default_config.rb @@ -288,6 +288,14 @@ module Danbooru nil end + def nijie_login + nil + end + + def nijie_password + nil + end + def amazon_ses # {:smtp_server_name => "smtp server", :user_name => "user name", :ses_smtp_user_name => "smtp user name", :ses_smtp_password => "smtp password"} nil