Drupal Project Movers and Shakers: The D-6000

Highlight: WYSIWYG API Gets Top Spot With 97% Growth (Feb 8th - March 29th)

Ever wondered which modules' userbase was growing fastest?

With a bit of simpleXML, 2 hours of boredom, and drupal.org's usage charts, I can provide an answer. Personally I thought the results were rather interesting.

This list only includes projects that got 6000 downloads or more last week. I picked 6000, because otherwise, ubercart wouldn't show up.

[menu_callback, and required function at end -- my toys are your toys, do with them as you like].

The Drupal 6000 [ Feb 8th - March 29th ]

rank project change
1 Wysiwyg API 97 %
2 FileField 46 %
3 Zen 42 %
4 Global Redirect 40 %
5 ImageAPI 39 %
6 Page Title 37 %
7 Path Redirect 37 %
8 Thickbox 36 %
9 Calendar 34 %
10 ImageCache 34 %
11 Ubercart 34 %
12 Backup and Migrate 33 %
13 Service links 33 %
14 Mollom 33 %
15 Site map 32 %
16 Internationalization 32 %
17 ImageField 31 %
18 Advanced help 30 %
19 Date 30 %
20 Location 29 %
21 GMap Module 29 %
22 Embedded Media Field 28 %
23 Administration menu 28 %
24 Lightbox2 27 %
25 Meta tags 27 %
26 Webform 27 %
27 Automatic Nodetitles 27 %
28 Pathauto 24 %
29 Token 24 %
30 Google Analytics 24 %
31 Printer, e-mail and PDF versions 23 %
32 Content Construction Kit (CCK) 23 %
33 Poormanscron 23 %
34 Acquia Marina 23 %
35 Email Field 22 %
36 jQuery Update 22 %
37 Views 22 %
38 FCKeditor - WYSIWYG HTML editor 22 %
39 Devel 21 %
40 Nice Menus 20 %
41 Link 20 %
42 Simplenews 19 %
43 IMCE 19 %
44 Views Bonus Pack 19 %
45 Organic groups 19 %
46 LoginToboggan 18 %
47 Panels 18 %
48 Content Templates (Contemplate) 18 %
49 External Links 18 %
50 Voting API 17 %
51 DHTML Menu 16 %
52 Fivestar 16 %
53 CAPTCHA 16 %
54 Tagadelic 15 %
55 Front Page 15 %
56 Drupal 15 %
57 Image Assist 14 %
58 Image 14 %
59 Mime Mail 14 %
60 Javascript Tools 13 %
61 XML Sitemap 13 %
62 TinyMCE WYSIWYG Editor -11 %
63 Update Status -06 %
64 Event -01 %

And the surprisingly small, and ugly bit of code that produced this

function mover_shaker($file = 'http://localhost/usage.html') {
$xml = simple_get_xml($file);
$table = $xml->xpath('//table[@id="project-usage-all-projects"]');
$th = 0;
$header = array(array('data' => 'rank'), array('data' => 'project'),array('data'=> 'change'));
foreach($table[0]->thead->tr[0]->th as $key => $label) {
$labels[$th] = (string)$label->a[0];
$th++;
}
$i = 0;
$last_downloads = 3000;
if ($_GET['last_downloads']) {
$last_downloads = check_plain($_GET['last_downloads']);
}
foreach($table[0]->tbody[0]->tr as $key => $data) {
if ($first = str_replace(',', '', (string)$data->td[1]) > $last_downloads) {
if ((string)$data->td[8]) {
$project = l($data->td->a[0], 'http://www.drupal.org'.$data->td->a[0]['href']);
$first = str_replace(',', '', (string)$data->td[1]);
$last = str_replace(',', '', (string)$data->td[8]);
$change = $first - $last;
$percent = $change / $last;
$percent = number_format($percent,2)." %";
$key = $i++;
$rows[$percent.'-'.$i] = array($i,$project, $percent);
$i++;
}
}

}
ksort($rows);
$rows = array_reverse($rows);
$i = 1;
foreach($rows as $key => $row) {
$rows[$key][0] = $i;
$i++;
}
return theme('table', $header, $rows);
}

function simple_get_xml($url) {
$html = new DOMDocument();

@$html->loadHTMLFile($url);
// convert DOM to SimpleXML
$xml = simplexml_import_dom($html);
return $xml;
}
?>

AttachmentSize
Module file for this1.49 KB