google-play 0.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. data/lib/google-play-class.rb +219 -0
  2. data/lib/google-play.rb +33 -0
  3. metadata +57 -0
@@ -0,0 +1,219 @@
1
+ require 'open-uri'
2
+ require 'nokogiri'
3
+
4
+ class PlayResult
5
+ attr_accessor :id, :type, :title, :price, :rating, :description, :thumbnail, :actors, :lengthtime, :contentrating, :genre, :related
6
+
7
+ def initialize(id,type,title)
8
+ @id=id
9
+ @type=type
10
+ @title=title
11
+ @price=""
12
+ @rating=""
13
+ @description=""
14
+ @thumbnail=""
15
+ @actors=Array.new
16
+ @lengthtime=""
17
+ @contentrating=""
18
+ @genre=""
19
+ @related=Array.new
20
+ fillPlayData(id,type,title)
21
+ end
22
+
23
+ def fillPlayData(id,type,title)
24
+ doc = Nokogiri::HTML(open("https://play.google.com/store/#{type}/details?id=#{id}"))
25
+ get_price(doc)
26
+ get_rating(doc)
27
+ get_description(doc)
28
+ get_thumbnail(doc)
29
+ get_actors(doc)
30
+ get_lengthtime(doc)
31
+ get_contentrating(doc)
32
+ get_genre(doc)
33
+ get_related(doc)
34
+ end
35
+ def get_title(doc)
36
+ if @title == ""
37
+ @title = doc.css('div.doc-header-content h1.doc-header-title').text
38
+ end
39
+ end
40
+ def get_price(doc)
41
+ if doc.css('.buy-wrapper .buy-border a.buy-link .buy-button-price').length != 0
42
+ @price = doc.css('.buy-wrapper .buy-border a.buy-link .buy-button-price')[0].text
43
+ end
44
+ end
45
+
46
+ def get_rating(doc)
47
+ if doc.css('.doc-details-ratings-price div div.ratings').length != 0
48
+ @rating = doc.css('.doc-details-ratings-price div div.ratings')[0]['title']
49
+ end
50
+ end
51
+
52
+ def get_description(doc)
53
+ if doc.css('div#doc-original-text').length != 0
54
+ @description = doc.css('div#doc-original-text').text
55
+ end
56
+ end
57
+
58
+ def get_thumbnail(doc)
59
+ if doc.css('div.doc-banner-icon img').length != 0
60
+ @thumbnail = doc.css('div.doc-banner-icon img')[0]['src']
61
+ end
62
+ end
63
+
64
+ def get_actors(doc)
65
+ if doc.css('td.credit-cell span[itemprop=actors] a span').length != 0
66
+ doc.css('td.credit-cell span[itemprop=actors] a span').each{ |value|
67
+ @actors << value.text.to_s
68
+ }
69
+ end
70
+ end
71
+
72
+ def get_lengthtime(doc)
73
+ if doc.css('dl.doc-metadata-list dd').length != 0
74
+ doc.css('dl.doc-metadata-list dd').each{ |value|
75
+ if value.text.to_s =~ /minutes/
76
+ @lengthtime = value.text.to_s
77
+ end
78
+ }
79
+ end
80
+ end
81
+
82
+ def get_contentrating(doc)
83
+ if doc.css('dd[itemprop=contentRating]').length != 0
84
+ @contentrating = doc.css('dd[itemprop=contentRating]').text
85
+ end
86
+ end
87
+
88
+ def get_genre(doc)
89
+ if doc.css('ul.doc-genres .doc-genre-link a:first-child').length != 0
90
+ @genre = doc.css('ul.doc-genres .doc-genre-link a:first-child').text
91
+ end
92
+ end
93
+
94
+ def get_related(doc)
95
+ if doc.css('div#related-list ul.snippet-list li div div.details a.title').length != 0
96
+ doc.css('div#related-list ul.snippet-list li div div.details a.title').each{ |value|
97
+ @related << value.text.to_s
98
+ }
99
+ end
100
+ end
101
+ end
102
+
103
+ class SearchResult
104
+ attr_accessor :id, :type, :title, :price, :rating, :description, :thumbnail
105
+
106
+ def initialize(query,type,list)
107
+ @id=""
108
+ @type=type
109
+ @title=""
110
+ @price=""
111
+ @rating=""
112
+ @description=""
113
+ @thumbnail=""
114
+ fillSearchData(query,type,list)
115
+ end
116
+
117
+ def fillSearchData(id,type,list)
118
+ get_id(list)
119
+ get_title(list)
120
+ get_price(list)
121
+ get_rating(list)
122
+ get_description(list)
123
+ get_thumbnail(list)
124
+ end
125
+
126
+ def get_id(doc)
127
+ @id = doc['data-docid']
128
+ end
129
+
130
+ def get_title(doc)
131
+ if doc.css('a.title').length != 0
132
+ @title = doc.css('a.title').text
133
+ end
134
+ end
135
+
136
+ def get_price(doc)
137
+ if doc.css('span.buy-button-price').length != 0
138
+ @price = doc.css('span.buy-button-price').text
139
+ end
140
+ end
141
+
142
+ def get_rating(doc)
143
+ if doc.css('div.ratings-wrapper .ratings').length != 0
144
+ @rating = doc.css('div.ratings-wrapper .ratings')[0]['title']
145
+ else
146
+ @rating = "None"
147
+ end
148
+ end
149
+
150
+ def get_description(doc)
151
+ if doc.css('div.description').length != 0
152
+ @description = doc.css('div.description').text
153
+ end
154
+ end
155
+
156
+ def get_thumbnail(doc)
157
+ if doc.css('.thumbnail-wrapper .thumbnail img').length != 0
158
+ @thumbnail = doc.css('.thumbnail-wrapper .thumbnail img')[0]['src']
159
+ end
160
+ end
161
+ end
162
+
163
+ class TopResult
164
+ attr_accessor :id, :type, :title, :price, :artist, :explicit, :thumbnail
165
+
166
+ def initialize(type,list)
167
+ @id=""
168
+ @type=type
169
+ @title=""
170
+ @price=""
171
+ if type == "music" then @artist="" end
172
+ @explicit=""
173
+ @thumbnail=""
174
+ fillSearchData(type,list)
175
+ end
176
+
177
+ def fillSearchData(type,list)
178
+ get_id(list)
179
+ get_title(list)
180
+ get_price(list)
181
+ get_artist(list)
182
+ get_explicit(list)
183
+ get_thumbnail(list)
184
+ end
185
+
186
+ def get_id(doc)
187
+ @id = doc['data-docid']
188
+ end
189
+
190
+ def get_title(doc)
191
+ if doc.css('a.title').length != 0
192
+ @title = doc.css('a.title')[0]['title']
193
+ end
194
+ end
195
+
196
+ def get_price(doc)
197
+ if doc.css('span.buy-button-price').length != 0
198
+ @price = doc.css('span.buy-button-price').text
199
+ end
200
+ end
201
+
202
+ def get_artist(doc)
203
+ if doc.css('span.attribution div a').length != 0
204
+ @artist = doc.css('span.attribution div a').text
205
+ end
206
+ end
207
+
208
+ def get_explicit(doc)
209
+ if doc.css('.explicit').length != 0
210
+ @explicit = 1
211
+ end
212
+ end
213
+
214
+ def get_thumbnail(doc)
215
+ if doc.css('.thumbnail-wrapper .thumbnail img').length != 0
216
+ @thumbnail = doc.css('.thumbnail-wrapper .thumbnail img')[0]['src']
217
+ end
218
+ end
219
+ end
@@ -0,0 +1,33 @@
1
+ require 'open-uri'
2
+ require 'uri'
3
+ require 'nokogiri'
4
+ require './google-play-class.rb'
5
+
6
+ # TODO: Build whitelist of types to search for and check type on submit. Also add pagination
7
+ module GooglePlay
8
+ def self.search(query,type,page)
9
+ results = Array.new
10
+ doc = Nokogiri::HTML(open("https://play.google.com/store/search?q=#{URI.escape(query)}&c=#{URI.escape(type)}"))
11
+ doc.css('ul.search-results-list li.search-results-item').each{ |list|
12
+ results << SearchResult.new(query,type,list)
13
+ }
14
+ return results
15
+ end
16
+ def self.info(id,type)
17
+ doc = Nokogiri::HTML(open("https://play.google.com/store/#{URI.escape(type)}/details?id=#{URI.escape(id)}"))
18
+ return PlayResult.new(id,type,doc.css('h1.doc-banner-title').text)
19
+ end
20
+ def self.top(type)
21
+ results = Array.new
22
+ if type == "music"
23
+ url = "https://play.google.com/store/music/collection/topselling_paid_album"
24
+ else type == "movie"
25
+ url = "https://play.google.com/store/movies/collection/topselling_paid"
26
+ end
27
+ doc = Nokogiri::HTML(open(url))
28
+ doc.css('ul.container-snippet-list li').each{ |list|
29
+ results << TopResult.new(type,list)
30
+ }
31
+ return results
32
+ end
33
+ end
metadata ADDED
@@ -0,0 +1,57 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: google-play
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.5
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Tom Doyle
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-03-06 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: nokogiri
16
+ requirement: &70315623457760 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: 1.5.0
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *70315623457760
25
+ description: A simple gem for grabbing Google Play data
26
+ email: me@tdoyle.me
27
+ executables: []
28
+ extensions: []
29
+ extra_rdoc_files: []
30
+ files:
31
+ - lib/google-play-class.rb
32
+ - lib/google-play.rb
33
+ homepage: https://github.com/tdoyle/Google-Play-Unofficial-Gem/
34
+ licenses: []
35
+ post_install_message:
36
+ rdoc_options: []
37
+ require_paths:
38
+ - lib
39
+ required_ruby_version: !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ! '>='
43
+ - !ruby/object:Gem::Version
44
+ version: '0'
45
+ required_rubygems_version: !ruby/object:Gem::Requirement
46
+ none: false
47
+ requirements:
48
+ - - ! '>='
49
+ - !ruby/object:Gem::Version
50
+ version: '0'
51
+ requirements: []
52
+ rubyforge_project:
53
+ rubygems_version: 1.8.15
54
+ signing_key:
55
+ specification_version: 3
56
+ summary: Grab data from Google Play
57
+ test_files: []