Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Scrape app permissions

  • Loading branch information...
commit a924873ec32c1d0319ff1446aa304d9f33283575 1 parent 9b9690f
@chadrem authored
View
13 lib/market_bot/android/app.rb
@@ -6,7 +6,7 @@ class App
:category, :installs, :size, :price, :content_rating, :description,
:votes, :developer, :more_from_developer, :users_also_installed,
:related, :banner_icon_url, :banner_image_url, :website_url, :email,
- :youtube_video_ids, :screenshot_urls, :whats_new]
+ :youtube_video_ids, :screenshot_urls, :whats_new, :permissions]
attr_reader :app_id
attr_reader *MARKET_ATTRIBUTES
@@ -118,6 +118,17 @@ def self.parse(html)
result[:whats_new] = doc.css('.doc-whatsnew-container').inner_html
+ result[:permissions] = permissions = []
+ perm_types = ['dangerous', 'safe']
+ perm_types.each do |type|
+ doc.css("#doc-permissions-#{type} .doc-permission-group").each do |group_elem|
+ title = group_elem.css('.doc-permission-group-title').text
+ group_elem.css('.doc-permission-description').each do |desc_elem|
+ permissions << { :security => type, :group => title, :description => desc_elem.text }
+ end
+ end
+ end
+
result
end
View
4 spec/market_bot/android/app_spec.rb
@@ -31,6 +31,7 @@ def check_getters(app)
app.youtube_video_ids.should == []
app.screenshot_urls.should == ["https://lh6.ggpht.com/JJWPKPEvz5ivZEeph_gA_oB3VOXYrIrY9lGdGFWHVT4FVub6cUKqxkh5VyxbvVqMXg=h230", "https://lh6.ggpht.com/kPGbJqu42Ukxoa_XZlWxo349y3zNKCayjBD35V2bbt26ZmgpHDegTf8sS5C1VOoAiw=h230", "https://lh3.ggpht.com/S9VMzKxAWSS3IxeUtLYPn-zDg9ojTpVxeHbd3RhHqtXazGRV6-S0jsuNh-GneV9eE2A=h230", "https://lh5.ggpht.com/G0U5k5PpvuEdflN58qzr3uKHGsXk3QqwwLIL_KxVfGNicR7Gn42smetbTBn9SRftnyk=h230", "https://lh6.ggpht.com/j03lPKqJss6066_Q6AbZikU33PWgoR07cPLFgoE5IoNyXwMG6QVX_3-SgI741vnaVnu7=h230", "https://lh3.ggpht.com/YBrG1Hjv7vgNLwp9PaR77gQHwdpInuluSnq9qPG4BwwU7LItCy4m6RQt9YM1sJH1hjdq=h230"]
app.whats_new.should == "<div class=\"doc-permissions\">No recent changes.</div>"
+ app.permissions.should == [{:security=>"dangerous", :group=>"Network communication", :description=>"full Internet access"}, {:security=>"dangerous", :group=>"Phone calls", :description=>"read phone state and identity"}, {:security=>"safe", :group=>"Network communication", :description=>"view network state"}]
end
end
@@ -75,6 +76,7 @@ def check_getters(app)
result[:youtube_video_ids].should == []
result[:screenshot_urls].should == ["https://lh6.ggpht.com/JJWPKPEvz5ivZEeph_gA_oB3VOXYrIrY9lGdGFWHVT4FVub6cUKqxkh5VyxbvVqMXg=h230", "https://lh6.ggpht.com/kPGbJqu42Ukxoa_XZlWxo349y3zNKCayjBD35V2bbt26ZmgpHDegTf8sS5C1VOoAiw=h230", "https://lh3.ggpht.com/S9VMzKxAWSS3IxeUtLYPn-zDg9ojTpVxeHbd3RhHqtXazGRV6-S0jsuNh-GneV9eE2A=h230", "https://lh5.ggpht.com/G0U5k5PpvuEdflN58qzr3uKHGsXk3QqwwLIL_KxVfGNicR7Gn42smetbTBn9SRftnyk=h230", "https://lh6.ggpht.com/j03lPKqJss6066_Q6AbZikU33PWgoR07cPLFgoE5IoNyXwMG6QVX_3-SgI741vnaVnu7=h230", "https://lh3.ggpht.com/YBrG1Hjv7vgNLwp9PaR77gQHwdpInuluSnq9qPG4BwwU7LItCy4m6RQt9YM1sJH1hjdq=h230"]
result[:whats_new].should == "<div class=\"doc-permissions\">No recent changes.</div>"
+ result[:permissions].should == [{:security=>"dangerous", :group=>"Network communication", :description=>"full Internet access"}, {:security=>"dangerous", :group=>"Phone calls", :description=>"read phone state and identity"}, {:security=>"safe", :group=>"Network communication", :description=>"view network state"}]
result
end
@@ -102,6 +104,7 @@ def check_getters(app)
result[:youtube_video_ids].should == ['Ag_IGEgAa9M']
result[:screenshot_urls].should == ["https://lh3.ggpht.com/Q_vPAtKVUefD3znGi_8AnK3FHDf8XsegMnVrX2sImaFLKXOC__MWKXW2WY1avhlvF_aK=h230", "https://lh6.ggpht.com/nbz5tSvuuydrcQ5kl2PpaFuPBrEgXRPaEXXecLMNXEGVblUlDoTXCRH22GrM2RYFcA=h230", "https://lh3.ggpht.com/Oi0lpkA23XsHjg_cXyXkOaRtNw84_OR_YtzhZUCe8VhWRej8oCT28I0VD8Z5ixSuCyM=h230", "https://lh4.ggpht.com/EfNdIkRr5T0JQQlvPICl6m3gHCDBEnsMxqZMrXb0qMW9xBQCN10PaPdrKVI-07XzsXs=h230", "https://lh4.ggpht.com/Q4BDQRkuvHMglh5I0aG56Yy_29NnBWxXWTqkv21onHM41pnrHoLnkacQFmqr6SVtuUR4=h230", "https://lh3.ggpht.com/Uf4MqnyMPVEFATlkutnXVyBtUQEkJbBLQREXbBI633wHAeBxhAc2-XSuysMM5ZFC7f7j=h230", "https://lh5.ggpht.com/TFSxb_0qi1RcDLI6ezzpB5yYfk8rqYWvDjmE30z6AGdmeVSsmomlmGAW0aT8yCA0jpk0=h230", "https://lh4.ggpht.com/Zeet2wggJms4BpDTglJP0jW9M3EAjpn0zUWNKZk6YKM9Id4SPBID5LtKJAgd-krtXZ8=h230"]
result[:whats_new].should == "<p>What's in this version:</p>- Activate menu button in settings/other options. Use it to toggle the action bar.<br>- Performance improvement of list scrolling.<br>- Major other bug fixes and enhancements.<br>"
+ result[:permissions].should == [{:security=>"dangerous", :group=>"Hardware controls", :description=>"record audio"}, {:security=>"dangerous", :group=>"Hardware controls", :description=>"take pictures and videos"}, {:security=>"dangerous", :group=>"Your location", :description=>"coarse (network-based) location"}, {:security=>"dangerous", :group=>"Your location", :description=>"fine (GPS) location"}, {:security=>"dangerous", :group=>"Network communication", :description=>"full Internet access"}, {:security=>"dangerous", :group=>"Your personal information", :description=>"read contact data"}, {:security=>"dangerous", :group=>"Your personal information", :description=>"read sensitive log data"}, {:security=>"dangerous", :group=>"Your personal information", :description=>"read calendar events plus confidential information"}, {:security=>"dangerous", :group=>"Phone calls", :description=>"read phone state and identity"}, {:security=>"dangerous", :group=>"Storage", :description=>"modify/delete USB storage contents modify/delete SD card contents"}, {:security=>"dangerous", :group=>"System tools", :description=>"prevent tablet from sleeping prevent phone from sleeping"}, {:security=>"safe", :group=>"Your accounts", :description=>"discover known accounts"}, {:security=>"safe", :group=>"Hardware controls", :description=>"control vibrator"}, {:security=>"safe", :group=>"Network communication", :description=>"view network state"}, {:security=>"safe", :group=>"Network communication", :description=>"view Wi-Fi state"}, {:security=>"safe", :group=>"Default", :description=>"Market billing service"}]
end
it 'should populate a hash with the correct keys/values' do
@@ -125,6 +128,7 @@ def check_getters(app)
result[:email].should == 'kooistar_solutions@hotmail.com'
result[:youtube_video_ids].should == []
result[:whats_new].should == "<p>What's in this version:</p>1.5.1: Bug fix: Exceptional case is catched now with an failure message + instruction.<br>1.5.2: Bug fix: Remove use of deprecated java funtion + catch null pointer -&gt; Better app<br>Thanks for reporting the bugs!<br>"
+ result[:permissions].should == [{:security=>"dangerous", :group=>"Your location", :description=>"fine (GPS) location"}, {:security=>"dangerous", :group=>"Network communication", :description=>"full Internet access"}, {:security=>"safe", :group=>"Network communication", :description=>"view network state"}]
end
it 'should populate the associated apps keys' do
Please sign in to comment.
Something went wrong with that request. Please try again.