2012-05-22 53 views
0

我正在使用一個node.js項目(使用Wikistream作爲基礎,因此不完全是我自己的代碼),它實時傳輸了wikipedia編輯。該代碼將每個編輯分解爲其組成部分並將其作爲對象存儲(請參閱要點https://gist.github.com/2770152)。其中一個部分是URL。我想知道是否有可能在解析每個編輯時爲每個編輯顯示預編輯和編輯後的維基百科頁面之間的差異的URL,獲取差異(在一個名爲「diffchange diffchange-inline」的跨度類內部) ,例如)並將其添加爲該對象的另一個屬性。對不,它可能只是一個字符串,不必完全結構化。即時從node.js數據流中刮取網址

我使用nodeio嘗試,並有一些像這樣的代碼(我特別想只刮已標記的評論(編輯米[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屬性設置爲「無內容」。

我想知道的是:是否有可能在飛行中像這樣刮?是否會讓程序停滯不前?還有其他建議的方法來獲得類似的結果嗎?

回答

0

我沒有用nodeio還,但簽名看起來是一個異步回調,因此從程序流程的角度看,這種情況發生在後臺,因此不發生堵塞的下一個語句(下面的語句是什麼是在你的if塊之外)。

它看起來像你試圖順序執行它,這意味着你需要重新思考你想要你的回調做什麼,或者通過把整個事情放在一個while循環中來強制它是順序的,你有vandalcontent(我不會推薦)。

對於測試,請嘗試在回調中的vandalContent上執行console.log並查看它吐出的內容。

+0

是的,你肯定是對的(console.log沒有吐出,這表明我可能會遇到其他問題,在這裏)。重新思考從每個網址獲取內容並以某種方式將其附加到每個編輯對象的方式可能是更好的方法?我對節點相當陌生。 – roy

+0

我會考慮這個問題,因爲這個問題會得到答案,我可能最好反思如何解決這個問題。謝謝。 – roy