module Sources module Strategies class Nijie < Base def self.url_match?(url) url =~ /^https?:\/\/(?:.+?\.)?nijie\.info/ end def referer_url if @referer_url =~ /nijie\.info\/view\.php.+id=\d+/ && @url =~ /pic\d+\.nijie.info\/nijie_picture\// @referer_url else @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 page = agent.get(url) if page.search("div#header-login-container").any? # Session cache is invalid, clear it and log in normally. Cache.delete("nijie-session") @agent = nil page = agent.get(url) end @artist_name, @profile_url = get_profile_from_page(page) @image_url = get_image_url_from_page(page) @tags = get_tags_from_page(page) 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"].try(:sub, %r!^//!, "http://") 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 session = Cache.get("nijie-session") if session cookie = Mechanize::Cookie.new("NIJIEIJIEID", session) cookie.domain = ".nijie.info" cookie.path = "/" mech.cookie_jar.add(cookie) else 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 session = mech.cookie_jar.cookies.select{|c| c.name == "NIJIEIJIEID"}.first Cache.put("nijie-session", session.value, 1.month) if session 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