Class: GenerateList
- Inherits:
-
Object
- Object
- GenerateList
- Defined in:
- lib/wpstools/plugins/list_generator/generate_list.rb
Overview
This tool generates a list to use for plugin and theme enumeration
Instance Attribute Summary (collapse)
-
- (Object) verbose
Returns the value of attribute verbose.
Instance Method Summary (collapse)
- - (Object) generate_full_list
- - (Object) generate_popular_list(pages)
-
- (Object) get_popular_items(pages)
Send a HTTP request to the WordPress most popular theme or plugin webpage parse the response for the names.
-
- (GenerateList) initialize(type, verbose)
constructor
type = themes | plugins.
-
- (Object) save(items)
Save the file.
- - (Object) set_file_name(type)
Constructor Details
- (GenerateList) initialize(type, verbose)
type = themes | plugins
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
# File 'lib/wpstools/plugins/list_generator/generate_list.rb', line 9 def initialize(type, verbose) if type =~ /plugins/i @type = 'plugin' @svn_url = 'http://plugins.svn.wordpress.org/' @popular_url = 'http://wordpress.org/extend/plugins/browse/popular/' @popular_regex = %r{<h3><a href="http://wordpress.org/extend/plugins/(.+)/">.+</a></h3>}i elsif type =~ /themes/i @type = 'theme' @svn_url = 'http://themes.svn.wordpress.org/' @popular_url = 'http://wordpress.org/extend/themes/browse/popular/' @popular_regex = %r{<h3><a href="http://wordpress.org/extend/themes/(.+)">.+</a></h3>}i else raise "Type #{type} not defined" end @verbose = verbose @browser = Browser.instance @hydra = @browser.hydra end |
Instance Attribute Details
- (Object) verbose
Returns the value of attribute verbose
6 7 8 |
# File 'lib/wpstools/plugins/list_generator/generate_list.rb', line 6 def verbose @verbose end |
Instance Method Details
- (Object) generate_full_list
53 54 55 56 57 |
# File 'lib/wpstools/plugins/list_generator/generate_list.rb', line 53 def generate_full_list set_file_name(:full) items = SvnParser.new(@svn_url).parse save items end |
- (Object) generate_popular_list(pages)
59 60 61 62 63 |
# File 'lib/wpstools/plugins/list_generator/generate_list.rb', line 59 def generate_popular_list(pages) set_file_name(:popular) items = get_popular_items(pages) save items end |
- (Object) get_popular_items(pages)
Send a HTTP request to the WordPress most popular theme or plugin webpage parse the response for the names.
67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
# File 'lib/wpstools/plugins/list_generator/generate_list.rb', line 67 def get_popular_items(pages) found_items = [] page_count = 1 queue_count = 0 (1...(pages.to_i + 1)).each do |page| # First page has another URL url = (page == 1) ? @popular_url : @popular_url + 'page/' + page.to_s + '/' request = @browser.forge_request(url) queue_count += 1 request.on_complete do |response| puts "[+] Parsing page #{page_count}" if @verbose page_count += 1 response.body.scan(@popular_regex).each do |item| puts "[+] Found popular #@type: #{item}" if @verbose found_items << item[0] end end @hydra.queue(request) if queue_count == @browser.max_threads @hydra.run queue_count = 0 end end @hydra.run found_items.sort! found_items.uniq end |
- (Object) save(items)
Save the file
104 105 106 107 108 109 110 |
# File 'lib/wpstools/plugins/list_generator/generate_list.rb', line 104 def save(items) items.sort! items.uniq! puts "[*] We have parsed #{items.length} #@types" File.open(@file_name, 'w') { |f| f.puts(items) } puts "New #@file_name file created" end |
- (Object) set_file_name(type)
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/wpstools/plugins/list_generator/generate_list.rb', line 28 def set_file_name(type) case @type when 'plugin' case type when :full @file_name = PLUGINS_FULL_FILE when :popular @file_name = PLUGINS_FILE else raise 'Unknown type' end when 'theme' case type when :full @file_name = THEMES_FULL_FILE when :popular @file_name = THEMES_FILE else raise 'Unknown type' end else raise "Unknown type #@type" end end |