1

私はJavascriptアルゴリズムに取り組んで、MongoDBをループし、2つの同一のURLを検索し、ヘッダーオブジェクトの分析を行おうとしています。

以下は、このオブジェクトの例のスニペットです。

{
    "url": "www.professionalsupplementcenter.com",
    "date": "Tue Mar 26 2013 15:08:31 GMT-0400 (EDT)",
    "headers": {
        "server": "Microsoft-IIS/7.5",
        "x-aspnet-version": "4.0.30319",
        "x-powered-by": "ASP.NET"
    }
}

具体的には、2つのコレクションがあります。2つのコレクションは、2か月間隔でHTTPヘッダースクレイプのMongoDBにある2つのデータベースです。todayScrapeそれらをと呼びましょうtwoMonthFromNowScrape。これらの2つのコレクションを通じて、ヘッダーオブジェクトを比較したいので、、、、serverおよびx-aspnet-versionこれらx-powered-byの番号内にアップグレードがあったかどうかを確認します。EGは(将来的に)IIS/7.5アップグレードされます。IIS/8.0

このシステムの実装方法がまったくわからないため、表示するコードはありません。どこから始めたらいいのかわからない。最初に2つのURLを比較し、次にプログラムが両方のURLが存在することを識別したときに、3つのヘッダーオブジェクトの特定の比較を実行します。次に、これらの属性を順番にスキャンして変更された場合はいつでもレポートしconsole.log("There has been a change")、文字列が同一でない場合などのイベントを開始できます。

どこから始めればいいのか、誰か教えてもらえますか?私はこの問題に数日立ち往生していて、立ち往生しているのはがっかりしました。本当に実装を始めたいのですが、助けが必要です。

4

1 に答える 1

1

最初に必要なのはnpm install mongodb(まだ行っていない場合)です。次に、app.jsファイルで:

var mongodb = require('mongodb');
var Server = mongodb.Server('127.0.0.1', 27017, {});
new mongodb.Db('scraperapp', Server, {w: 1}).open(function(err, db){
  var scrape = new mongodb.Collection(db, 'scrape');
  var scrapeFuture = new mongodb.Collection(db, 'scrapeFuture');
  scrape.find({url: {$exists: true}}).toArray(function(err, today_docs){
    if(!today_docs) return;
    var scrapeFn = function(i){
      var today_doc = today_docs[i];
      scrapeFuture.findOne({url: today_doc.url}, function(err, future_doc){
        if(!future_doc) return;
        if(today_doc.headers.server != future_doc.headers.server)
          console.log(today_doc.url + ':servers different');
        if(today_doc.headers['x-aspnet-version'] != future_doc.headers['x-aspnet-version'])
          console.log(today_doc.url + ':x-aspnet-versions different');
        if(today_doc.headers['x-powered-by'] != future_doc.headers['x-powered-by'])
          console.log(today_doc.url + ':x-powered-by different');
        if(today_docs[i+1]) scrapeFn(i+1);
      });
    }
    scrapeFn(0);
  });
});
于 2013-03-26T19:42:12.980 に答える