3

The use case is to generate a list of bug report submissions, grouped by User, of the following counts in descending order:

  • bug
  • bug + status-completed
  • bug + status-deferred
  • bug + status-bydesign
  • bug + status-declined

e.g.

user   bugs   completed   deferred  bydesign   declined
------+------+-----------+---------+----------+----------
joe    10     4            3         1          1
.....

Post your solution to this use case in the language/library syntax of your choice.

Steffen Opel
  • 1,380
  • 8
  • 14
Sky Sanders
  • 12,068
  • 3
  • 31
  • 60
  • Would you be able to post Soapi.JS examples? I would myself but have limited time on my hands. – Nathan Osman Aug 16 '10 at 23:00
  • @geo - i went ahead and posted for the other questions but this one i will wait until tonight. – Sky Sanders Aug 17 '10 at 01:04
  • Great! Thanks so much. Completely unrelated, but I would love to collaborate with you on that ActionScript wrapper :) - please let me know when you have the time... I know you're quite busy. – Nathan Osman Aug 17 '10 at 02:16
  • @geo - r.e. the AS port: that sounds good. when i get the new js lib done we can start exploring options. – Sky Sanders Aug 17 '10 at 17:38

1 Answers1

1

C# / Soapi.CS


using Soapi.CS


Site site = Context.Official.StackApps;

var bugs = new List<Question>();

// put all questions from all users which // have tag 'bug' site.Users.PageSize(100).PageCount(0) // all users .Where(user => user.QuestionCount > 0) // that have q .Select(user => user.UserId) // get user_id .InBatches(100).ToList() // in batches of 100 .ForEach(batch =>
bugs.AddRange( // q with 'bug' from this batch of 100 users site.Users.ById(batch).Questions .PageCount(0).PageSize(100) .Where(q => q.Tags.Contains("bug"))));

Console.WriteLine("User\t\tTotal\tResolved\rDeferred\tRTFM!\tWRYS"); Console.WriteLine("-----------------------------------------------------------");

// group, sort and dump bugs.GroupBy(q => q.OwnerId).Select(g => new { g.First().Owner.DisplayName, BugCount = g.Count(), Resolved = g.Count(q => q.Tags.Contains("status-completed")), Deferred = g.Count(q => q.Tags.Contains("status-deferred")), ByDesign = g.Count(q => q.Tags.Contains("status-bydesign")), Declined = g.Count(q => q.Tags.Contains("status-declined")) }).OrderByDescending(item => item.BugCount) .ThenByDescending(item => item.Resolved) .ThenByDescending(item => item.Deferred) .ThenByDescending(item => item.ByDesign) .ThenByDescending(item => item.Declined) .ToList().ForEach(item => Console.WriteLine("{0}\t{1}\t{2}\t{3}\t{4}\t{5}", item.DisplayName, item.BugCount, item.Resolved, item.Deferred, item.ByDesign, item.Declined));

Output:

User        Total    Resolved Deferred    RTFM!    WRYS
-----------------------------------------------------------
code poet    26    23    0    1    0
George Edison    12    8    0    3    0
systempuntoout    8    5    0    3    0
S.Mark    7    5    0    1    0
Dennis Williamson    6    5    0    1    0
Bill the Lizard    6    4    1    1    0
ColinD    5    5    0    0    0
Felix    4    4    0    0    0
Franci Penov    4    2    1    0    0
carson    3    3    0    0    0
Steffen Opel    3    2    0    0    0
Peter Mourfield    2    2    0    0    0
Jonathan    2    2    0    0    0
jjnguy    1    1    0    0    0
Greg Bray    1    1    0    0    0
mikej    1    1    0    0    0
coobird    1    1    0    0    0
Peter Mortensen    1    1    0    0    0
Bialecki    1    1    0    0    0
Martin Plante    1    1    0    0    0
SztupY    1    1    0    0    0
Adam Wright    1    1    0    0    0
magcius    1    1    0    0    0
Wei Hu    1    1    0    0    0
ADB    1    1    0    0    0
Farseeker    1    0    0    1    0
Matt S.    1    0    0    1    0
radius    1    0    0    1    0
Jedi Master Spooky    1    0    0    1    0
Dave DeLong    1    0    0    1    0
lfoust    1    0    0    1    0
Dave Swersky    1    0    0    1    0
RichOrr    1    0    0    1    0
Can Berk Güder    1    0    0    1    0
Artefacto    1    0    0    1    0
Jim McKeeth    1    0    0    1    0
tonklon    1    0    0    0    0
Portman    1    0    0    0    0
Shay Erlichmen    1    0    0    0    0
Nick Presta    1    0    0    0    0

Requests generated

Result Protocol Host URL Body Caching Content-Type Process Comments Custom

1 200 HTTP api.stackapps.com /1.0/users?pagesize=100&key=foo-bar-fu 34,613 private application/json; charset=utf-8 jetbrains.resharper.taskrunner.msil:3848
2 200 HTTP api.stackapps.com /1.0/users?page=2&pagesize=100&key=foo-bar-fu 29,504 private application/json; charset=utf-8 jetbrains.resharper.taskrunner.msil:3848
3 200 HTTP api.stackapps.com /1.0/users?page=3&pagesize=100&key=foo-bar-fu 25,438 private application/json; charset=utf-8 jetbrains.resharper.taskrunner.msil:3848
4 200 HTTP api.stackapps.com /1.0/users?page=4&pagesize=100&key=foo-bar-fu 30,203 private application/json; charset=utf-8 jetbrains.resharper.taskrunner.msil:3848
5 200 HTTP api.stackapps.com /1.0/users?page=5&pagesize=100&key=foo-bar-fu 25,295 private application/json; charset=utf-8 jetbrains.resharper.taskrunner.msil:3848
6 200 HTTP api.stackapps.com /1.0/users?page=6&pagesize=100&key=foo-bar-fu 27,335 private application/json; charset=utf-8 jetbrains.resharper.taskrunner.msil:3848
7 200 HTTP api.stackapps.com /1.0/users?page=7&pagesize=100&key=foo-bar-fu 26,925 private application/json; charset=utf-8 jetbrains.resharper.taskrunner.msil:3848
8 200 HTTP api.stackapps.com /1.0/users?page=8&pagesize=100&key=foo-bar-fu 26,285 private application/json; charset=utf-8 jetbrains.resharper.taskrunner.msil:3848
9 200 HTTP api.stackapps.com /1.0/users?page=9&pagesize=100&key=foo-bar-fu 24,423 private application/json; charset=utf-8 jetbrains.resharper.taskrunner.msil:3848
10 200 HTTP api.stackapps.com /1.0/users?page=10&pagesize=100&key=foo-bar-fu 27,587 private application/json; charset=utf-8 jetbrains.resharper.taskrunner.msil:3848
11 200 HTTP api.stackapps.com /1.0/users?page=11&pagesize=100&key=foo-bar-fu 25,370 private application/json; charset=utf-8 jetbrains.resharper.taskrunner.msil:3848
12 200 HTTP api.stackapps.com /1.0/users?page=12&pagesize=100&key=foo-bar-fu 27,376 private application/json; charset=utf-8 jetbrains.resharper.taskrunner.msil:3848
13 200 HTTP api.stackapps.com /1.0/users?page=13&pagesize=100&key=foo-bar-fu 26,470 private application/json; charset=utf-8 jetbrains.resharper.taskrunner.msil:3848
14 200 HTTP api.stackapps.com /1.0/users?page=14&pagesize=100&key=foo-bar-fu 27,049 private application/json; charset=utf-8 jetbrains.resharper.taskrunner.msil:3848
15 200 HTTP api.stackapps.com /1.0/users?page=15&pagesize=100&key=foo-bar-fu 25,317 private application/json; charset=utf-8 jetbrains.resharper.taskrunner.msil:3848
16 200 HTTP api.stackapps.com /1.0/users?page=16&pagesize=100&key=foo-bar-fu 24,794 private application/json; charset=utf-8 jetbrains.resharper.taskrunner.msil:3848
17 200 HTTP api.stackapps.com /1.0/users?page=17&pagesize=100&key=foo-bar-fu 23,604 private application/json; charset=utf-8 jetbrains.resharper.taskrunner.msil:3848
18 200 HTTP api.stackapps.com /1.0/users?page=19&pagesize=100&key=foo-bar-fu 25,732 private application/json; charset=utf-8 jetbrains.resharper.taskrunner.msil:3848
19 200 HTTP api.stackapps.com /1.0/users?page=18&pagesize=100&key=foo-bar-fu 25,322 private application/json; charset=utf-8 jetbrains.resharper.taskrunner.msil:3848
20 200 HTTP api.stackapps.com /1.0/users?page=21&pagesize=100&key=foo-bar-fu 20,903 private application/json; charset=utf-8 jetbrains.resharper.taskrunner.msil:3848
21 200 HTTP api.stackapps.com /1.0/users?page=20&pagesize=100&key=foo-bar-fu 24,952 private application/json; charset=utf-8 jetbrains.resharper.taskrunner.msil:3848
22 200 HTTP api.stackapps.com /1.0/users?page=22&pagesize=100&key=foo-bar-fu 19,586 private application/json; charset=utf-8 jetbrains.resharper.taskrunner.msil:3848
23 200 HTTP api.stackapps.com /1.0/users?page=24&pagesize=100&key=foo-bar-fu 19,628 private application/json; charset=utf-8 jetbrains.resharper.taskrunner.msil:3848
24 200 HTTP api.stackapps.com /1.0/users?page=25&pagesize=100&key=foo-bar-fu 21,179 private application/json; charset=utf-8 jetbrains.resharper.taskrunner.msil:3848
25 200 HTTP api.stackapps.com /1.0/users?page=23&pagesize=100&key=foo-bar-fu 19,149 private application/json; charset=utf-8 jetbrains.resharper.taskrunner.msil:3848
26 200 HTTP api.stackapps.com /1.0/users?page=26&pagesize=100&key=foo-bar-fu 19,142 private application/json; charset=utf-8 jetbrains.resharper.taskrunner.msil:3848
27 200 HTTP api.stackapps.com /1.0/users?page=27&pagesize=100&key=foo-bar-fu 22,512 private application/json; charset=utf-8 jetbrains.resharper.taskrunner.msil:3848
28 200 HTTP api.stackapps.com /1.0/users?page=28&pagesize=100&key=foo-bar-fu 20,692 private application/json; charset=utf-8 jetbrains.resharper.taskrunner.msil:3848
29 200 HTTP api.stackapps.com /1.0/users?page=30&pagesize=100&key=foo-bar-fu 7,239 private application/json; charset=utf-8 jetbrains.resharper.taskrunner.msil:3848
30 200 HTTP api.stackapps.com /1.0/users?page=29&pagesize=100&key=foo-bar-fu 17,528 private application/json; charset=utf-8 jetbrains.resharper.taskrunner.msil:3848
31 200 HTTP api.stackapps.com /1.0/users/18;2;14;11;51;23;33;8;448;17;30;43;199;56;40;13;39;29;5;9;19;32;127;28;1026;2894;20;26;52;37;816;825;956;377;1241;570;1290;171;1048;192;700;1265;614;839;431;113;295;222;4;1049;1031;42;1395;186;664;1394;638;1263;939;680;757;358;451;424;1303;449;756;2287;693;938;150;151;234;2192;2296;140;339;91;138;553;375;1174;1221;1978;2442;2883;44;239;109;169;505;2734;1270;525;1578;2083;1942;2203;2300;2118/questions?pagesize=100&key=foo-bar-fu 14,688 private application/json; charset=utf-8 jetbrains.resharper.taskrunner.msil:3848
32 200 HTTP api.stackapps.com /1.0/users/18;2;14;11;51;23;33;8;448;17;30;43;199;56;40;13;39;29;5;9;19;32;127;28;1026;2894;20;26;52;37;816;825;956;377;1241;570;1290;171;1048;192;700;1265;614;839;431;113;295;222;4;1049;1031;42;1395;186;664;1394;638;1263;939;680;757;358;451;424;1303;449;756;2287;693;938;150;151;234;2192;2296;140;339;91;138;553;375;1174;1221;1978;2442;2883;44;239;109;169;505;2734;1270;525;1578;2083;1942;2203;2300;2118/questions?page=2&pagesize=100&key=foo-bar-fu 14,521 private application/json; charset=utf-8 jetbrains.resharper.taskrunner.msil:3848
33 200 HTTP api.stackapps.com /1.0/users/18;2;14;11;51;23;33;8;448;17;30;43;199;56;40;13;39;29;5;9;19;32;127;28;1026;2894;20;26;52;37;816;825;956;377;1241;570;1290;171;1048;192;700;1265;614;839;431;113;295;222;4;1049;1031;42;1395;186;664;1394;638;1263;939;680;757;358;451;424;1303;449;756;2287;693;938;150;151;234;2192;2296;140;339;91;138;553;375;1174;1221;1978;2442;2883;44;239;109;169;505;2734;1270;525;1578;2083;1942;2203;2300;2118/questions?page=3&pagesize=100&key=foo-bar-fu 14,226 private application/json; charset=utf-8 jetbrains.resharper.taskrunner.msil:3848
34 200 HTTP api.stackapps.com /1.0/users/18;2;14;11;51;23;33;8;448;17;30;43;199;56;40;13;39;29;5;9;19;32;127;28;1026;2894;20;26;52;37;816;825;956;377;1241;570;1290;171;1048;192;700;1265;614;839;431;113;295;222;4;1049;1031;42;1395;186;664;1394;638;1263;939;680;757;358;451;424;1303;449;756;2287;693;938;150;151;234;2192;2296;140;339;91;138;553;375;1174;1221;1978;2442;2883;44;239;109;169;505;2734;1270;525;1578;2083;1942;2203;2300;2118/questions?page=4&pagesize=100&key=foo-bar-fu 14,146 private application/json; charset=utf-8 jetbrains.resharper.taskrunner.msil:3848
35 200 HTTP api.stackapps.com /1.0/users/18;2;14;11;51;23;33;8;448;17;30;43;199;56;40;13;39;29;5;9;19;32;127;28;1026;2894;20;26;52;37;816;825;956;377;1241;570;1290;171;1048;192;700;1265;614;839;431;113;295;222;4;1049;1031;42;1395;186;664;1394;638;1263;939;680;757;358;451;424;1303;449;756;2287;693;938;150;151;234;2192;2296;140;339;91;138;553;375;1174;1221;1978;2442;2883;44;239;109;169;505;2734;1270;525;1578;2083;1942;2203;2300;2118/questions?page=5&pagesize=100&key=foo-bar-fu 9,958 private application/json; charset=utf-8 jetbrains.resharper.taskrunner.msil:3848
36 200 HTTP api.stackapps.com /1.0/users/298;1177;1179;1911;2134;2618;636;1856;1986;2679;267;1771;705;1230;1339;1416;2139;2951;587;168;216;1097;892;2532;2616;2222;866;1304;2829;2517;2662;1384;1711;1918;2603;564;1044;2125;1924;1849;1232;667;2418;2467;70;2292;1009;1689;1749;1676;2735/questions?pagesize=100&key=foo-bar-fu 8,925 private application/json; charset=utf-8 jetbrains.resharper.taskrunner.msil:3848

Sky Sanders
  • 12,068
  • 3
  • 31
  • 60