Мені просто потрібно отримати перший абзац сторінки Вікіпедії. Вміст має бути відформатований у форматі html, готовий до відображення на моїх веб-сайтах (так що НЕ BBCODE чи спеціального КОДУ WIKIPEDIA!)
Мені просто потрібно отримати перший абзац сторінки Вікіпедії. Вміст має бути відформатований у форматі html, готовий до відображення на моїх веб-сайтах (так що НЕ BBCODE чи спеціального КОДУ WIKIPEDIA!)
Відповіді:
Існує спосіб отримати весь "вступний розділ" без будь-якого html-розбору! Подібно Anthonys ігрового відповіді з додатковими explaintext
парами, ви можете отримати вступний текст розділу у вигляді простого тексту.
Отримання вступу стека Overflow у звичайному тексті:
(попередження позбавлені)
{
"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."
}
}
}
}
Документація: API: запит / prop = витяги
Редагувати: Додано, &redirects=1
як рекомендовано в коментарях.
$extract = current((array)$data->query->pages)->extract;
. але "Примітка: Спроба отримати властивість не-об'єкта" продовжує продовжуватись.
Насправді є дуже приємна опора під назвою витяжки, яку можна використовувати із запитами, розробленими спеціально для цієї мети. Виписки дозволяють отримати витяги статей (усічений текст статті). Існує параметр під назвою exintro, який можна використовувати для отримання тексту в нульовому розділі (ніяких додаткових ресурсів, таких як зображення або інформаційні поля). Ви також можете отримати витяги з більш тонкою деталізацією, такі як певна кількість символів ( обмінники ) або певна кількість пропозицій ( виразності )
Ось зразок запиту http://en.wikipedia.org/w/api.php?action=query&prop=extracts&format=json&exintro=&titles=Stack%20Overflow та пісочна скринька API http://en.wikipedia.org/wiki/ Спеціально: ApiSandbox # action = query & prop = extracts & format = json & exintro = & title = Стек% 20Перевірка, щоб більше експериментувати з цим запитом.
Зауважте, що якщо ви хочете конкретно перший абзац, вам все-таки потрібно зробити додатковий аналіз, як було запропоновано у вибраній відповіді. Різниця тут полягає в тому, що відповідь, повернута цим запитом, коротша, ніж деякі інші запропоновані api-запити, оскільки у вас немає додаткових активів, таких як зображення у відповіді api на розбір.
З 2017 року Wikipedia надає API REST з кращим кешуванням. У документації ви можете знайти наступний API, який ідеально відповідає вашому використанню. (як це використовується новою функцією попереднього перегляду сторінки )
https://en.wikipedia.org/api/rest_v1/page/summary/Stack_Overflow
повертає такі дані, які можуть бути використані для відображення літнього з невеликим мініатюром:
{
"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"
}
}
За замовчуванням слід переспрямувати (так що /api/rest_v1/page/summary/StackOverflow
також працює), але це можна відключити?redirect=false
Якщо вам потрібно отримати доступ до API з іншого домену, ви можете встановити заголовок CORS за допомогою &origin=
(наприклад &origin=*
)
Оновлення 2019 року: API здається, що повертає більше корисної інформації про сторінку.
"other_tags" : "\"addr:country\"=>\"CW\",\"historic\"=>\"ruins\",\"name:nl\"=>\"Riffort\",\"wikidata\"=>\"Q4563360\",\"wikipedia\"=>\"nl:Riffort\""
ми можемо отримати витяг зараз QID?
Цей код дозволяє отримати вміст першого абзацу сторінки у простому тексті.
Частини цієї відповіді походять звідси і, отже, тут . Додаткову інформацію див. У документації API MediaWiki API .
// 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.
}
Так, є. Наприклад, якщо ви хочете отримати вміст першого розділу статті Переповнення стека , використовуйте такий запит:
Частини означають це:
format=xml
: Поверніть формат результату як XML. Доступні й інші варіанти (наприклад, JSON). Це не впливає на формат самого вмісту сторінки, лише на формат даних, що додаються.
action=query&prop=revisions
: Отримайте інформацію про версії сторінки. Оскільки ми не вказуємо, яка редакція використовується, використовується остання версія.
titles=Stack%20Overflow
: Отримайте інформацію про сторінку Stack Overflow
. Текст кількох сторінок можна отримати за один раз, якщо розділити їх назви за |
.
rvprop=content
: Поверніть зміст (або текст) версії.
rvsection=0
: Повертайте лише вміст із розділу 0.
rvparse
: Поверніть вміст, проаналізований як HTML.
Майте на увазі, що це повертає весь перший розділ, включаючи такі речі, як виноски ("Для інших цілей ..."), інформаційні поля або зображення.
Існує кілька бібліотек для різних мов, що полегшує роботу з API, можливо, вам буде краще, якщо ви використовували одну з них.
&redirects=true
в кінці посилання, ви перейдете до статті призначення, якщо така існує.
Це код, який я зараз використовую для веб-сайту, який я створюю, який повинен отримати провідні абзаци / резюме / розділ 0 статей у Вікіпедії, і все це робиться в браузері (JavaScript на стороні клієнта) завдяки магії компанії JSONP! -> http://jsfiddle.net/gautamadude/HMJJg/1/
Він використовує API Wikipedia, щоб отримати провідні абзаци (так званий розділ 0) в HTML, наприклад: http://en.wikipedia.org/w/api.php?format=json&action=parse&page=Stack_Overflow&prop=text§ion=0&callback=?
Потім він знімає HTML та інші небажані дані, даючи вам чистий рядок підсумків статті, якщо ви хочете, можете, трохи переробити, отримати "p" html-тег навколо провідних абзаців, але зараз є лише новий рядок персонаж між ними.
Код:
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 поверне резюме у форматі XML.
http://lookup.dbpedia.org/api/search.asmx/KeywordSearch?QueryString=Agra&MaxHits=1
Я створив функцію для отримання опису ключового слова з 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');
Ви також можете отримати такі матеріали , як перший pagagraph через DBpedia який приймає зміст Вікіпедії і створює структуровану інформацію з нього (RDF) і робить його доступним через API. API DBPedia є SPARQL (на базі RDF), але він видає JSON, і його досить легко перетворити.
Як приклад, ось надзвичайно проста бібліотека JS з назвою WikipediaJS, яка може витягувати структурований контент, включаючи перший підсумок підсумків: http://okfnlabs.org/wikipediajs/
Детальніше про це можна прочитати в цьому дописі в блозі: http://okfnlabs.org/blog/2012/09/10/wikipediajs-a-javascript-library-for-accessing-wikipedia-article-information.html
Код бібліотеки JS можна знайти тут: https://github.com/okfn/wikipediajs/blob/master/wikipedia.js
У abstract.xml.gz
смітнику звучить , як той , який ви хочете.
Якщо ви просто шукаєте текст, який ви можете потім розділити, але не хочете використовувати API, подивіться на en.wikipedia.org/w/index.php?title=Elephant&action=raw
Мій підхід був такий (у 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
може знадобитися додаткове очищення, але це в основному все.
Я спробував рішення @Michael Rapadas та @ Krinkle, але в моєму випадку у мене виникли проблеми з пошуку деяких статей залежно від великої літери. Як тут:
Примітка. Я відповів усією відповіддю exsentences=1
Мабуть, «нормалізація заголовка» працювала неправильно:
Нормалізація заголовків перетворює заголовки сторінок у їх канонічну форму. Це означає використання великих літер, заміну підкреслення пробілами та зміну простору імен на локалізовану форму, визначену для цієї вікі. Нормалізація заголовка проводиться автоматично, незалежно від того, які модулі запитів використовуються. Однак будь-який розрив кінцевих рядків у заголовках сторінки (\ n) спричинить дивну поведінку, і їх слід попередньо виключити.
Я знаю, що міг легко розібратися з проблемою написання великої літери, але також було незручність передати об’єкт масиву.
Отже, тому що я просто хотів найперший абзац добре відомого та визначеного пошуку (не ризикуючи отримати інформацію з інших статей), я зробив це так:
https://en.wikipedia.org/w/api.php?action=opensearch&search=led%20zeppelin&limit=1&format=json
Зауважте, у цьому випадку я робив усікання limit=1
Сюди:
Але ми маємо бути обережними з приводу капіталізації нашого пошуку.
Більше інформації: https://www.mediawiki.org/wiki/API:Opensearch