2010-10-28 5 views
11

Có thể truy vấn API Wikipedia cho các bài viết có chứa một mẫu cụ thể không? The documentation không mô tả bất kỳ hành động nào sẽ lọc kết quả tìm kiếm cho các trang chứa mẫu. Cụ thể, tôi sau các trang chứa Template:Persondata. Sau đó, tôi hy vọng có thể lấy lại mẫu cụ thể đó để điền dữ liệu phả hệ cho dự án openancestry.org. Truy vấn dưới đây cho thấy trang Albert Einstein chứa Mẫu Persondata, nhưng nó không trả lại nội dung của mẫu và tôi không biết cách lấy danh sách tiêu đề trang chứa mẫu đó. http://en.wikipedia.org/w/api.php?action=query&prop=templates&titles=Albert%20Einstein&tlcontinue=736|10|ParmPartHỗ trợ Wikipedia API có tìm kiếm một mẫu cụ thể không?

Returns:

<api> 
<query> 
    <pages> 
    <page pageid="736" ns="0" title="Albert Einstein"> 
    <templates> 
    ... 
    <tl ns="10" title="Template:Persondata"/> 
    ... 
    </templates> 
    </page> 
    </pages> 
</query> 
<query-continue> 
    <templates tlcontinue="736|10|Reflist"/> 
</query-continue> 
</api> 

tôi nghi ngờ rằng tôi không thể có được những gì tôi cần từ API, nhưng tôi hy vọng tôi sai và rằng ai đó đã sáng rực một đường mòn xuống con đường này .

Trả lời

7

Bạn có thể sử dụng truy vấn embeddedin để tìm tất cả các trang include template:

curl 'http://en.wikipedia.org/w/api.php?action=query&list=embeddedin&eititle=Template:Persondata&eilimit=5&format=xml' 

nào giúp bạn:

<?xml version="1.0"?> 
<api> 
    <query> 
    <embeddedin> 
     <ei pageid="307" ns="0" title="Abraham Lincoln" /> 
     <ei pageid="308" ns="0" title="Aristotle" /> 
     <ei pageid="339" ns="0" title="Ayn Rand" /> 
     <ei pageid="340" ns="0" title="Alain Connes" /> 
     <ei pageid="344" ns="0" title="Allan Dwan" /> 
    </embeddedin> 
    </query> 
    <query-continue> 
    <embeddedin eicontinue="10|Persondata|595" /> 
    </query-continue> 
</api> 

Xem full docs tại mediawiki.org.

Sửa Sử dụng embeddedin truy vấn thay vì backlinks (mà không bao gồm mẫu thể vùi)

+0

1 Đó là mát mẻ và gần không những gì tôi cần nhưng đối với một số lý do kết quả có xu hướng được từ tất cả, nhưng không gian tên chính làm cho nó vô ích cho nhu cầu của tôi. Ngay cả khi tôi chắp thêm khoảng trắng = 0 theo tài liệu thì tìm kiếm sẽ không trả về dữ liệu từ không gian tên bài viết, nơi tất cả các tiểu sử hữu ích của persondata sẽ là. Persondata trong không gian tên nói chuyện là khá nhiều vô ích. – grenade

+0

Rất tiếc, dường như không bao gồm các tạp chất mẫu. Tuy nhiên, truy vấn 'embeddedin' thực hiện, vì vậy hãy thử truy vấn này:' http: //en.wikipedia.org/w/api.php? Action = query & list = embeddedin & eititle = Mẫu: Persondata & format = xml' – jpatokal

3

Sử dụng embeddedin không cho phép bạn tìm kiếm một người cụ thể, chuỗi tìm kiếm trở thành Template:Persondata.

Cách tốt nhất mà tôi đã tìm thấy để có được chỉ có những người từ Wikipedia là sử dụng list=search và lọc các tìm kiếm sử dụng AND"Born"AND"Occupation":

http://en.wikipedia.org/w/api.php?action=query&list=search&srsearch="Tom Cruise"AND"Born"AND"Occupation"&format=jsonfm&srprop=snippet&srlimit=50` 

Hãy nhớ rằng Wikipedia đang sử dụng một công cụ tìm kiếm mà không làm chưa cho phép chúng tôi chỉ tìm kiếm tiêu đề, nó sẽ tìm kiếm toàn văn. Bạn có thể tận dụng điều đó để có được kết quả chính xác hơn.

+0

Tìm kiếm trong tiêu đề có thể ít nhất từ ​​năm 2013 với 'intitle:'. – Tgr