您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Adds submission, return, and abandonment_rates to the dashboard. Saves stats and only updates them when "Update stats" is clicked to reduce page requests.
// ==UserScript== // @name mmmturkeybacon Add Hidden Stats to Dashboard // @version 2.00 // @description Adds submission, return, and abandonment_rates to the dashboard. Saves stats and only updates them when "Update stats" is clicked to reduce page requests. // @author mmmturkeybacon // @namespace http://userscripts.org/users/523367 // @include https://www.mturk.com/mturk/dashboard // @require https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js // @grant GM_getValue // @grant GM_setValue // ==/UserScript== // Thanks to TheFrostlixen for showing me an alternative way to get the stats. $(document).ready(function() { var MPRE_CNT_MAX = 5; var qualification_dict = {}; qualification_dict['submission_rate'] = {'qualificationId': '00000000000000000000', 'value': GM_getValue('submission_rate', '?%')}; qualification_dict['return_rate'] = {'qualificationId': '000000000000000000E0', 'value': GM_getValue('return_rate', '?%')}; qualification_dict['abandonment_rate'] = {'qualificationId': '00000000000000000070', 'value': GM_getValue('abandonment_rate', '?%')}; var qualification_names = ['submission_rate', 'return_rate', 'abandonment_rate']; var request_loop_running = false; var stat_request_running = false; var success = false; var mpre_cnt = 0; var error = false; function stat_request(qualification_name) { stat_request_running = true; success = false; $.ajax( { url: 'https://www.mturk.com/mturk/requestqualification?qualificationId='+qualification_dict[qualification_name].qualificationId, type: 'GET', success: function(data) { var $src = $(data); var maxpagerate = $src.find('td[class="error_title"]:contains("You have exceeded the maximum allowed page request rate for this website.")'); if (maxpagerate.length == 0) { qualification_dict[qualification_name].value = $src.find('td[id="qualification_score"]:contains("Qualification Value")').next().text().trim() + '%'; $('td[id="'+qualification_name+'"]').html('✔'); success = true; } else { $('td[id="'+qualification_name+'"]').html('✖'); mpre_cnt++; if (mpre_cnt >= MPRE_CNT_MAX) { error = true; alert('mmmturkeybacon Add Hidden Stats to Dashboard: too many max page request rate errors'); } } stat_request_running = false; }, error: function(xhr, status, error) { $('td[id="'+qualification_name+'"]').html('✖'); error = true; alert('mmmturkeybacon Add Hidden Stats to Dashboard: timeout error'); stat_request_running = false; }, timeout: 3000 }); } function request_loop(i) { request_loop_running = true; if (error == false) { if (stat_request_running == false) { if (success == true) { i++; if (i < qualification_names.length) { stat_request(qualification_names[i]); setTimeout(function(){request_loop(i)}, 500); } else { GM_setValue('submission_rate', qualification_dict['submission_rate'].value); GM_setValue('return_rate', qualification_dict['return_rate'].value); GM_setValue('abandonment_rate', qualification_dict['abandonment_rate'].value); var $submitted_table = $('th[id="hit_totals.desc_dolumn_header.tooltop.1"]').parents('td[width="50%"]'); $('td[id="submission_rate"]').text(qualification_dict['submission_rate'].value); $('td[id="return_rate"]').text(qualification_dict['return_rate'].value); $('td[id="abandonment_rate"]').text(qualification_dict['abandonment_rate'].value); request_loop_running = false; } } else { stat_request(qualification_names[i]); setTimeout(function(){request_loop(i)}, 500); } } } else { request_loop_running = false; } } var $submitted_table = $('th[id="hit_totals.desc_dolumn_header.tooltop.1"]').parents('td[width="50%"]'); $submitted_table.before('<td width="50%"><table class="metrics-table" width="100%" style="display: inline-block"><tr class="metrics-table-header-row"><th class="metrics-table-first-header"><a id="hit_totals.desc_dolumn_header.tooltop.2" class="metrics-table-first-header">HITs You Have Accepted</a> <a id="mtb_update_stats" class="whatis" style="display: inline-block; cursor: pointer">(Update stats)</a></th><th id="user_metrics.rate_column_header.tooltip.2">Rate</th><tr class="odd"><td class="metrics-table-first-value">HITs Accepted</td><td>—</td></tr><tr class="even"><td class="metrics-table-first-value">... Submitted</td><td id="submission_rate">'+qualification_dict['submission_rate'].value+'</td></tr><tr class="odd"><td class="metrics-table-first-value">... Returned</td><td id="return_rate">'+qualification_dict['return_rate'].value+'</td></tr><tr class="even"><td class="metrics-table-first-value">... Abandoned</td><td id="abandonment_rate">'+qualification_dict['abandonment_rate'].value+'</td></tr></table></td>'); $('a[id="mtb_update_stats"]').bind('click', function() { if (request_loop_running == false) { request_loop_running = true; stat_request_running = false; success = false; mpre_cnt = 0; error = false; $('td[id="submission_rate"]').text('?%'); $('td[id="return_rate"]').text('?%'); $('td[id="abandonment_rate"]').text('?%'); request_loop(0); } }); });