Есть ли чистый API Википедии только для получения резюме контента?



Мне нужно просто получить первый абзац страницы Википедии.
Контент должен быть html-форматом, готовым к отображению на моих сайтах (так что нет BBCODE или специального кода Википедии!)

2653   12  

12 ответов:

есть способ получить весь раздел "введение" без какого-либо разбора html! Похоже на Антониса ответ дополнительно explaintext param, вы можете получить текст раздела intro в обычном тексте.

запрос

начало интро переполнение стека в обычный текст:

https://en.wikipedia.org/w/api.php?format=json&action=query&prop=extracts&exintro&explaintext&redirects=1&titles=Stack%20Overflow

JSON Ответ

(предупреждения содрали)

{
    "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: query / prop=extracts


Правка: Добавил &redirects=1 как рекомендовали в комментариях.

есть на самом деле очень приятно prop под названием выдержки это может быть использовано с запросами, разработанными специально для этой цели. Экстракты позволяют получить выдержки из статьи (усеченный текст статьи). Существует параметр под названием exintro Это можно использовать для получить текст в нулевой секции (никаких дополнительных ресурсов, таких как изображения или информационные буксы). Вы также можете извлекать экстракты с более тонкой детализацией, например, с помощью определенное количество символов ( exchars) или на определенное количество предложений(exsentences)

здесь образец запроса http://en.wikipedia.org/w/api.php?action=query&prop=extracts&format=json&exintro=&titles=Stack%20Overflow а то API sandbox http://en.wikipedia.org/wiki/Special:ApiSandbox#action=query&prop=extracts&format=json&exintro=&titles=Stack%20Overflow поэкспериментировать подробнее с этим запросом.

обратите внимание, что если вы хотите, чтобы первый абзац конкретно вам все еще нужно сделать некоторые дополнительные разбор, как это предлагается в выбранном ответе. Разница здесь заключается в том, что ответ, возвращаемый этим запросом, короче, чем некоторые другие предлагаемые запросы api, потому что у вас нет дополнительных ресурсов, таких как изображения в ответе 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&section=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.
}

Да, есть. Например, если вы хотите получить содержание первого раздела статьи Переполнение Стека, используйте такой запрос:

http://en.wikipedia.org/w/api.php?format=xml&action=query&prop=revisions&titles=Stack%20Overflow&rvprop=content&rvsection=0&rvparse

части означают это:

  • format=xml: возвращает форматирование результатов в формате XML. Другие варианты (как JSON) доступны. Этот не влияет на формат самого содержимого страницы, только на формат вложенных данных.

  • action=query&prop=revisions: получение информации о редакциях страницы. Поскольку мы не указываем, какая ревизия, используется последняя.

  • titles=Stack%20Overflow: получать информацию о странице Stack Overflow. Можно получить текст нескольких страниц за один раз, если вы разделите их имена на |.

  • rvprop=content: возврат содержимого (или текст) редакции.

  • rvsection=0: возврат только содержимого из раздела 0.

  • rvparse: возвращает содержимое, проанализированное как HTML.

имейте в виду, что это возвращает весь первый раздел, включая такие вещи, как hatnotes ("для других целей..."), infoboxes или изображения.

есть несколько библиотек для различных языков, которые делают работу с API проще, это может быть лучше для вас, если вы использовали один из них.

С 2017 года Википедия предоставляет REST API С лучшего кэширования. В документация вы можете найти следующий API, который идеально подходит для вашего случая использования. (как это используется новым Страница Превью функция)

https://en.wikipedia.org/api/rest_v1/page/summary/Stack_Overflow возвращает следующие данные, которые могут быть использованы для отображения лета с небольшой миниатюрой:

{
  "title": "Stack Overflow",
  "displaytitle": "Stack Overflow",
  "pageid": 21721040,
  "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. It was created to be a more open alternative to earlier question and answer sites such as Experts-Exchange. [...]",
  "extract_html": "<p><b>Stack Overflow</b> is a privately held website, the flagship site of the Stack Exchange Network, created in 2008 by Jeff Atwood and Joel Spolsky. It was created to be a more open alternative to earlier question and answer sites such as Experts-Exchange. [...]",
  "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",
  "timestamp": "2018-01-30T09:21:21Z",
  "description": "website hosting questions and answers on a wide range of topics in computer programming"
}

по умолчанию он выполняет переадресацию (так что /api/rest_v1/page/summary/StackOverflow также работает), но это можно отключить с помощью ?redirect=false

Если вам нужно получить доступ к API из другого домена, вы можете установить заголовок CORS с помощью &origin= (например,&origin=*)

Это код, который я использую прямо сейчас для веб-сайта, который я делаю, который должен получить ведущие абзацы / резюме / раздел 0 из статей Википедии, и все это делается в браузере (javascript на стороне клиента) благодаря магии JSONP! --> http://jsfiddle.net/gautamadude/HMJJg/1/

он использует API Википедии, чтобы получить ведущие абзацы (называемые разделом 0) в HTML, например: http://en.wikipedia.org/w/api.php?format=json&action=parse&page=Stack_Overflow&prop=text&section=0&callback=?

затем он удаляет HTML и другие нежелательные данные, давая вам чистую строку резюме статьи, если вы хотите, вы можете, с небольшой настройкой, получить тег html "p" вокруг ведущих абзацев, но прямо сейчас между ними есть только символ новой строки.

код:

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&section=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

Я создал функцию для извлечения описания ключевого слова из Википедии.

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 свалка звучит, как вы хотите.

мой подход был следующим (в 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, но в моем случае мне было трудно найти некоторые статьи в зависимости от капитализации. Как здесь:

https://en.wikipedia.org/w/api.php?format=json&action=query&prop=extracts&exintro=&exsentences=1&explaintext=&titles=Led%20zeppelin

Примечание я усек ответ с exsentences=1

по-видимому, "нормализация названия" не работала правильно:

название нормализация преобразует заголовки страниц в их каноническую форму. Этот означает заглавную букву первого символа, заменяя подчеркивания на пространства и изменение пространства имен в локализованную форму, определенную для этого вики. Нормализация заголовка выполняется автоматически, независимо от того, используются модули запросов. Однако любые конечные разрывы строк на странице заголовки (\n) вызовут странное поведение, и они должны быть удалены первый.

Я знаю, что мог бы разобраться вопрос капитализации легко, но было также неудобство того, чтобы привести объект к массиву.

поэтому, потому что я просто очень хотел, чтобы самый первый абзац хорошо известного и определенного поиска (без риска получить информацию из других статей) я сделал это так:

https://en.wikipedia.org/w/api.php?action=opensearch&search=led%20zeppelin&limit=1&format=json

Примечание в этом случае я сделал усечение с limit=1

таким образом:

  1. я очень легко могу получить доступ к данным ответом.
  2. ответ довольно мал.

но мы должны быть осторожны с капитализацией наш поиск.

дополнительная информация:https://www.mediawiki.org/wiki/API:Opensearch

Если вы просто ищете текст, который вы можете разделить, но не хотите использовать API, посмотрите en.wikipedia.org/w/index.php?title=Elephant&action=raw

Comments

    Ничего не найдено.