Tôi chỉ cần lấy đoạn đầu tiên của trang Wikipedia. Nội dung phải được định dạng html, sẵn sàng để được hiển thị trên các trang web của tôi (vì vậy KHÔNG CÓ BBCODE hoặc MÃ đặc biệt của WIKIPEDIA!)
Tôi chỉ cần lấy đoạn đầu tiên của trang Wikipedia. Nội dung phải được định dạng html, sẵn sàng để được hiển thị trên các trang web của tôi (vì vậy KHÔNG CÓ BBCODE hoặc MÃ đặc biệt của WIKIPEDIA!)
Câu trả lời:
Có một cách để có được toàn bộ "phần giới thiệu" mà không cần bất kỳ phân tích cú pháp html nào! Tương tự như câu trả lời của AnthonyS với một thông số bổ sung explaintext
, bạn có thể lấy văn bản phần giới thiệu bằng văn bản thuần túy.
Bắt phần giới thiệu của Stack Overflow trong văn bản thuần túy:
(cảnh báo tước)
{
"query": {
"pages": {
"21721040": {
"pageid": 21721040,
"ns": 0,
"title": "Stack Overflow",
"extract": "Stack Overflow is a privately held website, the flagship site of the Stack Exchange Network, created in 2008 by Jeff Atwood and Joel Spolsky, as a more open alternative to earlier Q&A sites such as Experts Exchange. The name for the website was chosen by voting in April 2008 by readers of Coding Horror, Atwood's popular programming blog.\nIt features questions and answers on a wide range of topics in computer programming. The website serves as a platform for users to ask and answer questions, and, through membership and active participation, to vote questions and answers up or down and edit questions and answers in a fashion similar to a wiki or Digg. Users of Stack Overflow can earn reputation points and \"badges\"; for example, a person is awarded 10 reputation points for receiving an \"up\" vote on an answer given to a question, and can receive badges for their valued contributions, which represents a kind of gamification of the traditional Q&A site or forum. All user-generated content is licensed under a Creative Commons Attribute-ShareAlike license. Questions are closed in order to allow low quality questions to improve. Jeff Atwood stated in 2010 that duplicate questions are not seen as a problem but rather they constitute an advantage if such additional questions drive extra traffic to the site by multiplying relevant keyword hits in search engines.\nAs of April 2014, Stack Overflow has over 2,700,000 registered users and more than 7,100,000 questions. Based on the type of tags assigned to questions, the top eight most discussed topics on the site are: Java, JavaScript, C#, PHP, Android, jQuery, Python and HTML."
}
}
}
}
Tài liệu: API: query / prop = trích xuất
Chỉnh sửa: Đã thêm &redirects=1
theo khuyến nghị trong các bình luận.
$extract = current((array)$data->query->pages)->extract;
. nhưng "Lưu ý: Cố gắng lấy tài sản của phi đối tượng" vẫn tiếp tục.
Có thực sự là một rất đẹp prop gọi là chiết xuất có thể được sử dụng với các truy vấn thiết kế đặc biệt cho mục đích này. Trích xuất cho phép bạn có được trích xuất bài viết (văn bản bài viết cắt ngắn). Có một tham số gọi là exintro có thể được sử dụng để truy xuất văn bản trong phần zeroth (không có tài sản bổ sung như hình ảnh hoặc hộp thông tin). Bạn cũng có thể truy xuất các trích đoạn với độ chi tiết mịn hơn, chẳng hạn như bằng một số ký tự ( exchars ) nhất định hoặc bằng một số câu nhất định ( exsentences )
Dưới đây là một truy vấn mẫu http://en.wikipedia.org/w/api.php?action=query&prop=extuces&format=json&exintro=&title=Stack%20Overflow và hộp cát API http://en.wikipedia.org/wiki/ Đặc biệt: ApiSandbox # action = query & prop = extuces & format = json & exintro = & title = Stack% 20Overflow để thử nghiệm nhiều hơn với truy vấn này.
Xin lưu ý rằng nếu bạn muốn đoạn đầu tiên cụ thể, bạn vẫn cần thực hiện một số phân tích bổ sung như được đề xuất trong câu trả lời đã chọn. Sự khác biệt ở đây là phản hồi được trả về bởi truy vấn này ngắn hơn một số truy vấn api khác được đề xuất vì bạn không có tài sản bổ sung như hình ảnh trong phản hồi api để phân tích cú pháp.
Kể từ năm 2017 Wikipedia cung cấp API REST với bộ nhớ đệm tốt hơn. Trong tài liệu bạn có thể tìm thấy API sau hoàn toàn phù hợp với trường hợp sử dụng của bạn. (vì nó được sử dụng bởi tính năng Xem trước trang mới )
https://en.wikipedia.org/api/rest_v1/page/summary/Stack_Overflow
trả về dữ liệu sau có thể được sử dụng để hiển thị một bản tóm tắt với hình thu nhỏ:
{
"type": "standard",
"title": "Stack Overflow",
"displaytitle": "Stack Overflow",
"extract": "Stack Overflow is a question and answer site for professional and enthusiast programmers. It is a privately held website, the flagship site of the Stack Exchange Network, created in 2008 by Jeff Atwood and Joel Spolsky. It features questions and answers on a wide range of topics in computer programming. It was created to be a more open alternative to earlier question and answer sites such as Experts-Exchange. The name for the website was chosen by voting in April 2008 by readers of Coding Horror, Atwood's popular programming blog.",
"extract_html": "<p><b>Stack Overflow</b> is a question and answer site for professional and enthusiast programmers. It is a privately held website, the flagship site of the Stack Exchange Network, created in 2008 by Jeff Atwood and Joel Spolsky. It features questions and answers on a wide range of topics in computer programming. It was created to be a more open alternative to earlier question and answer sites such as Experts-Exchange. The name for the website was chosen by voting in April 2008 by readers of <i>Coding Horror</i>, Atwood's popular programming blog.</p>",
"namespace": {
"id": 0,
"text": ""
},
"wikibase_item": "Q549037",
"titles": {
"canonical": "Stack_Overflow",
"normalized": "Stack Overflow",
"display": "Stack Overflow"
},
"pageid": 21721040,
"thumbnail": {
"source": "https://upload.wikimedia.org/wikipedia/en/thumb/f/fa/Stack_Overflow_homepage%2C_Feb_2017.png/320px-Stack_Overflow_homepage%2C_Feb_2017.png",
"width": 320,
"height": 149
},
"originalimage": {
"source": "https://upload.wikimedia.org/wikipedia/en/f/fa/Stack_Overflow_homepage%2C_Feb_2017.png",
"width": 462,
"height": 215
},
"lang": "en",
"dir": "ltr",
"revision": "902900099",
"tid": "1a9cdbc0-949b-11e9-bf92-7cc0de1b4f72",
"timestamp": "2019-06-22T03:09:01Z",
"description": "website hosting questions and answers on a wide range of topics in computer programming",
"content_urls": {
"desktop": {
"page": "https://en.wikipedia.org/wiki/Stack_Overflow",
"revisions": "https://en.wikipedia.org/wiki/Stack_Overflow?action=history",
"edit": "https://en.wikipedia.org/wiki/Stack_Overflow?action=edit",
"talk": "https://en.wikipedia.org/wiki/Talk:Stack_Overflow"
},
"mobile": {
"page": "https://en.m.wikipedia.org/wiki/Stack_Overflow",
"revisions": "https://en.m.wikipedia.org/wiki/Special:History/Stack_Overflow",
"edit": "https://en.m.wikipedia.org/wiki/Stack_Overflow?action=edit",
"talk": "https://en.m.wikipedia.org/wiki/Talk:Stack_Overflow"
}
},
"api_urls": {
"summary": "https://en.wikipedia.org/api/rest_v1/page/summary/Stack_Overflow",
"metadata": "https://en.wikipedia.org/api/rest_v1/page/metadata/Stack_Overflow",
"references": "https://en.wikipedia.org/api/rest_v1/page/references/Stack_Overflow",
"media": "https://en.wikipedia.org/api/rest_v1/page/media/Stack_Overflow",
"edit_html": "https://en.wikipedia.org/api/rest_v1/page/html/Stack_Overflow",
"talk_page_html": "https://en.wikipedia.org/api/rest_v1/page/html/Talk:Stack_Overflow"
}
}
Theo mặc định, nó tuân theo các chuyển hướng (do đó /api/rest_v1/page/summary/StackOverflow
cũng hoạt động), nhưng điều này có thể bị vô hiệu hóa với?redirect=false
Nếu bạn cần truy cập API từ một tên miền khác, bạn có thể đặt tiêu đề CORS với &origin=
(ví dụ &origin=*
)
Cập nhật 2019: API dường như trả về nhiều thông tin hữu ích hơn về trang.
"other_tags" : "\"addr:country\"=>\"CW\",\"historic\"=>\"ruins\",\"name:nl\"=>\"Riffort\",\"wikidata\"=>\"Q4563360\",\"wikipedia\"=>\"nl:Riffort\""
chúng ta có thể lấy trích xuất ngay bây giờ bằng QID không?
Mã này cho phép bạn truy xuất nội dung của đoạn đầu tiên của trang bằng văn bản thuần túy.
Các phần của câu trả lời này đến từ đây và do đó ở đây . Xem tài liệu API MediaWiki để biết thêm thông tin.
// action=parse: get parsed text
// page=Baseball: from the page Baseball
// format=json: in json format
// prop=text: send the text content of the article
// section=0: top content of the page
$url = 'http://en.wikipedia.org/w/api.php?format=json&action=parse&page=Baseball&prop=text§ion=0';
$ch = curl_init($url);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_USERAGENT, "TestScript"); // required by wikipedia.org server; use YOUR user agent with YOUR contact information. (otherwise your IP might get blocked)
$c = curl_exec($ch);
$json = json_decode($c);
$content = $json->{'parse'}->{'text'}->{'*'}; // get the main text content of the query (it's parsed HTML)
// pattern for first match of a paragraph
$pattern = '#<p>(.*)</p>#Us'; // http://www.phpbuilder.com/board/showthread.php?t=10352690
if(preg_match($pattern, $content, $matches))
{
// print $matches[0]; // content of the first paragraph (including wrapping <p> tag)
print strip_tags($matches[1]); // Content of the first paragraph without the HTML tags.
}
Có, có. Ví dụ: nếu bạn muốn lấy nội dung của phần đầu tiên của bài viết Stack Overflow , hãy sử dụng truy vấn như sau:
Các phần có nghĩa này:
format=xml
: Trả về định dạng kết quả dưới dạng XML. Các tùy chọn khác (như JSON) có sẵn. Điều này không ảnh hưởng đến định dạng của chính nội dung trang, chỉ có định dạng dữ liệu kèm theo.
action=query&prop=revisions
: Nhận thông tin về các phiên bản của trang. Vì chúng tôi không chỉ định bản sửa đổi nào, bản mới nhất được sử dụng.
titles=Stack%20Overflow
: Nhận thông tin về trang Stack Overflow
. Có thể lấy văn bản của nhiều trang hơn trong một lần, nếu bạn tách tên của chúng theo |
.
rvprop=content
: Trả lại nội dung (hoặc văn bản) của bản sửa đổi.
rvsection=0
: Chỉ trả lại nội dung từ phần 0.
rvparse
: Trả về nội dung được phân tích cú pháp dưới dạng HTML.
Hãy nhớ rằng phần này trả về toàn bộ phần đầu tiên, bao gồm cả những thứ như hatnotes (đối với các mục đích sử dụng khác khác), hộp thông tin hoặc hình ảnh.
Có một số thư viện có sẵn cho các ngôn ngữ khác nhau giúp làm việc với API dễ dàng hơn, nó có thể tốt hơn cho bạn nếu bạn sử dụng một trong số các ngôn ngữ đó.
&redirects=true
vào cuối liên kết đảm bảo bạn có được bài viết đích, nếu có.
Đây là mã tôi đang sử dụng ngay bây giờ cho một trang web tôi đang thực hiện để có được các đoạn / tóm tắt / phần 0 hàng đầu trong số các bài viết trên Wikipedia và tất cả được thực hiện trong trình duyệt (javascript phía máy khách) nhờ vào phép thuật của JSONP! -> http://jsfiddle.net/gautamadude/HMJJg/1/
Nó sử dụng API Wikipedia để có được các đoạn văn bản hàng đầu (được gọi là phần 0) trong HTML như vậy: http://en.wikipedia.org/w/api.php?format=json&action=parse&page=Stack_Overflow&prop=text§ion=0&callback=?
Sau đó, nó loại bỏ HTML và các dữ liệu không mong muốn khác, cung cấp cho bạn một chuỗi tóm tắt bài viết rõ ràng, nếu bạn muốn, với một chút điều chỉnh, hãy lấy thẻ html "p" xung quanh các đoạn đầu nhưng ngay bây giờ chỉ có một dòng mới nhân vật giữa họ.
Mã số:
var url = "http://en.wikipedia.org/wiki/Stack_Overflow";
var title = url.split("/").slice(4).join("/");
//Get Leading paragraphs (section 0)
$.getJSON("http://en.wikipedia.org/w/api.php?format=json&action=parse&page=" + title + "&prop=text§ion=0&callback=?", function (data) {
for (text in data.parse.text) {
var text = data.parse.text[text].split("<p>");
var pText = "";
for (p in text) {
//Remove html comment
text[p] = text[p].split("<!--");
if (text[p].length > 1) {
text[p][0] = text[p][0].split(/\r\n|\r|\n/);
text[p][0] = text[p][0][0];
text[p][0] += "</p> ";
}
text[p] = text[p][0];
//Construct a string from paragraphs
if (text[p].indexOf("</p>") == text[p].length - 5) {
var htmlStrip = text[p].replace(/<(?:.|\n)*?>/gm, '') //Remove HTML
var splitNewline = htmlStrip.split(/\r\n|\r|\n/); //Split on newlines
for (newline in splitNewline) {
if (splitNewline[newline].substring(0, 11) != "Cite error:") {
pText += splitNewline[newline];
pText += "\n";
}
}
}
}
pText = pText.substring(0, pText.length - 2); //Remove extra newline
pText = pText.replace(/\[\d+\]/g, ""); //Remove reference tags (e.x. [1], [4], etc)
document.getElementById('textarea').value = pText
document.getElementById('div_text').textContent = pText
}
});
Url này sẽ trả về tóm tắt ở định dạng xml.
http://lookup.dbpedia.org/api/search.asmx/KeywordSearch?QueryString=Agra&MaxHits=1
Tôi đã tạo một chức năng để tìm nạp mô tả của một từ khóa từ wikipedia.
function getDescription($keyword){
$url='http://lookup.dbpedia.org/api/search.asmx/KeywordSearch?QueryString='.urlencode($keyword).'&MaxHits=1';
$xml=simplexml_load_file($url);
return $xml->Result->Description;
}
echo getDescription('agra');
Bạn cũng có thể nhận được nội dung như pagagraph đầu tiên qua dbpedia mà mất nội dung Wikipedia và tạo ra thông tin có cấu trúc từ nó (RDF) và làm sẵn này thông qua một API. API DBPedia là một SPARQL (dựa trên RDF) nhưng nó tạo ra JSON và nó khá dễ dàng để bọc.
Như một ví dụ ở đây, một thư viện JS siêu đơn giản có tên WikipediaJS có thể trích xuất nội dung có cấu trúc bao gồm một đoạn đầu tiên tóm tắt: http://okfnlabs.org/wikipediajs/
Bạn có thể đọc thêm về nó trong bài đăng trên blog này: http://okfnlabs.org/blog/2012/09/10/wikipediajs-a-javascript-l Library-for-access-wikipedia-article-inif.html
Mã thư viện JS có thể được tìm thấy ở đây: https://github.com/okfn/wikipediajs/blob/master/wikipedia.js
Các abstract.xml.gz
bãi chứa âm thanh như một trong những bạn muốn.
Nếu bạn chỉ tìm kiếm văn bản mà sau đó bạn có thể tách ra nhưng không muốn sử dụng API, hãy xem en.wikipedia.org/w/index.php?title=Elephant&action=raw
Cách tiếp cận của tôi là như sau (trong PHP):
$url = "whatever_you_need"
$html = file_get_contents('https://en.wikipedia.org/w/api.php?action=opensearch&search='.$url);
$utf8html = html_entity_decode(preg_replace("/U\+([0-9A-F]{4})/", "&#x\\1;", $html), ENT_NOQUOTES, 'UTF-8');
$utf8html
có thể cần làm sạch thêm, nhưng về cơ bản là như vậy.
Tôi đã thử giải pháp của @Michael Rapadas và @ Krinkle nhưng trong trường hợp của tôi, tôi gặp khó khăn khi tìm một số bài viết tùy thuộc vào cách viết hoa. Giống như ở đây:
Lưu ý tôi đã cắt ngắn phản hồi với exsentences=1
Rõ ràng "bình thường hóa tiêu đề" không hoạt động chính xác:
Chuẩn hóa tiêu đề chuyển đổi tiêu đề trang thành dạng chính tắc của chúng. Điều này có nghĩa là viết hoa ký tự đầu tiên, thay thế dấu gạch dưới bằng dấu cách và thay đổi không gian tên thành dạng cục bộ được xác định cho wiki đó. Chuẩn hóa tiêu đề được thực hiện tự động, bất kể mô-đun truy vấn nào được sử dụng. Tuy nhiên, bất kỳ ngắt dòng nào trong tiêu đề trang (\ n) sẽ gây ra hành vi kỳ quặc và chúng nên bị loại bỏ trước tiên.
Tôi biết rằng tôi có thể đã sắp xếp vấn đề viết hoa một cách dễ dàng nhưng cũng có sự bất tiện khi phải đặt đối tượng vào một mảng.
Vì vậy, vì tôi thực sự muốn đoạn đầu tiên của một tìm kiếm nổi tiếng và được xác định (không có rủi ro để lấy thông tin từ các bài viết khác) tôi đã làm như thế này:
https://en.wikipedia.org/w/api.php?action=opensearch&search=led%20zeppelin&limit=1&format=json
Lưu ý trong trường hợp này tôi đã thực hiện cắt ngắn với limit=1
Cách này:
Nhưng chúng ta phải tiếp tục cẩn thận với chữ viết hoa của tìm kiếm.
Thông tin thêm: https://www.mediawiki.org/wiki/API:Opensearch