market_bot 1.2.0 → 1.3.0
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.
- checksums.yaml +5 -5
- data/.travis.yml +4 -3
- data/CHANGELOG.md +12 -0
- data/bin/update_test_data +1 -0
- data/lib/market_bot/play/app/constants.rb +6 -0
- data/lib/market_bot/play/app.rb +29 -14
- data/lib/market_bot/version.rb +1 -1
- data/spec/market_bot/play/app_spec.rb +44 -5
- data/spec/market_bot/play/data/app-com.bluefroggaming.popdat.txt +26 -27
- data/spec/market_bot/play/data/app-com.hasbro.mlpcoreAPPSTORE.txt +97 -0
- data/spec/market_bot/play/data/app-com.mg.android.txt +27 -28
- data/spec/market_bot/play/data/chart-jp-ja-topselling_paid-BUSINESS-0.txt +25 -26
- data/spec/market_bot/play/data/chart-jp-ja-topselling_paid-BUSINESS-1.txt +25 -26
- data/spec/market_bot/play/data/chart-topselling_paid-GAME_ARCADE-0.txt +25 -26
- data/spec/market_bot/play/data/chart-topselling_paid-GAME_ARCADE-1.txt +25 -26
- data/spec/market_bot/play/data/developer-zynga.txt +25 -26
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: b69851827593453db81b7f914d288d76587b61c3cd110cc5278abc60e3d65e62
|
4
|
+
data.tar.gz: 1cf502f15dac6a0fcac41f342416874c6b9ff4a1ed7747b1c2c435c534d450e1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 873aadfacea67683ddf4e8b404c25bb7c888e20e4b4b35f3513fb794089452b666f0036888b431e96fb719fd4f48404536b0808a27b400aeaa21a6f3aca4a208
|
7
|
+
data.tar.gz: 248f43a7d5298f3c8fa7726d10b41f9f390da6307c3cd0244691f538edc135ead99d7a835af9a6f1771e9cd6b8d10f2e4cd5bf16d7b9d9e608d1ab2e8d048b75
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,17 @@
|
|
1
1
|
# Change Log
|
2
2
|
|
3
|
+
## [1.3.0] - 2017-09-26
|
4
|
+
### Added
|
5
|
+
- in_app_products_price to the app class from @lightalloy.
|
6
|
+
- physical_address to the app class from @lightalloy.
|
7
|
+
- contains_ads to the app class from @lightalloy.
|
8
|
+
- multiple app categories (categories, categories_urls) added to the app class from @lightalloy.
|
9
|
+
- privacy_url to the app class from @antonyr.
|
10
|
+
- updated test data from @chadrem.
|
11
|
+
### Fixed
|
12
|
+
- website_url for app class from @antonyr.
|
13
|
+
- tweak tests to work with latest test data from @chadrem.
|
14
|
+
|
3
15
|
## [1.2.0] - 2017-09-26
|
4
16
|
### Added
|
5
17
|
- Reviews now have a review_id from @tom-wolters.
|
data/bin/update_test_data
CHANGED
@@ -19,6 +19,7 @@ end
|
|
19
19
|
|
20
20
|
download('https://play.google.com/store/apps/details?id=com.bluefroggaming.popdat', 'app-com.bluefroggaming.popdat.txt')
|
21
21
|
download('https://play.google.com/store/apps/details?id=com.mg.android', 'app-com.mg.android.txt')
|
22
|
+
download('https://play.google.com/store/apps/details?id=com.hasbro.mlpcoreAPPSTORE', 'app-com.hasbro.mlpcoreAPPSTORE.txt')
|
22
23
|
download('https://play.google.com/store/apps/category/GAME_ARCADE/collection/topselling_paid?start=0&gl=us&num=100&hl=en', 'chart-topselling_paid-GAME_ARCADE-0.txt')
|
23
24
|
download('https://play.google.com/store/apps/category/GAME_ARCADE/collection/topselling_paid?start=100&gl=us&num=100&hl=en', 'chart-topselling_paid-GAME_ARCADE-1.txt')
|
24
25
|
download('https://play.google.com/store/apps/category/GAME_ARCADE/collection/topselling_paid?start=200&gl=us&num=100&hl=en', 'chart-topselling_paid-GAME_ARCADE-2.txt')
|
@@ -4,6 +4,9 @@ module MarketBot
|
|
4
4
|
ATTRIBUTES = [
|
5
5
|
:category,
|
6
6
|
:category_url,
|
7
|
+
:categories,
|
8
|
+
:categories_urls,
|
9
|
+
:contains_ads,
|
7
10
|
:content_rating,
|
8
11
|
:cover_image_url,
|
9
12
|
:current_version,
|
@@ -13,6 +16,8 @@ module MarketBot
|
|
13
16
|
:email,
|
14
17
|
:full_screenshot_urls,
|
15
18
|
:html,
|
19
|
+
:in_app_products_price,
|
20
|
+
:physical_address,
|
16
21
|
:installs,
|
17
22
|
:more_from_developer,
|
18
23
|
:price,
|
@@ -27,6 +32,7 @@ module MarketBot
|
|
27
32
|
:updated,
|
28
33
|
:votes,
|
29
34
|
:website_url,
|
35
|
+
:privacy_url,
|
30
36
|
:whats_new,
|
31
37
|
]
|
32
38
|
end
|
data/lib/market_bot/play/app.rb
CHANGED
@@ -25,20 +25,29 @@ module MarketBot
|
|
25
25
|
result[:current_version] = info.at_css('.content').text.strip
|
26
26
|
when 'Requires Android'
|
27
27
|
result[:requires_android] = info.at_css('.content').text.strip
|
28
|
+
when 'In-app Products'
|
29
|
+
result[:in_app_products_price] = info.at_css('.content').text.strip
|
28
30
|
when 'Contact Developer', 'Developer'
|
29
|
-
info.css('.dev-link')
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
31
|
+
dev_links = info.css('.dev-link')
|
32
|
+
|
33
|
+
if website = dev_links.css(':contains("Visit")').first
|
34
|
+
href = website.attr('href')
|
35
|
+
q_param = URI(href).query.split('&').select{ |p| p =~ /q=/ }.first
|
36
|
+
result[:website_url] = q_param.gsub('q=', '')
|
37
|
+
end
|
38
|
+
|
39
|
+
if email = dev_links.css(':contains("Email")').first
|
40
|
+
email = email.attr('href')
|
41
|
+
result[:email] = email.gsub(/^mailto:/,'')
|
42
|
+
end
|
43
|
+
|
44
|
+
if privacy = dev_links.css(':contains("Privacy")').first
|
45
|
+
href = privacy.attr('href')
|
46
|
+
q_param = URI(href).query.split('&').select{ |p| p =~ /q=/ }.first
|
47
|
+
result[:privacy_url] = q_param.gsub('q=', '')
|
40
48
|
end
|
41
49
|
|
50
|
+
result[:physical_address] = info.at_css('.physical-address').text.strip if info.at_css('.physical-address')
|
42
51
|
end
|
43
52
|
end
|
44
53
|
|
@@ -46,9 +55,15 @@ module MarketBot
|
|
46
55
|
|
47
56
|
result[:price] = doc.at_css('meta[itemprop="price"]')[:content] if doc.at_css('meta[itemprop="price"]')
|
48
57
|
|
49
|
-
|
50
|
-
|
51
|
-
|
58
|
+
result[:contains_ads] = !!doc.at_css('.ads-supported-label-msg')
|
59
|
+
|
60
|
+
category_divs = doc.css('.category')
|
61
|
+
|
62
|
+
result[:categories] = category_divs.map { |d| d.text.strip }
|
63
|
+
result[:categories_urls] = category_divs.map { |d| File.split(d["href"])[1] }
|
64
|
+
|
65
|
+
result[:category] = result[:categories].first
|
66
|
+
result[:category_url] = result[:categories_urls].first
|
52
67
|
|
53
68
|
result[:description] = doc.at_css('div[itemprop="description"]').inner_html.strip
|
54
69
|
result[:title] = doc.at_css('div.id-app-title').text
|
data/lib/market_bot/version.rb
CHANGED
@@ -3,11 +3,19 @@ require File.expand_path(File.dirname(__FILE__) + '../../../spec_helper')
|
|
3
3
|
describe MarketBot::Play::App do
|
4
4
|
shared_context('parsing an app') do
|
5
5
|
it 'should parse the category attribute' do
|
6
|
-
expect(@parsed[:category]).to eq('Arcade').or eq('Weather')
|
6
|
+
expect(@parsed[:category]).to eq('Arcade').or eq('Weather').or eq('Simulation')
|
7
7
|
end
|
8
8
|
|
9
9
|
it 'should parse the category_url attribute' do
|
10
|
-
expect(@parsed[:category_url]).to eq('GAME_ARCADE').or eq('WEATHER')
|
10
|
+
expect(@parsed[:category_url]).to eq('GAME_ARCADE').or eq('WEATHER').or eq('GAME_SIMULATION')
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'should parse the categories attribute' do
|
14
|
+
expect(@parsed[:categories]).to eq(['Arcade']).or eq(['Weather']).or eq(['Simulation', 'Pretend Play'])
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'should parse the categories_urls attribute' do
|
18
|
+
expect(@parsed[:categories_urls]).to eq(['GAME_ARCADE']).or eq(['WEATHER']).or eq(%w[GAME_SIMULATION FAMILY_PRETEND])
|
11
19
|
end
|
12
20
|
|
13
21
|
it 'should parse the content_rating attribute' do
|
@@ -83,7 +91,7 @@ describe MarketBot::Play::App do
|
|
83
91
|
|
84
92
|
it 'should parse the requires_android attribute' do
|
85
93
|
expect(@parsed[:requires_android]).to \
|
86
|
-
be_kind_of(String).and match(/\A\d\.\d and up\z/)
|
94
|
+
be_kind_of(String).and match(/\A\d(\.\d)* and up\z/)
|
87
95
|
end
|
88
96
|
|
89
97
|
it 'should parse the reviews attribute' do
|
@@ -99,7 +107,7 @@ describe MarketBot::Play::App do
|
|
99
107
|
end
|
100
108
|
|
101
109
|
it 'should parse the similar attribute' do
|
102
|
-
expect(@parsed[:similar].length).to be
|
110
|
+
expect(@parsed[:similar].length).to be >= 0
|
103
111
|
expect(@parsed[:similar]).to all(be_kind_of(Hash)).and \
|
104
112
|
all(have_key(:package))
|
105
113
|
end
|
@@ -126,12 +134,33 @@ describe MarketBot::Play::App do
|
|
126
134
|
it 'should parse the website_url attribute' do
|
127
135
|
expect(@parsed[:website_url]).to be_kind_of(String).and \
|
128
136
|
match(/\Ahttps?:\/\//)
|
137
|
+
expect(@parsed[:website_url]).not_to match(/privacy/)
|
138
|
+
end
|
139
|
+
|
140
|
+
it 'should parse the privacy_url attribute' do
|
141
|
+
expect(@parsed[:privacy_url]).to match(/\Ahttps?:\/\//).and \
|
142
|
+
be_kind_of(String) if @parsed[:privacy_url]
|
129
143
|
end
|
130
144
|
|
131
|
-
it '
|
145
|
+
it 'should parse the whats_new attribute' do
|
132
146
|
expect(@parsed[:whats_new]).to be_kind_of(String).or \
|
133
147
|
be_kind_of(NilClass)
|
134
148
|
end
|
149
|
+
|
150
|
+
it 'should parse the contains_ads attribute' do
|
151
|
+
expect(@parsed[:contains_ads]).to eq(true).or \
|
152
|
+
eq(false)
|
153
|
+
end
|
154
|
+
|
155
|
+
it 'should parse the in_app_products_price attribute' do
|
156
|
+
expect(@parsed[:in_app_products_price]).to eq(nil).or(
|
157
|
+
be_kind_of(String).and match(/(.+(\d|.){1,}\ )\-(.+(\d|.){1,})\ per\ item/))
|
158
|
+
end
|
159
|
+
|
160
|
+
it 'should parse the physical_address attribute' do
|
161
|
+
expect(@parsed[:physical_address]).to eq(nil).or(
|
162
|
+
be_kind_of(String))
|
163
|
+
end
|
135
164
|
end
|
136
165
|
|
137
166
|
context '(app-com.bluefroggaming.popdat)' do
|
@@ -154,6 +183,16 @@ describe MarketBot::Play::App do
|
|
154
183
|
end
|
155
184
|
end
|
156
185
|
|
186
|
+
context '(app-com.hasbro.mlpcoreAPPSTORE)' do
|
187
|
+
include_context 'parsing an app'
|
188
|
+
|
189
|
+
before(:all) do
|
190
|
+
@package = 'com.hasbro.mlpcoreAPPSTORE'
|
191
|
+
@html = read_play_data('app-com.hasbro.mlpcoreAPPSTORE.txt')
|
192
|
+
@parsed = MarketBot::Play::App.parse(@html)
|
193
|
+
end
|
194
|
+
end
|
195
|
+
|
157
196
|
it 'should populate the attribute getters' do
|
158
197
|
package = 'app-com.bluefroggaming.popdat'
|
159
198
|
html = read_play_data('app-com.bluefroggaming.popdat.txt')
|