// ==UserScript== // @name CrowdSource: Search Keywords // @version 3.4 // @description Click on the circle task number indicators on the left to start working // @copyright 2013+, John Stoehr, Tjololo12 // ------------------------------------------------------------------------------------ // @match https://work.crowdsource.com/amt/view* // @match https://www.google.ca/search* // @match https://www.google.com/search* // @match https://www.google.co.uk/search* // @match https://www.google.it/search* // @match https://www.google.ng/search* // @match http://www.bing.com/search* // @run-at document-end // @require http://code.jquery.com/jquery-git.js // @require https://greasyfork.org/scripts/2352-parseuri-license/code/parseuri%20license.js?version=6261 // @grant GM_xmlhttpRequest // @namespace https://greasyfork.org/users/710 // @downloadURL https://update.greasyfork.icu/scripts/910/CrowdSource%3A%20Search%20Keywords.user.js // @updateURL https://update.greasyfork.icu/scripts/910/CrowdSource%3A%20Search%20Keywords.meta.js // ==/UserScript== //parseUri.options.strictMode = true; // Source: http://stackoverflow.com/a/4673436/2405722 String.prototype.format = function() { var args = arguments; return this.replace(/\{(\d+)\}/g, function(match, number) { return args[number] !== undefined ? args[number] : match; }); }; var mturkOrigins = ["https://work.crowdsource.com/amt/view"]; //var googleAPIPrefix="https://ajax.googleapis.com/ajax/services/search/web?v=1.0&"; var googleAPIPrefix="https://www.google.com/search?q="; //var ip = myIP(); //console.log(ip); var numTasks = 0; var interval = 0; var completedTasks = 0; function myIP() { try{ GM_xmlhttpRequest({ method: 'GET', url: "http://smart-ip.net/geoip-json", synchronous: true, onload: function (xhr) { r = xhr.responseText; var data = $.parseJSON(xhr.responseText); if (data["host"]) googleAPIPrefix+="userip="+data["host"].trim()+"&q="; else googleAPIPrefix+="q="; console.log(googleAPIPrefix); } }); } catch(err){ console.log(err); } } function httpGet(theUrl,taskNum) { var taskNumber = taskNum; GM_xmlhttpRequest({ method: 'GET', url: theUrl, synchronous: true, onload: function (xhr,taskNum) { r = xhr.responseText; //console.log(r); var ret=""; try{ //var data = $.parseJSON(xhr.responseText); ret = getUrl(r); //console.log(taskNumber); window.postMessage({magicword: "mumbojumbo", task: taskNumber, url: ret}, "*"); } catch(err){ console.log(err); console.log(r); return r; } } }); } function getGoogle(theUrl,taskNum) { var taskNumber = taskNum; GM_xmlhttpRequest({ method: 'GET', url: theUrl, synchronous: true, onload: function (xhr,taskNum) { r = xhr.responseText; //console.log(r); var ret=""; try{ //var data = $.parseJSON(xhr.responseText); ret = createDiv(r); //console.log(taskNumber); //window.postMessage({magicword: "mumbojumbo", task: taskNumber, url: ret}, "*"); } catch(err){ console.log(err); console.log(r); return r; } } }); } function checkTasks(){ for (var i = 0; i < numTasks; i++){ var taskNum = i+1; if (GM_getValue("task-"+taskNum)){ var url = GM_getValue("task-"+taskNum); $(".task-{0}".format(taskNum)).next().find("input").val(url); GM_deleteValue("task-"+taskNum); console.log(url); completedTasks++; if (completedTasks == numTasks) window.clearInterval(interval); } else{ console.log("None for "+taskNum); } } } function getRandomInt (min, max) { return Math.floor(Math.random() * (max - min + 1)) + min; } function isMturkOrigin(url) { for (var i = 0; i < mturkOrigins.length; ++i) { if (url.indexOf(mturkOrigins[i]) === 0) { return true; } } return false; } function getGoogleResults(term,task){ var searchURL = googleAPIPrefix+encodeURIComponent(term); var ret = httpGet(searchURL, task); return ret; } function openDiv(term,task){ var searchURL = googleAPIPrefix+encodeURIComponent(term); var ret = getGoogle(searchURL, task); console.log(ret); return ret; } function getUrl(obj){ //console.log(obj["responseData"]); var html = $.parseHTML(obj); //var results = obj["responseData"]["results"]; //var responseNum = getRandomInt(0,3); //var finalUrl = results[responseNum]["unescapedUrl"]; var el = $( '
' ); var finalUrl = ""; el.html(html); var element = $("#rso li.g", el).eq(getRandomInt(0,4)); if (element.attr("class") === "g" || element.attr("class") === "g no-sep" && element.attr("id") == null){ var $h3 = element.find("h3.r").first(); if ($h3.length > 0) { finalUrl = $h3.find("a")[0].href; } } console.log(element); return finalUrl; } function sleep(ms) { var start = new Date().getTime(), expire = start + ms; while (new Date().getTime() < expire) { } return; } if (isMturkOrigin(location.href)) { // make task number indicator (circle) clickable $('label[for^=URL]').each( function() { numTasks++; var id = $(this).attr('for'); $(this).append( $("", { type: "button", text: "Search "+$(this).attr("for").replace(/URL-?(\d{1,2}).*/, '$1') }).click(function() { var $task = $(this).parent().parent().prev(); var taskNumber = parseInt($(this).parent().attr("for").replace(/URL-?(\d{1,2}).*/, '$1')); $task.addClass("task-" + taskNumber); var textRepText = $task.text(); var prefix = "Keyword:"; var keywords = $.trim(textRepText.substr(textRepText.indexOf(prefix) + prefix.length)); var keywordsEncoded = encodeURIComponent(keywords).replace(/%20/g, "+"); //console.log(keywords); // launch google or bing search window/tab var projectTitle = $(".projectTitle").text(); var domain = $.trim(projectTitle.substr(projectTitle.lastIndexOf(" "))).toLowerCase(); var googleOrigin = (domain.match(/.*bing.*/) ? "http://www.{0}".format(domain) : "http://www.{0}".format(domain)); //openDiv(keywords,taskNumber); sleep(500); //added in rate limiting because issues. Should be virtually un-noticeable. window.open("{0}/search?q={1}&magicword={2}&task={3}".format(googleOrigin, keywordsEncoded, "mumbojumbo", taskNumber)); //console.log("{0}/search?q={1}&magicword={2}&task={3}".format(googleOrigin, keywordsEncoded, "mumbojumbo", taskNumber)); })); }); console.log(numTasks); interval = setInterval(function() {checkTasks();}, 5000); window.addEventListener("message", function(e) { if (e.data.magicword === "mumbojumbo") { console.log("Message Received"); //console.log(e.data); $(".task-{0}".format(e.data.task)).next().find("input").val(e.data.url); } else{ console.log("Also message received"); console.log(e.data); } }, false); } else if (window.opener != null && window.location.href.indexOf("mumbojumbo") > -1) { console.log(window.opener); window.opener.postMessage("Child Frame Loaded", "*"); $("#rso li.g").each(function() { if (($(this).attr("class") === "g" || $(this).attr("class") === "g no-sep") && $(this).attr("id") == null) { var $h3 = $(this).find("h3.r").first(); if ($h3.length > 0) { var taskNumber = parseUri(location.href).queryKey.task; var pageUrl = $h3.find("a")[0].href; $("", { type: "button", text: "Submit" }).click(function() { window.opener.postMessage({magicword: "mumbojumbo", task: taskNumber, url: pageUrl}, "*"); //GM_setValue("task-"+taskNumber,pageUrl); //console.log(GM_getValue("task-"+taskNumber)); //setCookie(taskNumber, pageUrl) window.close(); }).prependTo($h3); } } }); $("#b_results li.b_algo").each(function() { if ($(this).attr("class") === "b_algo" && $(this).attr("id") == null) { var $h3 = $(this).find("h2").first(); if ($h3.length > 0) { var taskNumber = parseUri(location.href).queryKey.task; var pageUrl = $h3.find("a")[0].href; $("", { type: "button", text: "Submit" }).click(function() { window.opener.postMessage({magicword: "mumbojumbo", task: taskNumber, url: pageUrl}, "*"); window.close(); }).prependTo($h3); } } }); }