2012-05-22 5 views
0

나는 실시간 위키 피디 편집을 스트림하는 node.js 프로젝트 (기초로 Wikistream을 사용하므로 완전히 내 코드가 아님)로 작업 중입니다. 코드는 각 편집 내용을 구성 요소로 나누고이를 객체로 저장합니다 (요지는 https://gist.github.com/2770152 참조). 부품 중 하나는 URL입니다. 각 편집을 구문 분석 할 때 사전 편집 및 편집 된 위키 백과 페이지 간의 차이점을 보여주는 각 편집의 URL을 다듬을 수 있는지 궁금합니다 (차이점을 파악하십시오 ('diff diff-inline' 예를 들어,) 객체의 다른 속성으로 추가합니다. 그것은 단지 문자열 일 수는 없으며 완전히 구조화 될 필요는 없습니다.즉시 node.js 데이터 스트림의 URL 스크랩

내가 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 속성이 저장됩니다.

내가 궁금해하는 점은 다음과 같습니다. 즉석에서 이처럼 긁을 수 있습니까? 프로그램을 엉망으로하는 긁는거야? 비슷한 결과를 얻을 수있는 다른 방법이 있습니까?

답변

0

아직 nodeio를 사용하지 않았지만 서명이 비동기 콜백 인 것처럼 보이므로 프로그램 흐름 관점에서 백그라운드에서 발생하므로 다음 문장이 발생하지 않도록 차단합니다 (다음 문장은 무엇이든간에). if 블록 외부).

순차적으로 처리하려고하는 것처럼 보입니다. 즉, 콜백이 원하는 것을 다시 생각해보아야하며 그렇지 않으면 전체 루프를 while 루프에 넣을 때 순차적으로 실행해야합니다. 너는 vandalcontent (나는 그것을 추천하지 않을 것이다)가있다.

테스트를 위해 콜백의 vandalContent에서 console.log를 실행하고 뱉어내는 것을 확인하십시오.

+0

네, 맞습니다. (console.log에 아무것도 나오지 않습니다. 여기에 다른 문제가 있음을 나타냅니다.) 각 URL에서 콘텐츠를 긁어 모으고 각 수정 객체에 어떻게 든 첨부하는 것을 다시 생각해 볼 수있는 더 좋은 방법은 무엇일까요? 나는 노드에 상당히 익숙하다. – roy

+0

나는이 문제에 관해서 생각해보기로하겠다. 나는이 문제에 접근하는 방법을 다시 생각하는 것이 가장 좋다. 감사. – roy