Advertisement

GD Showcase Statistics

Started by April 28, 2009 02:17 PM
6 comments, last by Gaiiden 15 years, 6 months ago
Wrote a quick HTML-scraper program to run some basic statistics on the GD Showcase entries. Here are the results:

Username : Downloads (Games)

Battagline : 45276 (12)
chapmast : 14148 (1)
HopeDagger : 10817 (5)
H_o_p_s : 8377 (4)
Patbert : 7761 (6)
TANSTAAFL : 4319 (9)
Sir Sapo : 4127 (1)
Laz : 3889 (1)
Ravuya : 3732 (11)
MDickie : 3551 (3)
Evil Steve : 2855 (4)
urs : 2539 (1)
FenrirWolf : 2354 (2)
capn_midnight : 2290 (8)
Degra : 2247 (2)
EnemyBoss : 2201 (5)
Stompy9999 : 2192 (6)
Mark Currie : 1998 (1)
noaktree : 1928 (2)
Prog101 : 1867 (3)
vetroXL : 1601 (1)
LamerGamer : 1371 (1)
Stephen R : 1215 (3)
EDI : 1077 (1)
Tera_Dragon : 1038 (2)
Lab-Rat : 1005 (2)
Samith : 994 (2)
ildave1 : 952 (2)
falkone : 931 (1)
Rixter : 928 (2)
Downer : 920 (2)
Dave : 845 (2)
PennstateLion : 831 (3)
ManaStone : 811 (2)
superlubo : 769 (1)
johnhattan : 756 (1)
syn9 : 746 (1)
EvDaedalus : 734 (2)
Rob Loach : 731 (2)
SiCrane : 731 (1)
Programmer16 : 730 (2)
Eddie Hicks : 708 (2)
Scet : 699 (2)
Jesse_P : 681 (3)
markr : 678 (2)
HandCraftedRadio : 671 (3)
denthorq : 651 (1)
Mithrandir : 638 (1)
ols : 573 (1)
meix : 572 (2)
Emmanuel Deloget : 558 (1)
Pouya : 544 (1)
boto : 525 (1)
Jason Z : 518 (2)
Extrarius : 483 (1)
rpg_code_master : 482 (1)
xaver : 458 (2)
rick_appleton : 454 (1)
Kuro : 451 (1)
TyroWorks : 445 (2)
jarthur : 413 (1)
Herb3 : 393 (1)
Eleventy : 382 (1)
Asheh : 381 (1)
jochenstier : 366 (1)
Aardvajk : 365 (1)
RingTek : 352 (1)
JTippetts : 350 (1)
Trapper Zoid : 348 (1)
kentcb : 343 (1)
Brandon N : 338 (1)
Ceoddyn : 331 (1)
Colin Jeanne : 329 (1)
lethalhamster : 328 (1)
coldacid : 327 (2)
DavidNeal : 306 (1)
chadmeyers : 287 (1)
modemancer : 287 (1)
deurrific : 285 (1)
SDyer : 282 (1)
cm2 : 279 (1)
a_insomniac : 275 (1)
DecipherOne : 275 (1)
The Forgotten Mindset : 269 (1)
3dmodelerguy : 263 (1)
Etherstar : 263 (1)
robpers2003 : 262 (1)
AntiGuy : 244 (1)
SteelGolem : 243 (1)
Crypter : 235 (1)
kylecrass : 234 (1)
deerslyr1 : 234 (1)
Xloner12 : 228 (1)
Mushu : 213 (1)
snard6 : 212 (1)
Namatsu : 210 (1)
syn_9 : 209 (1)
jazzuo : 201 (1)
DukeAtreides076 : 190 (1)
chronicle17 : 184 (1)
Sep : 182 (1)
Verg : 173 (1)
Stagz : 161 (1)
trailervoice : 149 (1)
fortia : 146 (1)
sprite_hound : 142 (1)
jasong : 139 (1)
Drilian : 138 (1)
jman2050 : 138 (1)
superpig : 135 (1)
eppo : 132 (1)
valles : 132 (1)
graveyard filla : 129 (1)
PerO : 128 (1)
PumpkinPieman : 121 (1)
Black Knight : 120 (1)
xtBones : 113 (1)
diablo_tk : 111 (1)
HeftiSchlumpf : 96 (1)
DrSizzla : 89 (1)
Mak : 81 (1)
staaf : 41 (1)
dwarfsoft : 31 (1)
volking : 22 (1)



if you would like to play around with my scraper, here's the C# code. Sorry for the sloppy processing, it's not meant to be a long-term project:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Text.RegularExpressions;

namespace GDS_Showcase_Stats
{
    class Program
    {
        static void Main(string[] args)
        {
            var data = "";
            //cache the page locally so that we don't keep pinging the server every time we want to
            //run a test on the data
            if (!File.Exists("data.txt"))
            {
                var req = HttpWebRequest.Create("http://www.gamedev.net/community/gds/");
                var rep = req.GetResponse();
                using (var reader = new StreamReader(rep.GetResponseStream()))
                {
                    data = reader.ReadToEnd();
                    File.WriteAllText("data.txt", data);
                }
            }
            else
                data = File.ReadAllText("data.txt");

            var tablePat = new Regex("Newest Updates.*?</table>", RegexOptions.Singleline);
            var table = tablePat.Match(data).Value;
            var rowPat = new Regex("<tr>.*?</tr>", RegexOptions.Singleline);
            var cellPat = new Regex("<td.*?</td>", RegexOptions.Singleline);
            var titlePat = new Regex("<b>.*?</b>", RegexOptions.Singleline);
            var authorPath = new Regex("by .*?<", RegexOptions.Singleline);
            var numPat = new Regex(" \\d+? ");
            var skip = true;
            var numGames = new Dictionary<string, int[]>();
            foreach (var match in rowPat.Matches(table))
            {
                if (skip)
                    skip = false;
                else
                {
                    //strip out a bunch of HTML that I didn't want to figure out a more complex regex for.
                    var matches = cellPat.Matches(match.ToString());
                    var title = titlePat.Match(matches[0].Value).Value;
                    title = title.Substring(title.IndexOf('>', 5) + 1);
                    title = title.Substring(0, title.IndexOf('<'));
                    var author = authorPath.Match(matches[0].Value).Value;
                    author = author.Substring(3, author.Length - 4);
                    var dateStr = matches[1].Value;
                    dateStr = dateStr.Substring(dateStr.IndexOf(';') + 1);
                    dateStr = dateStr.Substring(0, dateStr.IndexOf('&'));
                    var date = DateTime.Parse(dateStr);
                    var numStr = numPat.Match(matches[2].Value).Value;
                    numStr = numStr.Substring(numStr.IndexOf(';') + 1);
                    numStr = numStr.Substring(0, numStr.IndexOf('&'));
                    int num = int.Parse(numStr);


                    ///Do your calculations per record here
                    if (!numGames.ContainsKey(author))
                        numGames.Add(author, new int[2]);
                    numGames[author][0]++;
                    numGames[author][1] += num;
                }
            }
            //a little sorting
            var orderedPairs = (from x in numGames
                                select new 
                                { Author = x.Key, Games=x.Value[0], Downloads = x.Value[1] }
                                ).OrderByDescending(y => y.Downloads);

            //and some output
            var sb = new StringBuilder();
            foreach (var pair in orderedPairs)
                sb.AppendFormat("{0} : {2} ({1})\r\n", pair.Author, pair.Games, pair.Downloads);
            File.WriteAllText("res.txt", sb.ToString());
        }
    }
}



[Formerly "capn_midnight". See some of my projects. Find me on twitter tumblr G+ Github.]

I'm more popular than MDickie, and I don't get GameTunnel interviews? Lame. [wink]

Obviously I need to get around to actually finishing more games soon. For some additional data, the games that I've posted to GDNet Showcase (Glow, CSRPG 2, CSRPG 1, Freezer 2, Muffins and Sloplifter) have been downloaded 5888 times in total from my own website.

The Showcase is pretty good by comparison (38% of my total downloads)! I wish it had a rotating "Game of the Day" feature so that older submissions wouldn't drop into obscurity, but there are an immense amount of people on these forums and it's easy for me to forget that.

[Edited by - Ravuya on April 28, 2009 3:29:44 PM]
Advertisement
Ha, I've actually wanted to see some statistics on the GD Showcase for a while. I'm only 6 downloads away from 1000! I can't believe it's been five years since I first uploaded a game to the showcase.
Some yearly and monthly upload activity stats. 2005 was a good year.
2004 : 232005 : 972006 : 502007 : 242008 : 212009 : 3 6/2004 : 5 7/2004 : 1 8/2004 : 6 9/2004 : 510/2004 : 211/2004 : 312/2004 : 1 1/2005 : 6 2/2005 : 6 3/2005 : 12 4/2005 : 7 5/2005 : 5 6/2005 : 12 7/2005 : 3 8/2005 : 6 9/2005 : 1510/2005 : 1011/2005 : 812/2005 : 7 1/2006 : 6 2/2006 : 1 3/2006 : 6 4/2006 : 4 5/2006 : 2 6/2006 : 2 7/2006 : 6 8/2006 : 7 9/2006 : 710/2006 : 111/2006 : 112/2006 : 7 1/2007 : 7 2/2007 : 1 3/2007 : 2 4/2007 : 1 5/2007 : 3 6/2007 : 2 7/2007 : 2 8/2007 : 2 9/2007 : 210/2007 : 2 1/2008 : 1 2/2008 : 6 3/2008 : 2 4/2008 : 3 6/2008 : 2 8/2008 : 310/2008 : 112/2008 : 3 1/2009 : 1 3/2009 : 2

[Formerly "capn_midnight". See some of my projects. Find me on twitter tumblr G+ Github.]

I can honestly say I don't recognise half of those names. Are these all-time statistics?
yes, the feature only came out in mid 2004

[Formerly "capn_midnight". See some of my projects. Find me on twitter tumblr G+ Github.]

Advertisement
Quote: Original post by capn_midnight
yes, the feature only came out in mid 2004

Actually it's been here since june of '00, it's just been wiped clean and started fresh since then. (when they upgraded to the new site)
http://web.archive.org/web/20000815235931/http://www.gamedev.net/community/gds/

I remember because i had a game or two on the old GDS i never bothered to copy over

Wow, cool stuff Capn'

Tip of the hat to you sir!

Drew Sikora
Executive Producer
GameDev.net

This topic is closed to new replies.

Advertisement