Greasemonkey - выбор случайных слов со страницы результатов поиска - PullRequest
0 голосов
/ 14 июля 2011

Я работаю над небольшим проектом, но, похоже, застрял на этом этапе.Надеюсь, некоторые из вас, великие люди, смогут помочь мне в этом.

Я пытаюсь найти простой и эффективный способ выбрать СЛУЧАЙНОЕ слово или слова со страницы результатов поиска.Это та часть, на которой я застрял.

После ее выбора я буду хранить слова в переменной.

Результаты поиска выглядят так: http://i54.tinypic.com/34fllw1.png

Спасибо заранее.Любые советы / помощь будет принята с благодарностью!

РЕДАКТИРОВАТЬ: Есть ли способ, чтобы я мог выбрать строку последовательных слов произвольной длины?

Ответы [ 3 ]

1 голос
/ 14 июля 2011

Класс Google использует для описаний st, поэтому вот улучшение решения Dr.Molle:

//get the text
var text=document.querySelector(".st"),output=[];
//loop through the descriptions
for(var i=0;i<text.length;i++){
    //find the words
    var words=text[i].innerText.match(/\b([a-z]{3,})\b/gi);
    //push the array to the output variable
    output.push.apply(output,words);
}
//pick a word
var theWord=output[Math.floor(Math.random()*output.length)];
//now theWord has a randomly chosen word
alert(theWord);

И, чтобы выбрать несколько слов:

//change the 10 to the max number of words
var amount=Math.floor(Math.random()*10),theWords="";
    //get the text
var text=document.querySelector(".st"),output=[];
//loop through the descriptions
for(var i=0;i<text.length;i++){
    //find the words
    var words=text[i].innerText.match(/\b([a-z]{3,})\b/gi);
    //push the array to the output variable
    output.push.apply(output,words);
}
//pick a word
var theNumber=Math.floor(Math.random()*output.length);
//loops the code the number of times randomly chosen
for(var i=0;i<amount;i++){
    //add on to the string
    theWords+=(i==0?"":" ")+output[theNumber+i];
}
//now theWords has a random number of consecutive words
alert(theWords);

Ad @ м

1 голос
/ 14 июля 2011

Вот пример, который работает с google.com

//get the text
var text=document.getElementById('rso').textContent;
  //find the words 
var words=text.match(/\b([a-z]{3,})\b/gi);
  //pick a word
alert(words[Math.floor(words.length*Math.random())]);

Результаты поиска перечислены в элементе с идентификатором "rso".
Регулярное выражение сопоставляет строки, состоящие как минимум из 3 символов az

0 голосов
/ 14 июля 2011

Вот полный сценарий Greasemonkey, который захватывает произвольное количество случайных слов только из описаний и немного лучше обрабатывает различные страницы поиска Google (они немного меняют DOM, в зависимости от того, как была получена страница).

// ==UserScript==
// @name            _RandomWord from results
// @include         http://www.google.com/*
// @require         http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js
// ==/UserScript==

function GrabRandomWords () {
    /*--- Google search results are wrapped in a list with the id "rso".
        Here, we want just the descriptions in the results, so we know
        that title and link tag tags can be excluded.
        (Alas, Google's search results pages vary quite a bit in the
        detailed structure of their HTML.)
    */
    var descriptText    = $("#rso li *:not(a,h1,h2,h3)").text ();

    //--- Split into words.  Change the "{1,}", if short words like "a" are to be excluded.
    var words           = descriptText.match (/\b(\w{1,})\b/g);

    //--- Pick 5 random words and store them in an array.
    if (words) {
        var ourRandWords    = [];
        for (var J = 0;  J < 5;  ++J)
            ourRandWords.push ( words[ Math.floor (words.length * Math.random() ) ] );

        alert (ourRandWords);
    }
}

//--- We must wait until page has fully loaded, because the results are usually Ajaxed in.
window.addEventListener ("load",
    function () {
        /*--- Page is "loaded", but results are still not in, still need a short delay.
            Note that listening for DOMSubtreeModified doesn't seem to work well.
        */
        setTimeout (function() { GrabRandomWords (); }, 666);
    },
    false
);
...