android_market_api 0.2.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.
- data/.gitignore +4 -0
- data/COPYING +18 -0
- data/Gemfile +5 -0
- data/README +10 -0
- data/Rakefile +1 -0
- data/android_market_api.gemspec +25 -0
- data/lib/android_market_api/android_market.rb +61 -0
- data/lib/android_market_api/android_market_application.rb +222 -0
- data/lib/android_market_api/version.rb +3 -0
- data/lib/android_market_api.rb +6 -0
- data/test.rb +15 -0
- metadata +89 -0
data/.gitignore
ADDED
data/COPYING
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
Copyright (c) 2011
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
+
of this software and associated documentation files (the "Software"), to
|
5
|
+
deal in the Software without restriction, including without limitation the
|
6
|
+
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
7
|
+
sell copies of the Software, and to permit persons to whom the Software is
|
8
|
+
furnished to do so, subject to the following conditions:
|
9
|
+
|
10
|
+
The above copyright notice and this permission notice shall be included in
|
11
|
+
all copies or substantial portions of the Software.
|
12
|
+
|
13
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
16
|
+
THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
17
|
+
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
18
|
+
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/Gemfile
ADDED
data/README
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
<h2>Android Market Library for parsing Android Market.</h2>
|
2
|
+
|
3
|
+
This is a unoficial API Managed by Bearstouch Software
|
4
|
+
|
5
|
+
This project is under development.
|
6
|
+
|
7
|
+
Fell free to clone it and submit your changes to us.
|
8
|
+
|
9
|
+
Soon it will be available on Rubygem Website
|
10
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "android_market_api/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "android_market_api"
|
7
|
+
s.version = AndroidMarketApi::VERSION
|
8
|
+
s.authors = ["Hélder Vasconcelos"]
|
9
|
+
s.email = ["heldervasc@bearstouch.com"]
|
10
|
+
s.homepage = "http://rubygems.org/gems/android_market_api"
|
11
|
+
s.summary = %q{API for parsing Android Market and getting some usefull information about applications}
|
12
|
+
s.description = %q{API for parsing Android Market and getting some usefull information about applications}
|
13
|
+
|
14
|
+
s.rubyforge_project = "android_market_api"
|
15
|
+
|
16
|
+
s.files = `git ls-files`.split("\n")
|
17
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
|
+
s.require_paths = ["lib"]
|
20
|
+
|
21
|
+
# specify any dependencies here; for example:
|
22
|
+
# s.add_development_dependency "rspec"
|
23
|
+
# s.add_runtime_dependency "rest-client"
|
24
|
+
s.add_dependency "hpricot"
|
25
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
# Copyright 2011 by Helder VAsconcelos (heldervasc@bearstouch.com).
|
2
|
+
# All rights reserved.
|
3
|
+
|
4
|
+
# Permission is granted for use, copying, modification, distribution,
|
5
|
+
# and distribution of modified versions of this work as long as the
|
6
|
+
# above copyright notice is included.
|
7
|
+
require 'rubygems'
|
8
|
+
require 'hpricot'
|
9
|
+
require 'open-uri'
|
10
|
+
#require 'android_market_api/android_market_application'
|
11
|
+
|
12
|
+
class AndroidMarket
|
13
|
+
|
14
|
+
@@game_categories=Array.[]('ARCADE','BRAIN','CARDS','CASUAL','GAME_WALLPAPER','RACING','SPORTS_GAMES','GAME_WIDGETS')
|
15
|
+
@@application_categories=Array.[]('BOOKS_AND_REFERENCE','BUSINESS','COMICS','COMMUNICATION','EDUCATION','ENTERTAINMENT','FINANCE','HEALTH_AND_FITNESS','LIBRARIES_AND_DEMO','LIFESTYLE','APP_WALLPAPER','MEDIA_AND_VIDEO','MEDICAL','MUSIC_AND_AUDIO','NEWS_AND_MAGAZINES','PERSONALIZATION','PHOTOGRAPHY','PRODUCTIVITY','SHOPPING','SOCIAL','SPORTS','TOOLS','TRANSPORTATION','TRAVEL_AND_LOCAL','WEATHER','APP_WIDGETS')
|
16
|
+
|
17
|
+
#Get Top selling Paids apps for a category
|
18
|
+
def AndroidMarket.get_top_selling_paid_apps(category,language='en',start=0)
|
19
|
+
apps=Array.new
|
20
|
+
url="https://market.android.com/details?id=apps_topselling_paid&cat="+category+"&start="+start.to_s+"&num=24&hl="+language
|
21
|
+
puts url
|
22
|
+
doc = Hpricot(open(url,'User-Agent' => 'ruby'))
|
23
|
+
#i=1
|
24
|
+
doc.search("//div[@class='buy-border']//a").each do |buy_div|
|
25
|
+
#puts '-------------------------------------------------'
|
26
|
+
#puts "| Applicaton Ranking "+i.to_s
|
27
|
+
#puts "| Application Name = "+buy_div.attributes['data-doctitle']
|
28
|
+
#puts "| Application Package = "+buy_div.attributes['data-docid']
|
29
|
+
#puts "| Application Price = "+(buy_div.attributes['data-docpricemicros'].to_i/1000000).to_s
|
30
|
+
#puts '-------------------------------------------------'
|
31
|
+
puts "Getting Application package "+buy_div.attributes['data-docid']
|
32
|
+
app=AndroidMarketApplication.new(buy_div.attributes['data-docid'],language)
|
33
|
+
apps.push(app)
|
34
|
+
#i=i+1
|
35
|
+
end
|
36
|
+
return apps
|
37
|
+
end
|
38
|
+
|
39
|
+
#Get Top selling Free apps for a category
|
40
|
+
def AndroidMarket.get_top_selling_free_apps(category,language='en',start=0)
|
41
|
+
apps=Array.new
|
42
|
+
url="https://market.android.com/details?id=apps_topselling_free&cat="+category+"&start="+start.to_s+"&num=24&hl="+language
|
43
|
+
doc = Hpricot(open(url,'User-Agent' => 'ruby'))
|
44
|
+
#i=1
|
45
|
+
doc.search("//div[@class='buy-border']//a").each do |buy_div|
|
46
|
+
#puts '-------------------------------------------------'
|
47
|
+
#puts "| Applicaton Ranking "+i.to_s
|
48
|
+
#puts "| Application Name = "+buy_div.attributes['data-doctitle']
|
49
|
+
#puts "| Application Package = "+buy_div.attributes['data-docid']
|
50
|
+
#puts "| Application Price = "+(buy_div.attributes['data-docpricemicros'].to_i/1000000).to_s
|
51
|
+
#puts '-------------------------------------------------'
|
52
|
+
puts "Getting Application package "+buy_div.attributes['data-docid']
|
53
|
+
app=AndroidMarketApplication.new(buy_div.attributes['data-docid'],language)
|
54
|
+
#i=i+1
|
55
|
+
apps.push(app)
|
56
|
+
end
|
57
|
+
return apps
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
61
|
+
|
@@ -0,0 +1,222 @@
|
|
1
|
+
# Copyright 2011 by Helder Vasconcelos (heldervasc@bearstouch.com).
|
2
|
+
# All rights reserved.
|
3
|
+
|
4
|
+
# Permission is granted for use, copying, modification, distribution,
|
5
|
+
# and distribution of modified versions of this work as long as the
|
6
|
+
# above copyright notice is included.
|
7
|
+
require 'rubygems'
|
8
|
+
require 'open-uri'
|
9
|
+
require 'hpricot'
|
10
|
+
|
11
|
+
class AndroidMarketApplication
|
12
|
+
|
13
|
+
@@debug=0
|
14
|
+
###########################################################################################
|
15
|
+
# Contructor: Example Usage AndroidMarketApplication.new("com.bearstouch.smsscheduler")
|
16
|
+
############################################################################################
|
17
|
+
def initialize(package,language='en')
|
18
|
+
@package=package
|
19
|
+
@language=language;
|
20
|
+
@name="" # Application Name
|
21
|
+
@current_version="" # Application Current Version
|
22
|
+
@price="" # Application Price
|
23
|
+
@ratting_value="" # Ratting Value
|
24
|
+
@ratting_count="" # Nr of Votes
|
25
|
+
@updated="" # Last Upfate datetime
|
26
|
+
@sdk_required="" # SDK Required
|
27
|
+
@category="" # Category
|
28
|
+
@downloads="" # Ratting
|
29
|
+
@size="" # Application Size
|
30
|
+
@contentRating="" # Content Ratting
|
31
|
+
@description="" # Application description
|
32
|
+
@screenshots="" # Screenshot URL Array
|
33
|
+
@developer_name="" # Developer Name
|
34
|
+
@icon="" # Icon URL
|
35
|
+
@update_text=""
|
36
|
+
@screenshots=Array.new
|
37
|
+
@update_text=Array.new
|
38
|
+
parseInAndroidMarket(language)
|
39
|
+
end
|
40
|
+
|
41
|
+
############################################
|
42
|
+
# => Parse Default Page for your localization from Android Market
|
43
|
+
############################################
|
44
|
+
def parseInAndroidMarket(language)
|
45
|
+
|
46
|
+
url="https://market.android.com/details?id="+@package+"&hl="+language
|
47
|
+
puts "Getting URL="+url if @@debug == 1
|
48
|
+
doc = Hpricot(open(url,'User-Agent' => 'ruby'))
|
49
|
+
fill_current_version(doc.root)
|
50
|
+
fill_ratting_value(doc.root)
|
51
|
+
fill_ratting_count(doc.root)
|
52
|
+
fill_updated_at(doc.root)
|
53
|
+
fill_sdk_required(doc.root)
|
54
|
+
fill_category(doc.root)
|
55
|
+
fill_downloads(doc.root)
|
56
|
+
fill_size(doc.root)
|
57
|
+
fill_price(doc.root)
|
58
|
+
fill_content_rating(doc.root)
|
59
|
+
fill_application_name(doc.root)
|
60
|
+
fill_description(doc.root)
|
61
|
+
fill_screenshots(doc.root)
|
62
|
+
fill_developer_name(doc.root)
|
63
|
+
fill_icon(doc.root)
|
64
|
+
fill_changed_text(doc.root)
|
65
|
+
|
66
|
+
end
|
67
|
+
|
68
|
+
def fill_application_name(doc)
|
69
|
+
element=doc.at("dl[@class='doc-metadata-list']/meta[@itemprop='name']")
|
70
|
+
if element
|
71
|
+
@name=element['content']
|
72
|
+
puts "Apllication name ="+@name.to_s if @@debug == 1
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def fill_current_version(doc)
|
77
|
+
element=doc.at("dl[@class='doc-metadata-list']/dd[@itemprop='softwareVersion']")
|
78
|
+
if element
|
79
|
+
@current_version=element.inner_html
|
80
|
+
puts "Apllication Version="+@current_version.to_s if @@debug == 1
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
def fill_price(doc)
|
85
|
+
element=doc.at("dl[@class='doc-metadata-list']/dd[@itemprop='offers']/span[@itemprop='price']")
|
86
|
+
if element
|
87
|
+
@price=element.inner_html
|
88
|
+
puts "Apllication Price="+@price.to_s if @@debug == 1
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
def fill_ratting_value(doc)
|
93
|
+
element=doc.at("dl[@class='doc-metadata-list']/dd[@itemprop='aggregateRating']/div[@itemprop='ratingValue']")
|
94
|
+
if element
|
95
|
+
@ratting_value=element['content']
|
96
|
+
puts "Apllication Ratting Value ="+@ratting_value.to_s if @@debug == 1
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
def fill_ratting_count(doc)
|
101
|
+
element=doc.at("dl[@class='doc-metadata-list']/dd[@itemprop='aggregateRating']/span[@itemprop='ratingCount']")
|
102
|
+
if element
|
103
|
+
@ratting_count=element.inner_html
|
104
|
+
puts "Apllication ratting_count="+@ratting_count.to_s if @@debug == 1
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
def fill_updated_at(doc)
|
109
|
+
element=doc.at("dl[@class='doc-metadata-list']/dd/time[@itemprop='datePublished']")
|
110
|
+
if element
|
111
|
+
@updated=element.inner_html
|
112
|
+
puts "Apllication updated="+@updated.to_s if @@debug == 1
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
def fill_sdk_required(doc)
|
117
|
+
element=doc.at("dl[@class='doc-metadata-list']/dt[@itemprop='operatingSystems']")
|
118
|
+
if element
|
119
|
+
@sdk_required=element.next_node.inner_html
|
120
|
+
puts "Apllication SDK="+@sdk_required.to_s if @@debug == 1
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
def fill_category(doc)
|
125
|
+
#@category=doc.at("dl[@class='doc-metadata-list']/dt[@itemprop='operatingSystems']").next_node.inner_html
|
126
|
+
# puts "Apllication category="+@category.to_s if @@debug == 1
|
127
|
+
end
|
128
|
+
|
129
|
+
def fill_downloads(doc)
|
130
|
+
element=doc.at("dd[@itemprop='numDownloads']")
|
131
|
+
if element
|
132
|
+
@downloads=element.children.first
|
133
|
+
puts "Apllication install category="+@downloads.to_s if @@debug == 1
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
def fill_size(doc)
|
138
|
+
element=doc.at("dl[@class='doc-metadata-list']/dd[@itemprop='fileSize']")
|
139
|
+
if element
|
140
|
+
@size=element.inner_html
|
141
|
+
puts "Apllication Size="+@size.to_s if @@debug == 1
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
def fill_content_rating(doc)
|
146
|
+
element=doc.at("dl[@class='doc-metadata-list']/dd[@itemprop='contentRating']")
|
147
|
+
if element
|
148
|
+
@contentRating=element.inner_html
|
149
|
+
puts "Apllication Content Rating="+@contentRating.to_s if @@debug == 1
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
153
|
+
def fill_description(doc)
|
154
|
+
element=doc.at("div[@id='doc-original-text']")
|
155
|
+
if element
|
156
|
+
@description=element.inner_html
|
157
|
+
puts "Apllication Description ="+@description.to_s if @@debug == 1
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
161
|
+
def fill_screenshots(doc)
|
162
|
+
element_ar=(doc/"div[@class='screenshot-carousel-content-container']/img")
|
163
|
+
if element_ar
|
164
|
+
element_ar.each do |img|
|
165
|
+
puts "addding "+img['src'].to_s if @@debug == 1
|
166
|
+
@screenshots.push(img['src'].to_s)
|
167
|
+
end
|
168
|
+
end
|
169
|
+
end
|
170
|
+
|
171
|
+
def fill_developer_name(doc)
|
172
|
+
element=doc.at("a[@class='doc-header-link']")
|
173
|
+
if element
|
174
|
+
@developer_name=element.inner_html
|
175
|
+
puts "Apllication Author= "+@developer_name.to_s if @@debug == 1
|
176
|
+
end
|
177
|
+
end
|
178
|
+
|
179
|
+
def fill_icon(doc)
|
180
|
+
element=doc.at("div[@class='doc-banner-icon']/img")
|
181
|
+
if element
|
182
|
+
@icon=element['src']
|
183
|
+
puts "Apllication Icon= "+@icon.to_s if @@debug == 1
|
184
|
+
end
|
185
|
+
end
|
186
|
+
|
187
|
+
def fill_changed_text(doc)
|
188
|
+
element_ar=(doc/"div[@class='doc-whatsnew-container']/ol/li")
|
189
|
+
if element_ar
|
190
|
+
element_ar.each do |parag|
|
191
|
+
puts "Apllication Update= "+parag.inner_html if @@debug == 1
|
192
|
+
@update_text << parag.inner_html
|
193
|
+
end
|
194
|
+
end
|
195
|
+
end
|
196
|
+
|
197
|
+
def to_s()
|
198
|
+
puts "-------------------------------------------------------------"
|
199
|
+
puts " Application Name = "+@name.to_s
|
200
|
+
puts " Application Package = "+@package.to_s
|
201
|
+
puts " Application Current Version = "+@current_version.to_s
|
202
|
+
puts " Application Price = "+@price.to_s
|
203
|
+
puts " Application Ratting Value = "+@ratting_value.to_s
|
204
|
+
puts " Application Ratting Count = "+@ratting_count.to_s
|
205
|
+
puts " Application Updated = "+@updated.to_s
|
206
|
+
puts " SDK required = "+@sdk_required.to_s
|
207
|
+
# puts " Category = "+@category.to_s
|
208
|
+
puts " Nr of Downloads = "+@downloads.to_s
|
209
|
+
puts " Size = "+@size.to_s
|
210
|
+
puts " Content Ratting = "+@contentRating.to_s
|
211
|
+
puts " Application description = "+@description.to_s
|
212
|
+
puts " Developer Name = "+@developer_name.to_s
|
213
|
+
puts " Icon URL = "+@icon.to_s
|
214
|
+
puts "-------------------------------------------------------------"
|
215
|
+
end
|
216
|
+
|
217
|
+
end
|
218
|
+
|
219
|
+
puts "Starting ...."
|
220
|
+
$app=AndroidMarketApplication.new('com.zeptolab.ctr.paid')
|
221
|
+
$app.to_s
|
222
|
+
puts "Ending"
|
@@ -0,0 +1,6 @@
|
|
1
|
+
# == About android_market_api.rb
|
2
|
+
#
|
3
|
+
# All of Android Market Api's various part are loaded when you use <tt>require 'android_market_api'</tt>.
|
4
|
+
require "android_market_api/android_market_application"
|
5
|
+
require "android_market_api/version"
|
6
|
+
require "android_market_api/android_market"
|
data/test.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
###########################################
|
3
|
+
#
|
4
|
+
# Android Market Parser
|
5
|
+
# Creaated: 12/11/2011
|
6
|
+
# Author: Hélder VAsconcelos (heldervasc@bearstouch.com)
|
7
|
+
#
|
8
|
+
#############################################
|
9
|
+
require 'rubygems'
|
10
|
+
require 'android_market_api'
|
11
|
+
|
12
|
+
puts "Starting ...."
|
13
|
+
$app=AndroidMarketApplication.new('com.zeptolab.ctr.paid')
|
14
|
+
$app.to_s
|
15
|
+
puts "Ending"
|
metadata
ADDED
@@ -0,0 +1,89 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: android_market_api
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 23
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 2
|
9
|
+
- 0
|
10
|
+
version: 0.2.0
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- "H\xC3\xA9lder Vasconcelos"
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2011-11-16 00:00:00 Z
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: hpricot
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
25
|
+
requirements:
|
26
|
+
- - ">="
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
hash: 3
|
29
|
+
segments:
|
30
|
+
- 0
|
31
|
+
version: "0"
|
32
|
+
type: :runtime
|
33
|
+
version_requirements: *id001
|
34
|
+
description: API for parsing Android Market and getting some usefull information about applications
|
35
|
+
email:
|
36
|
+
- heldervasc@bearstouch.com
|
37
|
+
executables: []
|
38
|
+
|
39
|
+
extensions: []
|
40
|
+
|
41
|
+
extra_rdoc_files: []
|
42
|
+
|
43
|
+
files:
|
44
|
+
- .gitignore
|
45
|
+
- COPYING
|
46
|
+
- Gemfile
|
47
|
+
- README
|
48
|
+
- Rakefile
|
49
|
+
- android_market_api.gemspec
|
50
|
+
- lib/android_market_api.rb
|
51
|
+
- lib/android_market_api/android_market.rb
|
52
|
+
- lib/android_market_api/android_market_application.rb
|
53
|
+
- lib/android_market_api/version.rb
|
54
|
+
- test.rb
|
55
|
+
homepage: http://rubygems.org/gems/android_market_api
|
56
|
+
licenses: []
|
57
|
+
|
58
|
+
post_install_message:
|
59
|
+
rdoc_options: []
|
60
|
+
|
61
|
+
require_paths:
|
62
|
+
- lib
|
63
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
64
|
+
none: false
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
hash: 3
|
69
|
+
segments:
|
70
|
+
- 0
|
71
|
+
version: "0"
|
72
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ">="
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
hash: 3
|
78
|
+
segments:
|
79
|
+
- 0
|
80
|
+
version: "0"
|
81
|
+
requirements: []
|
82
|
+
|
83
|
+
rubyforge_project: android_market_api
|
84
|
+
rubygems_version: 1.8.11
|
85
|
+
signing_key:
|
86
|
+
specification_version: 3
|
87
|
+
summary: API for parsing Android Market and getting some usefull information about applications
|
88
|
+
test_files: []
|
89
|
+
|