DeathByCatpcha API Wrapper

API wrapper for using DeathByCaptcha's decaptcha service

אין להתקין סקריפט זה ישירות. זוהי ספריה עבור סקריפטים אחרים // @require https://update.greatest.deepsurf.us/scripts/9125/158918/DeathByCatpcha%20API%20Wrapper.js

  1. // ==UserScript==
  2. // @name DeathByCatpcha API Wrapper
  3. // @grant GM_xmlhttpRequest
  4. // ==/UserScript==
  5.  
  6.  
  7. function DeathByCaptcha (dbc_user, dbc_pass) {
  8. this.user = dbc_user;
  9. this.pass = dbc_pass;
  10.  
  11. this.balance = function balance(callback) {
  12. var reqUrl = 'http://api.dbcapi.me/api/user';
  13. var formData = new FormData();
  14. formData.append('username', this.user);
  15. formData.append('password', this.pass);
  16.  
  17. GM_xmlhttpRequest({
  18. method: 'POST',
  19. headers: {
  20. 'Accept': 'application/json'
  21. },
  22. data: formData,
  23. url: reqUrl,
  24. onload: function (response) {
  25. if (response.status === 200) {
  26. var balance = JSON.parse(response.responseText).balance;
  27. callback(null, balance);
  28. } else {
  29. callback(new Error(response.status), null);
  30. }
  31. }
  32. });
  33. };
  34.  
  35. this.report = function report(capId, callback) {
  36. var reportUrl = 'http://api.dbcapi.me/api/captcha/' + capId + '/report';
  37. var formData = new FormData();
  38. formData.append('username', this.user);
  39. formData.append('password', this.pass);
  40.  
  41. GM_xmlhttpRequest({
  42. method: 'POST',
  43. data: formData,
  44. url: reportUrl,
  45. onload: function (response) {
  46. if (response.status === 200) {
  47. console.log('DeathByCaptcha: captcha reported as incorrect');
  48. callback(null);
  49. } else {
  50. callback(new Error(response.status));
  51. }
  52. }
  53. });
  54. };
  55.  
  56. this.solve = function solve(imgNode, callback) {
  57.  
  58. //create base64 uri
  59. var canvas = document.createElement('CANVAS');
  60. var ctx = canvas.getContext('2d');
  61. canvas.height = imgNode.height;
  62. canvas.width = imgNode.width;
  63. ctx.drawImage(img, 0, 0);
  64. var imgB64 = canvas.toDataURL().replace(/data:image\/(png|jpg);base64,/, 'base64:');
  65.  
  66. //create form to submit to DBC
  67. var formData = new FormData();
  68. formData.append('username', this.user);
  69. formData.append('password', this.pass);
  70. formData.append('captchafile', imgB64);
  71.  
  72. //upload captcha to DBC
  73. GM_xmlhttpRequest({
  74. method: 'POST',
  75. data: formData,
  76. url: 'http://api.dbcapi.me/api/captcha',
  77. onload: function (response) {
  78.  
  79. //return http errors
  80. switch (response.status) {
  81. case 403:
  82. console.error('DeathByCaptcha: 403 Forbidden - Invalid credentails or insufficient credits');
  83. callback(new Error(403));
  84. return;
  85. case 400:
  86. console.error('DeathByCaptcha: 300 Bad Request');
  87. callback(new Error(400));
  88. return;
  89. case 500:
  90. callback(new Error(500));
  91. console.error('DeathByCaptcha: 500 Internal Server Error');
  92. return;
  93. case 503:
  94. console.error('DeathByCaptcha: 503 Service Temporarily Unavailable');
  95. callback(new Error(503));
  96. return;
  97. }
  98.  
  99. console.log('DeathByCaptcha: Uploaded captcha');
  100. console.log("DeathByCaptcha: URL - " + response.finalUrl);
  101.  
  102.  
  103. //check every 2 seconds if captcha is solved
  104. var pollTimer = setInterval(function () {
  105. GM_xmlhttpRequest({
  106. method: 'GET',
  107. headers: {
  108. 'Accept': 'application/json'
  109. },
  110. url: capUrl,
  111. onload: function (response) {
  112. console.log('DeathByCaptcha: Checking for solved captcha.');
  113.  
  114. if (response.status === 404) {
  115. clearInterval(pollTimer);
  116. console.log('DeathByCaptcha: Captcha ID Not Found.');
  117. callback(new Error(404));
  118.  
  119. } else if (response.status === 200) {
  120.  
  121.  
  122. var solution = JSON.parse(response.responseText).text;
  123. var capId = JSON.parse(response.responseText).captcha;
  124.  
  125. if (solution !== '') {
  126. clearInterval(pollTimer);
  127. console.log('DeathByCaptcha: Captcha solved');
  128.  
  129. callback(null, solution, capId);
  130. }
  131. }
  132. }
  133. });
  134. }, 2000);
  135. }
  136. });
  137. };
  138. }