pixiv 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -32,6 +32,38 @@ Or install it yourself as:
32
32
 
33
33
  $ gem install pixiv
34
34
 
35
+ ## Synopsis
36
+
37
+ ```ruby
38
+
39
+ pixiv = Pixiv.client('pixiv_id', 'password') {|agent|
40
+ agent.user_agent_alias = 'Mac Safari'
41
+ }
42
+
43
+ illust_id = 123
44
+ illust = pixiv.illust(illust_id)
45
+ if illust.manga?
46
+ pixiv.download_manga(illust, ['manga/', :image_name])
47
+ else
48
+ pixiv.download_illust(illust, ['illust/', :image_name])
49
+ end
50
+
51
+ member_id = 456
52
+ member = pixiv.member(member_id)
53
+ member.works.each do |illust|
54
+ puts illust.title
55
+ puts illust.caption
56
+ end
57
+
58
+ me = pixiv.member
59
+ me.bookmarks do |illust|
60
+ author = illust.member
61
+ puts author.name
62
+ puts author.works.count
63
+ end
64
+
65
+ ```
66
+
35
67
  ## Usage
36
68
 
37
69
  See [a sample script](https://gist.github.com/4362297)
@@ -51,6 +51,14 @@ def PBL(p = 1)
51
51
  $pixiv.private_bookmark_list(p)
52
52
  end
53
53
 
54
+ def SRL(query, opts = {})
55
+ $pixiv.search_result_list(query, opts)
56
+ end
57
+
58
+ def Is(list)
59
+ $pixiv.illusts(list)
60
+ end
61
+
54
62
  def Ws(member)
55
63
  $pixiv.works(member)
56
64
  end
@@ -58,3 +66,7 @@ end
58
66
  def Bs(member)
59
67
  $pixiv.bookmarks(member)
60
68
  end
69
+
70
+ def S(query, opts = {})
71
+ $pixiv.search(query, opts)
72
+ end
@@ -1,4 +1,5 @@
1
1
  require 'mechanize'
2
+ require 'uri'
2
3
 
3
4
  module Pixiv
4
5
  autoload :BookmarkList, 'pixiv/bookmark_list'
@@ -11,6 +12,7 @@ module Pixiv
11
12
  autoload :Page, 'pixiv/page'
12
13
  autoload :PageCollection, 'pixiv/page_collection'
13
14
  autoload :PrivateBookmarkList, 'pixiv/bookmark_list'
15
+ autoload :SearchResultList, 'pixiv/search_result_list'
14
16
  autoload :WorkList, 'pixiv/work_list'
15
17
 
16
18
  ROOT_URL = 'http://www.pixiv.net'
@@ -8,7 +8,7 @@ module Pixiv
8
8
  # @return [Integer]
9
9
  lazy_attr_reader(:total_count) {
10
10
  node = at!('a[href="/bookmark.php?type=illust_all"]')
11
- node.inner_text.match(/\d+/).to_s.to_i
11
+ node.inner_text[/\d+/].to_i
12
12
  }
13
13
  # @return [Array<Hash{Symbol=>Object}, nil>]
14
14
  lazy_attr_reader(:page_hashes) {
@@ -26,12 +26,12 @@ module Pixiv
26
26
  return nil if node.at('img[src*="limit_unknown_s.png"]')
27
27
  member_node = node.at('a[href^="member_illust.php?id="]')
28
28
  illust_node = node.at('a')
29
- illust_id = illust_node['href'].match(/illust_id=(\d+)/).to_a[1].to_i
29
+ illust_id = illust_node['href'][/illust_id=(\d+)/, 1].to_i
30
30
  {
31
31
  url: Illust.url(illust_id),
32
32
  illust_id: illust_id,
33
33
  title: illust_node.inner_text,
34
- member_id: member_node['href'].match(/\?id=(\d+)/).to_a[1].to_i,
34
+ member_id: member_node['href'][/\?id=(\d+)/, 1].to_i,
35
35
  member_name: member_node.inner_text,
36
36
  small_image_url: illust_node.at('img')['src'],
37
37
  }
@@ -83,12 +83,19 @@ module Pixiv
83
83
  end
84
84
 
85
85
  # @param [Pixiv::Member, Integer] member_or_id
86
- # @param [Integer] page_num
86
+ # @param [Integer] page
87
87
  # @return [Pixiv::PrivateBookmarkList] private bookmark list bound to +self+
88
88
  def private_bookmark_list(member_or_id = member_id, page = 1)
89
89
  illust_list_with_class(PrivateBookmarkList, member_or_id, page)
90
90
  end
91
91
 
92
+ def search_result_list(query, opts = {})
93
+ attrs = {query: query, search_opts: opts}
94
+ SearchResultList.lazy_new(attrs) {
95
+ agent.get(SearchResultList.url(query, opts))
96
+ }.bind(self)
97
+ end
98
+
92
99
  # @param [Pixiv::IllustList] list
93
100
  # @!macro [new] opts_and_return
94
101
  # @param [Hash] opts
@@ -119,6 +126,11 @@ module Pixiv
119
126
  illusts(private_bookmark_list(member_id, page), opts)
120
127
  end
121
128
 
129
+ # (see {SearchResultList.url})
130
+ def search(query, opts = {})
131
+ illusts(search_result_list(query, opts))
132
+ end
133
+
122
134
  # Downloads the image to +io_or_filename+
123
135
  # @param [Pixiv::Illust] illust
124
136
  # @param [#write, String, Array<String, Symbol, #call>] io_or_filename io or filename or pattern for {#filename_from_pattern}
@@ -209,7 +221,7 @@ module Pixiv
209
221
  end
210
222
 
211
223
  def member_id_from_mypage(doc)
212
- doc.at('.profile_area a')['href'].match(/\d+$/).to_s.to_i
224
+ doc.at('.profile_area a')['href'][/\d+$/].to_i
213
225
  end
214
226
  end
215
227
 
@@ -2,5 +2,6 @@ module Pixiv
2
2
  class Error < StandardError; end
3
3
  class Error::LoginFailed < Error; end
4
4
  class Error::NodeNotFound < Error; end
5
+ class Error::OutOfBounds < Error; end
5
6
  end
6
7
 
@@ -2,6 +2,9 @@
2
2
 
3
3
  module Pixiv
4
4
  class Illust < Page
5
+ # @!parse
6
+ # include ::Pixiv::Illust::WithClient
7
+
5
8
  # Returns the URL for given +illust_id+
6
9
  # @param [Integer] illust_id
7
10
  # @return [String]
@@ -28,14 +31,16 @@ module Pixiv
28
31
  lazy_attr_reader(:member_id) { at!('#rpc_u_id')['title'].to_i }
29
32
  # @return [String]
30
33
  lazy_attr_reader(:member_name) {
31
- at!('title').inner_text.match(%r!^「#{Regexp.escape(title)}」/「(.+)」の(?:イラスト|漫画) \[pixiv\]$!).to_a[1]
34
+ # Note: generally member_name can easily be found at +at('.profile_area a')['title']+
35
+ # but this is not the case on your own illust page; so this hack.
36
+ at!('title').inner_text[%r!^「#{Regexp.escape(title)}」/「(.+)」の(?:イラスト|漫画) \[pixiv\]$!, 1]
32
37
  }
33
38
  # @return [String]
34
39
  lazy_attr_reader(:title) { at!('.work-info h1.title').inner_text }
35
40
  # @return [Integer, nil]
36
41
  lazy_attr_reader(:num_pages) {
37
42
  node = doc.at('//ul[@class="meta"]/li[2]')
38
- n = node ? node.inner_text.match(/(\d+)P$/).to_a[1] : nil
43
+ n = node ? node.inner_text[/(\d+)P$/, 1] : nil
39
44
  n && n.to_i
40
45
  }
41
46
  # @return [Array<String>]
@@ -53,6 +58,8 @@ module Pixiv
53
58
  lazy_attr_reader(:score) { at!('.score-count').inner_text.to_i }
54
59
 
55
60
  alias id illust_id
61
+ alias author_id member_id
62
+ alias author_name member_name
56
63
  alias original_image_referrer original_image_referer # referrer vs. referer
57
64
 
58
65
  # @return [String]
@@ -74,19 +81,26 @@ module Pixiv
74
81
  end
75
82
 
76
83
  module Illust::WithClient
77
- include Page::WithClient
84
+ include ::Pixiv::Page::WithClient
78
85
 
79
86
  # @return [Pixiv::Member]
80
87
  def member
81
- client.member(member_id)
88
+ attrs = {member_id: member_id, member_name: member_name}
89
+ Member.lazy_new(attrs) { client.agent.get(Member.url(member_id)) }
82
90
  end
83
91
 
84
- # (see Pixiv::Client#download_illust)
92
+ alias author member
93
+
94
+ # Download illust
95
+ #
96
+ # See {Pixiv::Client#download_illust} for the detail.
85
97
  def download_illust(io_or_filename, size = :original)
86
98
  client.download_illust(self, io_or_filename, size)
87
99
  end
88
100
 
89
- # (see Pixiv::Client#download_manga)
101
+ # Download manga
102
+ #
103
+ # See {Pixiv::Client#download_manga} for the detail.
90
104
  def download_manga(pattern, &block)
91
105
  client.download_manga(self, pattern, &block)
92
106
  end
@@ -1,7 +1,18 @@
1
1
  module Pixiv
2
2
  # @abstract
3
3
  class IllustList < Page
4
- include PageCollection
4
+ # @!parse
5
+ # include ::Pixiv::IllustList::WithClient
6
+
7
+ include ::Pixiv::PageCollection
8
+
9
+ def doc
10
+ unless @doc
11
+ super
12
+ check_bounds!
13
+ end
14
+ @doc
15
+ end
5
16
 
6
17
  # @return [Integer]
7
18
  attr_reader :page
@@ -22,18 +33,17 @@ module Pixiv
22
33
  page_hashes
23
34
  end
24
35
 
25
- # Ditto.
36
+ protected
26
37
 
27
- # URLs extracted from doc
28
- # @return [Array<{Symbol=>Object}, nil>]
29
- def illust_urls
30
- page_urls
38
+ def check_bounds!
39
+ max_page = total_count / max_size + 1
40
+ raise Error::OutOfBounds unless (1..max_page).include?(page)
31
41
  end
32
42
  end
33
43
 
34
44
  module IllustList::WithClient
35
- include Page::WithClient
36
- include Enumerable
45
+ include ::Pixiv::Page::WithClient
46
+ include ::Enumerable
37
47
 
38
48
  # @yieldparam [Illust] illust
39
49
  def each
@@ -42,5 +52,16 @@ module Pixiv
42
52
  yield Illust.lazy_new(attrs) { client.agent.get(url) }
43
53
  end
44
54
  end
55
+
56
+ # @return [Illust, nil]
57
+ def next
58
+ return if last?
59
+ self.class.lazy_new(next_attrs) { client.agent.get(next_url) }
60
+ end
61
+
62
+ def prev
63
+ return if first?
64
+ self.class.lazy_new(next_attrs) { client.agent.get(prev_url) }
65
+ end
45
66
  end
46
- end
67
+ end
@@ -1,5 +1,8 @@
1
1
  module Pixiv
2
2
  class Member < Page
3
+ # @!parse
4
+ # include ::Pixiv::Member::WithClient
5
+
3
6
  # Returns the URL for given +member_id+
4
7
  # @param [Integer] member_id
5
8
  # @return [String]
@@ -11,8 +14,11 @@ module Pixiv
11
14
  lazy_attr_reader(:name) { at!('.profile_area h2').inner_text }
12
15
  # @return [Integer]
13
16
  lazy_attr_reader(:member_id) { at!('input[name="user_id"]')['value'].to_i }
14
- # return [Integer]
15
- lazy_attr_reader(:pixiv_id) { at!('.profile_area img')['src'].match(%r{/profile/([a-z_-]+)/}).to_a[1] }
17
+ # @return [Integer]
18
+ lazy_attr_reader(:pixiv_id) { profile_image_url[%r{/profile/([a-z_-]+)/}, 1] }
19
+ # @return [String]
20
+ lazy_attr_reader(:profile_image_url) { at!('.profile_area img')['src'] }
21
+
16
22
 
17
23
  alias id member_id
18
24
 
@@ -21,16 +27,30 @@ module Pixiv
21
27
  end
22
28
 
23
29
  module Member::WithClient
24
- include Page::WithClient
30
+ include ::Pixiv::Page::WithClient
31
+
32
+ def work_list(page = 1)
33
+ client.work_list(self, page)
34
+ end
35
+
36
+ def bookmark_list(page = 1)
37
+ client.bookmark_list(self, page)
38
+ end
39
+
40
+ def private_bookmark_list(page = 1)
41
+ client.private_bookmark_list(self, page)
42
+ end
43
+
44
+ def works(page = 1, &block)
45
+ client.works(self, page, &block)
46
+ end
25
47
 
26
- # (see Pixiv::Client#bookmark_list)
27
- def bookmark_list(page_num = 1)
28
- client.bookmark_list(self, page_num)
48
+ def bookmarks(page = 1, &block)
49
+ client.bookmarks(self, page, &block)
29
50
  end
30
51
 
31
- # (see Pixiv::Client#bookmarks)
32
- def bookmarks(page_num = 1, &block)
33
- client.bookmarks(self, page_num, &block)
52
+ def private_bookmarks(page = 1, &block)
53
+ client.private_bookmarks(page, &block)
34
54
  end
35
55
  end
36
56
  end
@@ -5,6 +5,11 @@ module Pixiv
5
5
  #
6
6
  # Implements common methods for bookmark.php and member_illust.php.
7
7
  class OwnedIllustList < IllustList
8
+ # @!parse
9
+ # include ::Pixiv::OwnedIllustList::WithClient
10
+
11
+ ILLUSTS_PER_PAGE = 20
12
+
8
13
  # Returns the URL for given +member_id+ and +page+
9
14
  # @param [Integer] member_id
10
15
  # @param [Integer] page
@@ -23,7 +28,7 @@ module Pixiv
23
28
  }
24
29
  # @return [Integer]
25
30
  lazy_attr_reader(:member_id) {
26
- doc.body.match(/pixiv\.context\.userId = '(\d+)'/).to_a[1].to_i
31
+ doc.body[/pixiv\.context\.userId = '(\d+)'/, 1].to_i
27
32
  }
28
33
 
29
34
  # @return [String]
@@ -45,14 +50,25 @@ module Pixiv
45
50
  def prev_url
46
51
  first? ? nil : self.class.url(member_id, page - 1)
47
52
  end
53
+
54
+ # @return [Integer]
55
+ def max_size
56
+ ILLUSTS_PER_PAGE
57
+ end
58
+
59
+ # @!parse alias owner_id member_id
60
+ def owner_id; member_id end
48
61
  end
49
62
 
50
63
  module OwnedIllustList::WithClient
51
- include IllustList::WithClient
64
+ include ::Pixiv::IllustList::WithClient
52
65
 
53
66
  # @return [Pixiv::Member]
54
67
  def member
55
68
  client.member(member_id)
56
69
  end
70
+
71
+ # @!parse alias owner member
72
+ def owner; member end
57
73
  end
58
74
  end
@@ -1,5 +1,8 @@
1
1
  module Pixiv
2
2
  class Page
3
+ # @!parse
4
+ # include ::Pixiv::Page::WithClient
5
+
3
6
  # A new Page
4
7
  # @param [Hash{Symbol=>Object}] attrs
5
8
  # @yieldreturn [Nokogiri::XML::Document]
@@ -24,6 +24,14 @@ module Pixiv
24
24
  not_implemented!
25
25
  end
26
26
 
27
+ def next_attrs
28
+ {}
29
+ end
30
+
31
+ def prev_attrs
32
+ {}
33
+ end
34
+
27
35
  def page_class
28
36
  not_implemented!
29
37
  end
@@ -32,10 +40,6 @@ module Pixiv
32
40
  not_implemented!
33
41
  end
34
42
 
35
- def page_urls
36
- page_hashes.map {|h| h[:url] }
37
- end
38
-
39
43
  def size
40
44
  page_hashes.size
41
45
  end
@@ -84,15 +88,18 @@ module Pixiv
84
88
  loop do
85
89
  yield collection
86
90
  next_url = collection.next_url or break
87
- collection = collection.class.lazy_new { @client.agent.get(next_url) }
91
+ next_attrs = collection.next_attrs
92
+ collection = collection.class.lazy_new(next_attrs) { @client.agent.get(next_url) }
88
93
  end
89
94
  end
90
95
 
91
- def count(*item)
92
- if item.empty? && !block_given? && @collection.respond_to?(:total_count)
93
- @collection.total_count
96
+ def size
97
+ if @collection.first? && @collection.respond_to?(:total_count)
98
+ @collection.total_count
99
+ elsif @collection.respond_to?(:max_size) && @collection.respond_to?(:total_count)
100
+ @collection.total_count - (@collection.max_size * (@collection.page - 1))
94
101
  else
95
- super
102
+ count { true }
96
103
  end
97
104
  end
98
105
 
@@ -0,0 +1,128 @@
1
+ module Pixiv
2
+ class SearchResultList < IllustList
3
+ ILLUSTS_PER_PAGE = 20
4
+
5
+ =begin Coming Real Soon Now
6
+ # @param [String, Array<query>, Set<query>] query
7
+ #
8
+ # @option opts [query, nil] :tag (nil) same as +url(query, mode: :tag)+
9
+ # @option opts [query, nil] :word (nil) same as +url(query, mode: :word)+
10
+ # @option opts [:tag, :word] :mode (:tag)
11
+ # @option opts [Boolean] :exact (false) perform exact match (for tag mode only)
12
+ #
13
+ # @option opts [:illust, :manga, :both, nil] :type (nil)
14
+ # * +:illust+: search only for non-manga illust
15
+ # *+:manga+: search only for manga
16
+ # * +:both+ or +nil+: search for the both type
17
+ #
18
+ # @option opts [:tall, :wide, :square, nil] :ratio (nil)
19
+ # @option opts [String, nil] :tool tool name
20
+ # @option opts [Boolean] :r18 (false) X-rated only
21
+ # @option opts [Date, nil] :since (nil)
22
+ # @option opts [Integer, nil] :page (nil)
23
+ #
24
+ # @option opts [Array<(Integer, Integer)>, nil] :max_size (nil)
25
+ # maximum size as +[width, height]+ (either +width+ or +height+ can be +nil+)
26
+ # @option opts [Array<(Integer, Integer)>, nil] :min_size (nil)
27
+ # minimum size as +[width, height]+ (either +width+ or +height+ can be +nil+)
28
+ # @option opts [:small, :medium, :large, nil] :size (nil)
29
+ # * +:small+ for +:max_size => [1000, 1000]+
30
+ # * +:medium+ for +:max_size => [3000, 3000], :min_size => [1001, 1001]+
31
+ # * +:large+ for +:min_size => +[3001, 3001]+
32
+ #
33
+ # @example
34
+ # s = SearchResultList
35
+ # # Query
36
+ # s.url('tag1')
37
+ # s.url(%w[tag1 tag2]) # tag1 AND tag2
38
+ # s.url([Set.new('tag1', 'tag2'), 'tag3']) # (tag1 OR tag2) AND tag3
39
+ # # Mode
40
+ # s.url(%w[tag1 tag2]) # implicitly searches by tags
41
+ # s.url(%w[tag1 tag2], mode: :tag) # or explicitly
42
+ # s.url(tag: %w[tag1 tag2]) # same as above
43
+ # s.url('word', mode: :word) # searches by words
44
+ # s.url(word: 'word') # same as above
45
+ # # Options
46
+ # # s.url(%w[tag1 tag2], exact: true, type: :illust, r18: false, size: :large)
47
+ #
48
+ =end
49
+
50
+ #
51
+ def self.url(query, opts = {})
52
+ word = URI::encode_www_form({word: query})
53
+ "#{ROOT_URL}/search.php?s_mode=s_tag&#{word}&p=#{opts[:page] || 1}" # FIXME
54
+ end
55
+
56
+ def initialize(doc_or_doc_creator, attrs = {})
57
+ raise ArgumentError, "`attrs[:query]' must be present" unless attrs[:query]
58
+ raise ArgumentError, "`attrs[:search_opts]' must be present" unless attrs[:search_opts]
59
+ super
60
+ end
61
+
62
+ attr_reader :query
63
+ attr_reader :search_opts
64
+
65
+ lazy_attr_reader(:page) {
66
+ at!('.pager li.current').inner_text.to_i
67
+ }
68
+ lazy_attr_reader(:last?) {
69
+ doc.at('//nav[@class="pager"]//a[@rel="next"]').nil?
70
+ }
71
+ lazy_attr_reader(:total_count) {
72
+ at!('.info > .count').inner_text.to_i
73
+ }
74
+ lazy_attr_reader(:page_hashes) {
75
+ search!('#search-result li.image').map {|n| hash_from_list_item(n) }
76
+ }
77
+
78
+ def url
79
+ self.class.url(query, search_opts)
80
+ end
81
+
82
+ def first?
83
+ page == 1
84
+ end
85
+
86
+ def next_url
87
+ return if last?
88
+ opts = search_opts.dup
89
+ opts[:page] = page + 1
90
+ self.class.url(query, opts)
91
+ end
92
+
93
+ def prev_url
94
+ return if first?
95
+ opts = query_opts.dup
96
+ opts[:page] = page - 1
97
+ self.class.url(query, opts)
98
+ end
99
+
100
+ def next_attrs
101
+ {query: query, search_opts: search_opts, page: page + 1}
102
+ end
103
+
104
+ def prev_attrs
105
+ {query: query, search_opts: search_opts, page: page - 1}
106
+ end
107
+
108
+ def max_size
109
+ ILLUSTS_PER_PAGE
110
+ end
111
+
112
+ private
113
+
114
+ def hash_from_list_item(node)
115
+ member_node = node.at('p.user a')
116
+ illust_node = node.at('a')
117
+ illust_id = illust_node['href'][/illust_id=(\d+)/, 1].to_i
118
+ {
119
+ url: Illust.url(illust_id),
120
+ illust_id: illust_id,
121
+ title: illust_node.at('h2').inner_text,
122
+ member_id: member_node['href'][/\?id=(\d+)/, 1].to_i,
123
+ member_name: member_node.inner_text,
124
+ small_image_url: illust_node.at('img')['src'],
125
+ }
126
+ end
127
+ end
128
+ end
@@ -1,3 +1,3 @@
1
1
  module Pixiv
2
- VERSION = "0.0.4"
2
+ VERSION = "0.0.5"
3
3
  end
@@ -8,7 +8,7 @@ module Pixiv
8
8
  # @return [Integer]
9
9
  lazy_attr_reader(:total_count) {
10
10
  node = at!('.layout-cell .count-badge')
11
- node.inner_text.match(/\d+/).to_s.to_i
11
+ node.inner_text[/\d+/].to_i
12
12
  }
13
13
  # @return [Array<Hash{Symbol=>Object}, nil>]
14
14
  lazy_attr_reader(:page_hashes) {
@@ -24,7 +24,7 @@ module Pixiv
24
24
  def hash_from_list_item(node)
25
25
  return nil if node.at('img[src*="limit_unknown_s.png"]')
26
26
  illust_node = node.at('a')
27
- illust_id = illust_node['href'].match(/illust_id=(\d+)/).to_a[1].to_i
27
+ illust_id = illust_node['href'][/illust_id=(\d+)/, 1].to_i
28
28
  {
29
29
  url: Illust.url(illust_id),
30
30
  illust_id: illust_id,
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pixiv
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-12-26 00:00:00.000000000 Z
12
+ date: 2012-12-27 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: mechanize
@@ -99,6 +99,7 @@ files:
99
99
  - lib/pixiv/owned_illust_list.rb
100
100
  - lib/pixiv/page.rb
101
101
  - lib/pixiv/page_collection.rb
102
+ - lib/pixiv/search_result_list.rb
102
103
  - lib/pixiv/version.rb
103
104
  - lib/pixiv/work_list.rb
104
105
  - pixiv.gemspec
@@ -121,12 +122,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
121
122
  - - ! '>='
122
123
  - !ruby/object:Gem::Version
123
124
  version: '0'
125
+ segments:
126
+ - 0
127
+ hash: -4267183313172500808
124
128
  required_rubygems_version: !ruby/object:Gem::Requirement
125
129
  none: false
126
130
  requirements:
127
131
  - - ! '>='
128
132
  - !ruby/object:Gem::Version
129
133
  version: '0'
134
+ segments:
135
+ - 0
136
+ hash: -4267183313172500808
130
137
  requirements: []
131
138
  rubyforge_project:
132
139
  rubygems_version: 1.8.24
@@ -141,4 +148,3 @@ test_files:
141
148
  - spec/pixiv/member_spec.rb
142
149
  - spec/pixiv/page_spec.rb
143
150
  - spec/spec_helper.rb
144
- has_rdoc: