0

私は、リアルタイムのウィキペディアの編集をストリーミングする node.js プロジェクト (基本としてウィキストリームを使用しているため、完全に自分のコードではありません) を使用しています。このコードは、各編集を構成要素に分解し、オブジェクトとして保存します ( https://gist.github.com/2770152の要点を参照)。部分の 1 つは URL です。各編集を解析するときに、編集前と編集後のウィキペディア ページの違いを示す各編集の URL をスクレイピングして、違いを取得することが可能かどうか疑問に思っています (「diffchange diffchange-inline」と呼ばれるスパン クラス内)。 、たとえば)、それをオブジェクトの別のプロパティとして追加します。それは単なる文字列である可能性があり、完全に構造化されている必要はありません。

私はnodeioを使用してみましたが、次のようなコードがあります (具体的には、コメント (m[6]) で破壊行為の可能性としてマークされた編集のみをスクレイピングしようとしています):

    if (m[6].match(/vandal/) && namespace === "article"){
    nodeio.scrape(function(){
        this.getHtml(m[3], function(err, $){
            //console.log('getting HTML, boss.');
            console.log(err);
            var output = [];
            $('span.diffchange.diffchange-inline').each(function(scraped){
                output.push(scraped.text);
            });
            vandalContent = output.toString();

          });

        });
    } else {
        vandalContent = "no content";
    }

条件文にヒットすると、一度スクレイピングしてからプログラムを閉じます。目的のコンテンツをオブジェクトのプロパティとして保存しません。条件が満たされない場合、「コンテンツなし」に設定された vandalContent プロパティが保存されます。

私が疑問に思っているのは、その場でこのようにこすることさえ可能ですか? スクレイピングがプログラムを動かしていませんか? 同様の結果を得るために提案された他の方法はありますか?

4

1 に答える 1

0

私はまだnodeioを使用していませんが、署名は非同期コールバックのように見えるので、プログラムフローの観点からは、バックグラウンドで発生するため、次のステートメントの発生をブロックしません(次のステートメントはifブロックの外側にあります) )。

順番に実行しようとしているようです。つまり、コールバックで実行する内容を再考するか、vandalcontentがある場合にのみ終了するwhileループにすべてを入れて、強制的に順番に実行する必要があります(これはお勧めしません)。

テストのために、コールバックのvandalContentでconsole.logを実行して、何が吐き出されるかを確認してください。

于 2012-05-22T16:57:38.697 に答える