2010-12-08 5 views
1

저는 Wikipedia API를 처음 접했지만 최근에 위키 미디어 위에 구축 된 중국 웹 사이트를 방문했습니다. XPATH를 사용하여 최종 페이지를 처리 ​​할 수 ​​있도록 다양한 페이지를 구문 분석 할 수 있도록 도움을 드리고자합니다. 조금 읽은 후, 나는 action = parse 매개 변수가 내가 찾고있는 것이 었음을 발견했다. 예를 들어, 어려움없이 다음 쿼리로드 (위키 백과에서)MediaWiki API action = "page 매개 변수는 text 및 title 매개 변수와 함께 사용할 수 없습니다"와 함께 실패합니다.

api.php?action=parse&page=Main_Page&format=xml 

그것은 링크 다음 언어 링크, 다음 텍스트를 제공한다. 나는이 데이터를 사용하여이 위키 피 디아 기반 사이트를 크롤 링하여 페이지 계층을 생성하므로 링크 섹션에 특히 관심이 있습니다.

http://www.youbianku.com/api.php?action=parse&page=%E5%8C%97%E4%BA%AC&format=xml 

퍼센트 E5의 % 8C % 97 % E4의 %의 BA %의 AC 베이징의 중국어 문자로 확인 : 결과를 복제하려고

, 내 사이트의 페이지 하단에 쿼리 식은 , btw.

<api> 
<error code="params" info="The page parameter cannot be used together with the text and title parameters"/> 
</api> 

내가 행한 모든 위키 백과에서 쿼리를 복제하고 페이지의 이름을 대체하는 것입니다 : 어쨌든, 나는 다음과 같은 결과를 얻을. 왜 이것이 갑자기 오류를 던진 지 나에게 불분명하다.

api.php?action=query&format=xml&titles=%E5%8C%97%E4%BA%AC&rvprop=content&prop=revisions 

나는이 때문에 기본적으로 제목을 추가 htaccess로 재 작성 규칙이 될 수 있다는 것을 최근에 읽은 다음에서 볼 수 있듯이,이 페이지의 다른 API 쿼리를 실행 아무 문제가 없습니다. 제가이 웹 사이트의 클라이언트라는 점을 감안할 때, 이것을 무시할 수있는 방법이 있습니까?

답변

3

제안한 것처럼이 문제는 URL 재 작성 규칙이 잘못되어 발생했을 수 있습니다.

는이처럼 text 매개 변수와 transcluding 원하는 페이지를 사용하여이 문제를 해결할 수 있습니다

/api.php?action=parse&text={{:Page_title}} 

이 (선행 :는 기본적으로 페이지 제목 앞에 추가되는 Template:을 방지 할 수있다.)

Trying this with the example page in your question 어떤 — 아마 관련이없는 — 이유로 PHP 오류를 반환하지만 it works fine with other pages on that wiki.

이 트릭의 단점은 파서 캐시를 우회하여 단순히 page을 사용하는 것보다 느리고 더 많은 자원을 소비한다는 것입니다. 또한 페이지 제목에 의존하는 페이지에 사용 된 variables은 예상치 못한 결과를 초래할 수 있으며 페이지 또는 개정 메타 데이터에 따라 변수가 완전히 실패 할 수 있습니다. 다행히 이러한 변수는 실제로 사용되지 않습니다.


또 다른, 어쩌면 더 나은 솔루션은 단순히 어떤 주변의 피부없이 페이지의 구문 분석 된 HTML 소스를 반환합니다

/index.php?action=render&title=Page_title 

, like this을 사용 할 수있다. 이 방법은 API만큼 다양하지는 않지만 위에서 설명한 문제가 없습니다.