Class: Pixiv::Client
- Inherits:
-
Object
- Object
- Pixiv::Client
- Defined in:
- lib/pixiv/client.rb
Instance Attribute Summary collapse
- #agent ⇒ Mechanize::HTTP::Agent readonly
- #member_id ⇒ Integer readonly
Class Method Summary collapse
-
.new_agent ⇒ Mechanize::HTTP::Agent
A new agent.
Instance Method Summary collapse
- #bookmark_list(member_or_member_id = member_id, page_num = 1) ⇒ Object
- #bookmarks(member_or_member_id = member_id, page_num = 1) ⇒ Object
-
#download_illust(illust, io_or_filename, size = :original) ⇒ Object
Downloads the image to
io_or_filename
. -
#download_manga(illust, pattern) ⇒ Object
Downloads the images to
pattern
. - #illust(illust_id) ⇒ Pixiv::Illust
-
#initialize(*args) ⇒ Pixiv::Client
constructor
A new instance of Client, logged in with the given credentials.
-
#login(pixiv_id, password) ⇒ Object
Log in to Pixiv.
- #member(member_id = member_id) ⇒ Pixiv::Member
Constructor Details
#initialize(pixiv_id, password) {|agent| ... } ⇒ Pixiv::Client #initialize(agent) ⇒ Pixiv::Client
A new instance of Client, logged in with the given credentials
26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/pixiv/client.rb', line 26 def initialize(*args) if args.size < 2 @agent = args.first || self.class.new_agent yield @agent if block_given? ensure_logged_in else pixiv_id, password = *args @agent = self.class.new_agent yield @agent if block_given? login(pixiv_id, password) end end |
Instance Attribute Details
#agent ⇒ Mechanize::HTTP::Agent (readonly)
14 15 16 |
# File 'lib/pixiv/client.rb', line 14 def agent @agent end |
#member_id ⇒ Integer (readonly)
16 17 18 |
# File 'lib/pixiv/client.rb', line 16 def member_id @member_id end |
Class Method Details
.new_agent ⇒ Mechanize::HTTP::Agent
A new agent
5 6 7 8 9 10 11 |
# File 'lib/pixiv/client.rb', line 5 def self.new_agent agent = Mechanize.new agent.pluggable_parser['image/gif'] = Mechanize::Download agent.pluggable_parser['image/jpeg'] = Mechanize::Download agent.pluggable_parser['image/png'] = Mechanize::Download agent end |
Instance Method Details
#bookmark_list(member_or_member_id = member_id, page_num = 1) ⇒ Object
68 69 70 71 72 73 |
# File 'lib/pixiv/client.rb', line 68 def bookmark_list(member_or_member_id = member_id, page_num = 1) x = member_or_member_id member_id = x.is_a?(Member) ? x.member_id : x attrs = {member_id: member_id, page_num: page_num} BookmarkList.lazy_new(attrs) { agent.get(BookmarkList.url(member_id, page_num)) } end |
#bookmarks(member_or_member_id = member_id, page_num = 1) ⇒ Object
77 78 79 80 |
# File 'lib/pixiv/client.rb', line 77 def bookmarks(member_or_member_id = member_id, page_num = 1) list = bookmark_list(member_or_member_id, page_num) PageCollection::Enumerator.new(self, list) end |
#download_illust(illust, io_or_filename, size = :original) ⇒ Object
Downloads the image to io_or_filename
86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
# File 'lib/pixiv/client.rb', line 86 def download_illust(illust, io_or_filename, size = :original) size = {:s => :small, :m => :medium, :o => :original}[size] || size url = illust.__send__("#{size}_image_url") referer = case size when :small then nil when :medium then illust.url when :original then illust.original_image_referer else raise ArgumentError, "unknown size `#{size}`" end save_to = io_or_filename if save_to.is_a?(Array) save_to = filename_from_pattern(save_to, illust, url) end FileUtils.mkdir_p(File.dirname(save_to)) unless save_to.respond_to?(:write) @agent.download(url, save_to, [], referer) end |
#download_manga(illust, pattern) ⇒ Object
Note:
illust#manga? must be true
Downloads the images to pattern
107 108 109 110 111 112 113 |
# File 'lib/pixiv/client.rb', line 107 def download_manga(illust, pattern) illust.original_image_urls.each do |url| filename = filename_from_pattern(pattern, illust, url) FileUtils.mkdir_p(File.dirname(filename)) @agent.download(url, filename, [], illust.original_image_referer) end end |
#illust(illust_id) ⇒ Pixiv::Illust
54 55 56 57 |
# File 'lib/pixiv/client.rb', line 54 def illust(illust_id) attrs = {illust_id: illust_id} Illust.lazy_new(attrs) { agent.get(Illust.url(illust_id)) } end |
#login(pixiv_id, password) ⇒ Object
Log in to Pixiv
42 43 44 45 46 47 48 49 50 |
# File 'lib/pixiv/client.rb', line 42 def login(pixiv_id, password) form = agent.get("#{ROOT_URL}/index.php").forms_with(:class => 'login-form').first raise Error::LoginFailed, 'login form is not available' unless form form.pixiv_id = pixiv_id form.pass = password doc = agent.submit(form) raise Error::LoginFailed unless doc.body =~ /logout/ @member_id = member_id_from_mypage(doc) end |
#member(member_id = member_id) ⇒ Pixiv::Member
61 62 63 64 |
# File 'lib/pixiv/client.rb', line 61 def member(member_id = member_id) attrs = {member_id: member_id} Member.lazy_new(attrs) { agent.get(Member.url(member_id)) } end |