Хранение или регистрация данных с помощью greasemonkey, которые могут быть обработаны позже - PullRequest
2 голосов
/ 09 июня 2011

Я сейчас занят на сайте, для которого я хочу написать сценарий greasemonkey, который регистрирует все данные или, по крайней мере, некоторые их положения, и сохраняет их в файле, который будет совместим с другими. Это возможно? скажем, например, я беру этот фрагмент данных:

 {"d":[["","","y","ZAR","1","49517","6458, 8270, 8270, 8270, 7635",null,"1.40","6458","0:13:30","","12","","C","30",null],["y","-00:00","y","ZAR","2","49593","6458, 6458, 6458, 6458, 6458",null,"2.92","6458","0:13:37","","12","","L","12","Ve4mYdrvkkQMKxBH1\/1VMtDTCDQBRspg5jB8jjY08zg="],["","","y","ZAR","3","49058","7456, 9216, 6458, 5153, 7456",null,"194.40","7456","0:00:31","","1100","","T",null,null],["","","y","ZAR","4","49597","2935, 6554",null,"1.22","2935","0:01:16","","12","","T",null,null],["","","y","ZAR","5","49590","4440, 0518, 5343, 2625, 4848",null,"0.95","4440","0:15:58","","5","","L",null,null],["","","y","ZAR","6","49591","4848, 4440, 4440, 0518, 2625",null,"1.81","4848","0:16:05","","12","","L",null,null],["","","y","ZAR","7","49595","6458",null,"5.55","6458","0:04:13","","55","","T",null,null],["","","y","ZAR","8","49596","",null,"2.90","NONE","0:04:35","","29","","T",null,null],["","","y","ZAR","9","49496","6458, 2427, 2427, 7863, 5845",null,"2.56","6458","0:06:07","","10","","B",null,null],["","","y","ZAR","10","49524","6458, 2427, 7863, 7863, 5845",null,"1.67","6458","0:06:00","","5","","B",null,null],["","","y","ZAR","11","49539","6458, 2427, 7863, 7863, 0764",null,"2.02","6458","0:04:25","","10","","B",null,null]]}

, прочитайте это в 2d массив, с которым мне помог Брок Адамс.

var myJson              = '{"d":[["","","y","ZAR","1","49517","6458, 8270, 8270, 8270, 7635",null,"1.40","6458","0:13:30","","12","","C","30",null],["y","-00:00","y","ZAR","2","49593","6458, 6458, 6458, 6458, 6458",null,"2.92","6458","0:13:37","","12","","L","12","Ve4mYdrvkkQMKxBH1\/1VMtDTCDQBRspg5jB8jjY08zg="],["","","y","ZAR","3","49058","7456, 9216, 6458, 5153, 7456",null,"194.40","7456","0:00:31","","1100","","T",null,null],["","","y","ZAR","4","49597","2935, 6554",null,"1.22","2935","0:01:16","","12","","T",null,null],["","","y","ZAR","5","49590","4440, 0518, 5343, 2625, 4848",null,"0.95","4440","0:15:58","","5","","L",null,null],["","","y","ZAR","6","49591","4848, 4440, 4440, 0518, 2625",null,"1.81","4848","0:16:05","","12","","L",null,null],["","","y","ZAR","7","49595","6458",null,"5.55","6458","0:04:13","","55","","T",null,null],["","","y","ZAR","8","49596","",null,"2.90","NONE","0:04:35","","29","","T",null,null],["","","y","ZAR","9","49496","6458, 2427, 2427, 7863, 5845",null,"2.56","6458","0:06:07","","10","","B",null,null],["","","y","ZAR","10","49524","6458, 2427, 7863, 7863, 5845",null,"1.67","6458","0:06:00","","5","","B",null,null],["","","y","ZAR","11","49539","6458, 2427, 7863, 7863, 0764",null,"2.02","6458","0:04:25","","10","","B",null,null]]}'
var jsonObj             = $.parseJSON (myJson);

//--- The JSON should return a 2-D array, named "d".
var arrayOfAuctions     = jsonObj.d;

//--- Loop over each row in the array.
$.each (
    arrayOfAuctions,
    function (rowIndex, singleAuctionData) {

        //--- Print the 7th column.
        console.log ('Row: ' + (parseInt (rowIndex) + 1) + ' Column: 7  Value: ' + singleAuctionData[6]);
    }
);

Теперь я хочу записать эти данные массива в файл, который я позже смогу открыть, открыть в Excell и просмотреть его. С помощью GM_setValue это можно сделать? Как проще всего продолжать это?

Спасибо.

1 Ответ

2 голосов
/ 10 июня 2011

Greasemonkey не может записать в файл, и использование GM_setValue или локального хранилища было бы затруднительно, чтобы попасть в файл. Вы все равно не хотите хранить очень много значений, используя GM_setValue, поскольку они хранятся в настройках браузера.

Вы упомянули удаленный сервер.
Да, GM может отправлять данные на удаленный сервер (или даже на локальный компьютер, если на нем запущено что-то вроде XAMPP). Приложив немного больше работы, вы также можете отправить данные в документы Google или аналогичные.

Не ясно, какие данные вы хотите отправить (при условии, что вы не просто отправляете все arrayOfAuctions).

Итак, скажем, вы проанализировали данные и определили, что вам нужны эти столбцы:

Column 
Index       Meaning / Purpose
------      --------------------------------
   4        Auction display number
   5        Auction ID
   8        Current Price
   9        High bidder ID
  10        Time Remaining
  12        Up to???


Тогда вы можете выделить интересующие вас данные следующим образом:

//--- Start custom, 2-D array.
var myAuctionData       = [ [ 'DisplayNumber', 'AuctionID', 'CurrentPrice',
                            'HighbidderID', 'TimeRemaining', 'Upto'
                        ] ];

//--- Loop over each row in the array, storing desired data.
$.each (
    arrayOfAuctions,
    function (rowIndex, singleAuctionData)
    {
        myAuctionData.push ( [
            singleAuctionData[4], singleAuctionData[5],  singleAuctionData[8],
            singleAuctionData[9], singleAuctionData[10], singleAuctionData[12]
        ] );
    }
);


И отправьте его на ваш сервер так:

SerializedAuctionData  = JSON.stringify (myAuctionData);

GM_xmlhttpRequest ( {
    method:     "POST",
    url:        "http://localhost/YourDir/LogAuctionData.php",
    data:       SerializedAuctionData,
    headers:    {"Content-Type": "application/json"}
} );


Сервер может использовать любую технологию, которая вам удобна.
Если бы это была страница PHP, она могла бы извлечь данные JSON следующим образом:

$AuctionData = json_decode($HTTP_RAW_POST_DATA);
print_r ($AuctionData);


Страница сервера может записать файл csv или xls, но, поскольку большое количество данных будет публиковаться раз в секунду, было бы разумнее использовать базу данных mySQL.

...