2

我目前正忙于一个网站,我想为其编写一个greasemonkey脚本,该脚本记录所有数据,或者至少记录它的某些位置,并保存在一个可以与excel互操作的文件中。那可能吗?比如说我拿这个数据片段:

 {"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]]}

, 将其读入二维数组,这是 Brock Adams 帮助我的。

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]);
    }
);

现在我想将数组的这些数据写入一个文件中,稍后我可以在 Excel 中打开并查看它。通过使用GM_setValue,可以做到吗?最简单的方法是如何继续它?

谢谢。

4

1 回答 1

2

Greasemonkey 无法写入文件,使用GM_setValue或本地存储将很难进入文件。无论如何,您都不想存储很多值GM_setValue,因为这些值存储在浏览器首选项中。

你提到了一个远程服务器。
是的,GM 可以将数据发送到远程服务器(如果它正在运行类似 XAMPP 的东西,甚至可以发送到您的本地计算机)。再做一些工作,您还可以将数据发送到 Google 文档或类似文档。

目前尚不清楚您要发送哪些数据(假设您不只是发送整个arrayOfAuctions)。

因此,假设您已经分析了数据并确定您需要这些列:

柱子
索引含义/目的
--------------------------------------
   4 拍卖显示编号
   5 拍卖编号
   8 当前价格
   9 高出价者 ID
  10 剩余时间
  12到???


然后你可以像这样隔离感兴趣的数据:

//--- 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 数据库可能会更聪明。

于 2011-06-10T10:40:42.873 回答