0

私は本質的にその場でページをこすり取ろうとしています。このURLを押すと、スクレイプジョブの結果が出力されます。初めてすべてが素晴らしく機能します。2回目に(job.options.argsを介して渡されるさまざまなパラメーターを使用して)試してみると、node.ioジョブのrun()関数も実行されません。scrape_result2回目は空を返します(私はオブジェクトを期待しています)。

何かご意見は?新しい結果が2回目に返されるようにするにはどうすればよいですか?私のスクレイピングジョブでは、ここから例3をほぼ正確に使用しています:https ://github.com/chriso/node.io/wiki/Scraping

scarper.jsからの抜粋(残りは例3のようなものです:https ://github.com/chriso/node.io/wiki/Scraping )

run: function() {
    var book = this.options.args[0].book;
    var chapter = this.options.args[0].chapter;

    this.getHtml('http://www.url.com' + book + '/' + chapter + '?lang=eng', function(err, $) {

それから私のapp.js

var scrip_scraper = require('./scraper.js');

app.get('/verses/:book/:chapter', function (req, res) {
    var params = {
        book: req.param('book'),
        chapter: req.param('chapter')
    }

    scrip_scraper.job.options.args[0] = params;
    //scrip_scraper.job.options.args.push(chapter);
    console.log(scrip_scraper.job.options.args);



    nodeio.start(scrip_scraper, function (err, scrape_result) {

        console.log(scrape_result);
    }, true);

}); //app.get('/verses/:book/:chapter')
4

1 に答える 1

2

options.argsリクエストの実行中に変更される可能性があるため、おそらくスコーピングの問題が発生しています。入力を関数の引数としてジョブに渡して、別のリクエストで変更できないようにしてください。これがあなたのニーズに適応できる例です

app.js

var express = require('express')
  , scraper = require('./scraper')
  , app = express();

app.get('/:keyword', function (request, response, next) {
    scraper(request.param('keyword'), function (err, result) {
        if (err) {
            return next(err);
        }
        response.send(result);
    });
});

app.listen(3000);

scarer.js

var nodeio = require('node.io');

module.exports = function (keyword, callback) {
    var job = new nodeio.Job({
        input: [ keyword ]
      , run: function (keyword) {
            //Make the request here..
            this.emit(keyword);
        }
    });
    nodeio.start(job, { silent: true }, callback, true);
};
于 2012-10-30T11:00:06.980 に答える