Advertisement
Guest User

MAL seiyuu years jQuery userscript for GreaseMonkey

a guest
Apr 21st, 2016
3,374
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // ==UserScript==
  2. // @name        MAL seiyuu years jQuery
  3. // @namespace   Taosique
  4. // @version     1
  5. // @include     http://myanimelist.net/people/*
  6. // @require     http://ajax.googleapis.com/ajax/libs/jquery/2.2.2/jquery.js
  7. // @grant       GM_xmlhttpRequest
  8. // @grant       GM_getValue
  9. // @grant       GM_setValue
  10. // @noframes
  11.  
  12. /// <reference path="jquery-2.1.0-vsdoc.js" />
  13.  
  14. var specialCases = ['anime', 'manga'];
  15.  
  16. specialCases['anime'] = [];
  17. specialCases['anime'][6055] = 1988;
  18. specialCases['anime'][7279] = 2009;
  19. specialCases['anime'][14467] = 2012;
  20.  
  21. specialCases['manga'] = [];
  22. specialCases['manga'][2990] = 1996;
  23. specialCases['manga'][5953] = 1979;
  24. specialCases['manga'][7097] = 2004;
  25. specialCases['manga'][7688] = 2002;
  26. specialCases['manga'][12523] = 1986;
  27. specialCases['manga'][25852] = 2011;
  28. specialCases['manga'][32965] = 2010;
  29. specialCases['manga'][35475] = 1988;
  30. specialCases['manga'][41361] = 1988;
  31. specialCases['manga'][53565] = 2008;
  32. specialCases['manga'][72583] = 2014;
  33. specialCases['manga'][88170] = 2009;
  34. specialCases['manga'][90756] = 2011;
  35.  
  36. var entries = [];
  37.  
  38. function getGmValueKey(entryType, entryIndex) {
  39.     return 'MAL_year_' + entryType + '_' + entryIndex;
  40. }
  41.  
  42. $(".normal_header").each(function (index, normal_header) {
  43.     var headerText = $(normal_header).contents().get(1);
  44.     if (headerText) {
  45.         var entryType = '';
  46.         switch ($(headerText).text()) {
  47.             case 'Voice Acting Roles':
  48.             case 'Anime Staff Positions':
  49.                 entryType = 'anime';
  50.                 break;
  51.             case 'Published Manga':
  52.                 entryType = 'manga';
  53.                 break;
  54.             default:
  55.                 return;
  56.                 break;
  57.         }
  58.         var previousIndex;
  59.         $(normal_header).next('table').find('tr').each(function (index, tr) {
  60.             var a = $(tr).find('a:eq(1)');
  61.             var entryIndex = a.attr('href').split('/', 3)[2];
  62.             var entryGmValueKey = getGmValueKey(entryType, entryIndex);
  63.             if (entryIndex != previousIndex) {
  64.                 previousIndex == entryIndex;
  65.                 var entryName = a.text();
  66.                 entries.push({
  67.                     type: entryType,
  68.                     index: entryIndex,
  69.                     name: entryName,
  70.                     gmValueKey: entryGmValueKey
  71.                 });
  72.             }
  73.             $(tr).find('td:eq(1)').after($('<td></td>', {
  74.                 id: entryGmValueKey,
  75.                 'class': 'borderClass ' + entryGmValueKey,
  76.                 width: 25,
  77.                 valign: 'top',
  78.                 nowrap: '',
  79.                 align: 'left'
  80.             }));
  81.         });
  82.     }
  83. });
  84.  
  85. var requestCount = 0;
  86.  
  87. entries.forEach(function (entry, index) {
  88.     var year = GM_getValue(entry.gmValueKey, null);
  89.     if (!year) {
  90.         year = specialCases[entry.type][entry.index];
  91.     }
  92.     if (year && year != '0000') {
  93.         $('.' + entry.gmValueKey).text(year);
  94.     } else
  95.         {
  96.             setTimeout(function () {
  97.                 $.ajax('http://myanimelist.net/api/' + entry.type + '/search.xml?q=' + encodeURIComponent(entry.name),
  98.                         {
  99. /*
  100. You can specify your username and password to avoid prompt every time:
  101.                             username: 'UserName',
  102.                             password: 'password#123',
  103. */
  104.                             method: 'GET',
  105.                             context: entry,
  106.                             success: function (xml, textStatus, xhr) {
  107.                                 var contextIndex = this.index;
  108.                                 var $xmlEntry = $(xml).find('id').filter(function () { return $(this).text() == contextIndex; });
  109.                                 if ($xmlEntry.length == 1) {
  110.                                     year = $xmlEntry.siblings('start_date:eq(0)').text().substr(0, 4);
  111.                                     if (year) {
  112.                                         if (year != '0000') {
  113.                                             $('.' + entry.gmValueKey).text(year);
  114.                                             GM_setValue(this.gmValueKey, year);
  115.                                         }
  116.                                     }
  117.                                 }
  118.                             },
  119.                         });
  120.             }, (requestCount++) * 100);
  121.         }
  122. });
  123.  
  124. // ==/UserScript==
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement