Czy istnieje czyste API Wikipedii Tylko do pobierania podsumowania treści?

Potrzebuję tylko odzyskać pierwszy akapit strony Wikipedii. Treść musi być sformatowana w html, gotowa do wyświetlenia na moich stronach (więc nie ma BBCODE, ani specjalnego kodu Wikipedii!)

Author: sparkle, 2011-12-19

12 answers

Jest sposób, aby uzyskać całą "sekcję intro" bez żadnego parsowania html! Podobnie do odpowiedzi Anthonysa z dodatkowym param explaintext, możesz uzyskać tekst sekcji intro w zwykłym tekście.

Zapytanie

Getting Stack Overflow ' s intro in plain text:

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

Odpowiedź JSON

(Ostrzeżenia stripped)

{
    "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."
            }
        }
    }
}

Documentation: API: query / prop=extracts


Edit: Dodano {[2] } zgodnie z zaleceniami w komentarzach.

 161
Author: Mike Rapadas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-14 06:49:20

Istnieje naprawdę bardzo ładny prop o nazwie wyciągi które mogą być używane z zapytaniami zaprojektowanymi specjalnie do tego celu. Ekstrakty pozwalają na otrzymywanie wyciągów artykułów (okrojony tekst artykułu). Istnieje parametr o nazwie exintro , który może być użyty do pobrania tekstu w sekcji zero (BEZ dodatkowych zasobów, takich jak obrazy lub infoboksy). Można również pobierać ekstrakty z drobniejszą szczegółowością, na przykład przez określoną liczbę znaków ( ) lub przez określoną liczbę zdań ( exsentences )

Oto przykładowe zapytanie http://en.wikipedia.org/w/api.php?action=query&prop=extracts&format=json&exintro=&titles=Stack%20Overflow oraz API sandbox http://en.wikipedia.org/wiki/Special:ApiSandbox#action=query&prop=extracts&format=json&exintro=&titles=Stack%20Overflow{[5]aby poeksperymentować z tym zapytaniem.

Należy pamiętać, że jeśli chcesz pierwszy paragraf w szczególności nadal musisz wykonać dodatkowe parsowanie zgodnie z sugestią w wybranej odpowiedzi. Różnica polega na tym, że odpowiedź zwracana przez to zapytanie jest krótsza niż niektóre z innych zapytań api sugerowanych, ponieważ nie masz dodatkowych zasobów, takich jak obrazy w odpowiedzi api na analizę.

 70
Author: AnthonyS,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-29 07:42:41

Ten kod pozwala pobrać zawartość pierwszego akapitu strony w postaci zwykłego tekstu.

Części tej odpowiedzi pochodzą z tutaj , a więc tutaj . Zobacz Dokumentacja API MediaWiki aby uzyskać więcej informacji.

// 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.
}
 39
Author: Alexandre Vaillancourt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:10:29

Tak, jest. Na przykład, jeśli chcesz uzyskać zawartość pierwszej sekcji artykułu przepełnienie stosu , użyj zapytania takiego:

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

Części oznaczają to:

  • format=xml: zwraca formater wynikowy jako XML. Inne opcje (jak JSON) są dostępne. Nie ma to wpływu na format strony sama treść, tylko format danych.

  • action=query&prop=revisions: Uzyskaj informacje o wersjach strony. Ponieważ nie określamy wersji, używana jest najnowsza wersja.

  • titles=Stack%20Overflow: Uzyskaj informacje o stronie Stack Overflow. Możliwe jest uzyskanie tekstu większej liczby stron za jednym zamachem, jeśli ich nazwy zostaną oddzielone |.

  • rvprop=content: zwraca zawartość (lub tekst) rewizji.

  • rvsection=0: zwróć tylko zawartość z sekcji 0.

  • rvparse: zwraca zawartość przetworzoną jako HTML.

Należy pamiętać, że to zwraca całą pierwszą sekcję, w tym rzeczy takie jak hatnotes ("do innych zastosowań ..."), infoboxy lub obrazy.

Istnieje kilka bibliotek dostępnych dla różnych języków, które ułatwiają pracę z API.

 28
Author: svick,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-19 09:55:13

Od 2017 roku Wikipedia udostępnia API REST z lepszym buforowaniem. W dokumentacji znajdziesz następujące API, które idealnie pasuje do twojego przypadku użycia. (ponieważ jest używany przez nową funkcję Page Previews )

https://en.wikipedia.org/api/rest_v1/page/summary/Stack_Overflow zwraca następujące dane, które można wykorzystać do wyświetlenia summery z małą miniaturką:

{
  "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"
}

Domyślnie następuje przekierowanie (tak, że /api/rest_v1/page/summary/StackOverflow również działa) , ale można to wyłączyć za pomocą ?redirect=false

Jeśli potrzebujesz dostępu do API z innej domeny można ustawić nagłówek CORS za pomocą &origin= (np. &origin=*)

 27
Author: Lukas Winkler,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-10 18:30:17

Jest to kod, którego używam teraz do tworzenia strony internetowej, która musi uzyskać wiodące akapity / podsumowanie / sekcję 0 artykułów z Wikipedii, a wszystko odbywa się w przeglądarce (javascript po stronie klienta) dzięki magii JSONP! -- > http://jsfiddle.net/gautamadude/HMJJg/1/

Używa API Wikipedii, aby uzyskać wiodące akapity (zwane sekcją 0) W HTML w ten sposób: http://en.wikipedia.org/w/api.php?format=json&action=parse&page=Stack_Overflow&prop=text&section=0&callback=?

Następnie usuwa HTML i inne niepożądane dane, dając czysty ciąg podsumowania artykułu, jeśli chcesz, możesz, z małym dostosowaniem, uzyskać znacznik html " p " wokół wiodących akapitów, ale teraz jest tylko znak nowej linii między nimi.

Kod:

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
    }
});
 15
Author: 01AutoMonkey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-09 21:35:56

Ten adres URL zwróci podsumowanie w formacie xml.

http://lookup.dbpedia.org/api/search.asmx/KeywordSearch?QueryString=Agra&MaxHits=1

Stworzyłem funkcję pobierania opisu słowa kluczowego z Wikipedii.

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');
 8
Author: Amit Garg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-24 13:14:41

Możesz również uzyskać zawartość, taką jak pierwsza strona za pośrednictwem DBPedia, która pobiera zawartość Wikipedii i tworzy z niej ustrukturyzowane informacje (RDF) i udostępnia je za pośrednictwem API. API DBPedia jest SPARQL (oparte na RDF), ale wyprowadza JSON i jest dość łatwe do zawinięcia.

Jako przykład oto bardzo prosta biblioteka js o nazwie WikipediaJS, która może wyodrębnić uporządkowaną treść, w tym Podsumowanie pierwszego akapitu: http://okfnlabs.org/wikipediajs/

Możesz przeczytać więcej na ten temat w tym wpisie na blogu: http://okfnlabs.org/blog/2012/09/10/wikipediajs-a-javascript-library-for-accessing-wikipedia-article-information.html

Kod biblioteki JS można znaleźć tutaj: https://github.com/okfn/wikipediajs/blob/master/wikipedia.js

 5
Author: Rufus Pollock,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-10 17:54:12

The abstract.xml.gz dump brzmi jak ten, którego chcesz.

 2
Author: sarnold,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-18 22:35:10

Moje podejście było następujące (w 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 może trzeba jeszcze posprzątać, ale to wszystko.

 1
Author: Alex,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-16 13:40:00

Próbowałem @Michael Rapadas i @Krinkle ' s solution, ale w moim przypadku miałem problem ze znalezieniem niektórych artykułów w zależności od kapitalizacji. Jak tutaj:

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

Uwaga obcięłam odpowiedź exsentences=1

Najwyraźniej "normalizacja tytułu"nie działała poprawnie:

Title normalizacja konwertuje tytuły stron na ich forma kanoniczna. To oznacza kapitalizowanie pierwszego znaku, zastąpienie podkreślenia przez spacje, oraz zmiana przestrzeni nazw na formę lokalną zdefiniowaną dla tego wiki. Normalizacja tytułu odbywa się automatycznie, niezależnie od używane są moduły zapytań. Jednak wszelkie końcowe podziały linii na stronie tytuły (\n) będą powodować dziwne zachowania i powinny zostać usunięte najpierw.

Wiem, że mogłem łatwo rozwiązać problem z kapitalizacją, ale były też niedogodności o konieczności oddania obiektu do tablicy.

Więc ponieważ po prostu bardzo chciałem pierwszy akapit dobrze znanego i zdefiniowanego wyszukiwania (nie ma ryzyka, aby pobrać informacje z innych artykułów) zrobiłem to tak:

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

Uwaga w tym przypadku zrobiłem okrojenie z limit=1

W ten sposób:

  1. mogę uzyskać dostęp do danych odpowiedzi bardzo łatwo.
  2. odpowiedź jest dość mały.
Ale musimy być ostrożni z kapitalizacją naszych poszukiwań.

Więcej informacji: https://www.mediawiki.org/wiki/API:Opensearch

 1
Author: gugol,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-01 14:13:27

Jeśli szukasz tylko tekstu, który możesz następnie podzielić, ale nie chcesz korzystać z API, spójrz na en.wikipedia.org/w/index.php?title=Elephant&action=raw

 0
Author: mr.user1065741,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-18 18:04:59