osu! mp Exporter

Export Multiplay result as csv

  1. // ==UserScript==
  2. // @name osu! mp Exporter
  3. // @description Export Multiplay result as csv
  4. // @author JebwizOscar
  5. // @icon http://osu.ppy.sh/favicon.ico
  6. // @include https://osu.ppy.sh/mp/*
  7. // @include http://osu.ppy.sh/mp/*
  8. // @require http://code.jquery.com/jquery-1.11.1.min.js
  9. // @copyright 2014, Jeb
  10. // @version 0.1.0.7
  11. // @namespace https://greasyfork.org/users/3079
  12. // ==/UserScript==
  13.  
  14.  
  15. function exportToCSV(filename) {
  16. csvData="";
  17. a={};
  18. $('table').each(function(){
  19. var $rows = $(this).find('tr:has(td,th)');
  20. csv="";
  21. $(this).parent(0).parent(0).find('div').each(function(){
  22. if (
  23. (typeof($(this).attr('class'))=="undefined")
  24. &&
  25. (typeof($(this).attr('style'))=="undefined")
  26. ){
  27. csv = csv + '"' + $(this).text() + '"' + "\n" ;
  28. }if (
  29. ($(this).attr('class')=="maintext")
  30. ){
  31. csv = csv + $(this).text() + "" ;
  32. }
  33. });
  34. tmpColDelim = String.fromCharCode(11),
  35. tmpRowDelim = String.fromCharCode(0),
  36. colDelim2 = '","',
  37. rowDelim2 = '"\n"',
  38. d = $rows.map(function (i, row) {
  39. var $row = $(row),
  40. $cols = $row.find('td,th');
  41. return $cols.map(function (j, col) {
  42. var $col = $(col),
  43. text = $col.text();
  44. return text.replace('"', '""');
  45. }).get().join(tmpColDelim);
  46. }).get().join(rowDelim2).split(tmpColDelim).join(colDelim2) + '"';
  47. csv = csv + '"' + d;
  48. colDelim = '","',
  49. rowDelim = '"],\n["',
  50. e = '[["' + $rows.map(function (i, row) {
  51. var $row = $(row),
  52. $cols = $row.find('td');
  53. return $cols.map(function (j, col) {
  54. var $col = $(col),
  55. text = $col.text();
  56. return text.replace('"', '""');
  57. }).get().join(tmpColDelim);
  58. }).get().join(rowDelim+'')
  59. .split(tmpColDelim).join(colDelim) + '"]]';
  60. j = eval('('+e+')');
  61. j.shift();
  62. x = j.sort(function(a,b){return b[1].replace(/[^0-9]/g,"")-a[1].replace(/[^0-9]/g,"")});
  63. for(i in x){
  64. if (typeof(a[x[i][3]])=='undefined')
  65. a[x[i][3]]=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];
  66. a[x[i][3]][parseInt(i)+1]++;
  67. a[x[i][3]][0]+=parseInt(x[i][1].replace(/[^0-9]/g,""));
  68. }
  69. csvData = csvData + encodeURIComponent(csv + "\n"+ "\n") ;
  70. });
  71. csvData = csvData + encodeURIComponent("\n"+ "\n") ;
  72. csvData = csvData + encodeURIComponent('"Name","Total Score"') ;
  73. for(o=1;o<=16;o++)
  74. csvData = csvData + encodeURIComponent(',"#'+o.toString()+'"') ;
  75. for(i in a){
  76. csvData = csvData + encodeURIComponent("\n"+'"'+i+'","'+a[i][0].toString()+'"') ;
  77. for(o=1;o<=16;o++)
  78. csvData = csvData + encodeURIComponent(',"'+a[i][o].toString()+'"') ;
  79. }
  80. $(this)
  81. .attr({
  82. 'download': filename,
  83. 'href': 'data:application/csv;charset=utf-8,%EF%BB%BF' + csvData,
  84. 'target': '_blank'
  85. });
  86. }
  87. $('.mphistory').prepend('<center><a class="export" style="text-decoration: none;color:#000;background-color:#ddd; border: 1px solid #ccc; padding:8px;" target="_blank">Export Table data into csv</a></center>');
  88.  
  89. $(".export").on('click', function (event) {
  90. exportToCSV.apply(this, ['export.csv']);
  91. });