Saya hanya perlu mengambil paragraf pertama dari halaman Wikipedia. Konten harus berformat html, siap untuk ditampilkan di situs web saya (jadi TIDAK ADA BBCODE, atau KODE khusus WIKIPEDIA!)
Saya hanya perlu mengambil paragraf pertama dari halaman Wikipedia. Konten harus berformat html, siap untuk ditampilkan di situs web saya (jadi TIDAK ADA BBCODE, atau KODE khusus WIKIPEDIA!)
Jawaban:
Ada cara untuk mendapatkan seluruh "bagian intro" tanpa penguraian html! Mirip dengan jawaban AnthonyS dengan explaintext
param tambahan , Anda bisa mendapatkan teks bagian intro dalam teks biasa.
Mendapatkan intro Stack Overflow dalam teks biasa:
(peringatan dilucuti)
{
"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."
}
}
}
}
Dokumentasi: API: query / prop = ekstrak
Sunting: Ditambahkan &redirects=1
seperti yang direkomendasikan dalam komentar.
$extract = current((array)$data->query->pages)->extract;
. tetapi "Pemberitahuan: Mencoba mendapatkan properti yang bukan objek" terus muncul.
Sebenarnya ada prop yang sangat bagus yang disebut ekstrak yang dapat digunakan dengan pertanyaan yang dirancang khusus untuk tujuan ini. Ekstrak memungkinkan Anda untuk mendapatkan ekstrak artikel (teks artikel terpotong). Ada parameter yang disebut exintro yang dapat digunakan untuk mengambil teks di bagian nol (tidak ada aset tambahan seperti gambar atau kotak informasi). Anda juga dapat mengambil ekstrak dengan granularity yang lebih halus seperti dengan sejumlah karakter ( exchars ) atau dengan sejumlah kalimat tertentu ( exsentences )
Berikut adalah contoh permintaan http://en.wikipedia.org/w/api.php?action=query&prop=extracts&format=json&exintro=&titles=Stack%20Overflow dan kotak pasir API http://en.wikipedia.org/wiki/ Khusus: ApiSandbox # action = query & prop = ekstrak & format = json & exintro = & title = Stack% 20Overflow untuk bereksperimen lebih banyak dengan query ini.
Harap perhatikan bahwa jika Anda menginginkan paragraf pertama secara spesifik, Anda masih perlu melakukan parsing tambahan seperti yang disarankan dalam jawaban yang dipilih. Perbedaannya di sini adalah bahwa respons yang dikembalikan oleh kueri ini lebih pendek daripada beberapa kueri api lain yang disarankan karena Anda tidak memiliki aset tambahan seperti gambar di respons api untuk diuraikan.
Sejak 2017 Wikipedia menyediakan API REST dengan caching yang lebih baik. Dalam dokumentasi Anda dapat menemukan API berikut yang sangat cocok dengan kasus penggunaan Anda. (seperti yang digunakan oleh fitur Pratinjau Halaman baru )
https://en.wikipedia.org/api/rest_v1/page/summary/Stack_Overflow
mengembalikan data berikut yang dapat digunakan untuk menampilkan musim panas dengan thumbnail kecil:
{
"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"
}
}
Secara default, ini mengikuti pengalihan (sehingga /api/rest_v1/page/summary/StackOverflow
juga berfungsi), tetapi ini dapat dinonaktifkan dengan?redirect=false
Jika Anda perlu mengakses API dari domain lain, Anda dapat mengatur header CORS dengan &origin=
(misalnya &origin=*
)
Pembaruan 2019: API tampaknya mengembalikan informasi yang lebih berguna tentang halaman.
"other_tags" : "\"addr:country\"=>\"CW\",\"historic\"=>\"ruins\",\"name:nl\"=>\"Riffort\",\"wikidata\"=>\"Q4563360\",\"wikipedia\"=>\"nl:Riffort\""
Bisakah kita mendapatkan ekstrak sekarang dengan QID?
Kode ini memungkinkan Anda untuk mengambil konten paragraf pertama halaman dalam teks biasa.
Sebagian dari jawaban ini datang dari sini dan dari sini . Lihat dokumentasi MediaWiki API untuk informasi lebih lanjut.
// 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.
}
Ya ada. Misalnya, jika Anda ingin mendapatkan konten dari bagian pertama artikel Stack Overflow , gunakan kueri seperti ini:
Bagian artinya:
format=xml
: Kembalikan pemformat hasil sebagai XML. Opsi lain (seperti JSON) tersedia. Ini tidak memengaruhi format konten halaman itu sendiri, hanya format data terlampir.
action=query&prop=revisions
: Dapatkan informasi tentang revisi halaman. Karena kami tidak menentukan revisi mana, revisi terbaru digunakan.
titles=Stack%20Overflow
: Dapatkan informasi tentang halaman Stack Overflow
. Dimungkinkan untuk mendapatkan teks dari lebih banyak halaman sekaligus, jika Anda memisahkan namanya |
.
rvprop=content
: Kembalikan konten (atau teks) revisi.
rvsection=0
: Hanya kembalikan konten dari bagian 0.
rvparse
: Kembalikan konten yang diuraikan sebagai HTML.
Perlu diingat bahwa ini mengembalikan seluruh bagian pertama termasuk hal-hal seperti hatnotes ("Untuk kegunaan lain ..."), kotak info atau gambar.
Ada beberapa perpustakaan yang tersedia untuk berbagai bahasa yang membuat bekerja dengan API lebih mudah, mungkin lebih baik bagi Anda jika Anda menggunakan salah satu dari mereka.
&redirects=true
ke akhir tautan memastikan Anda mendapatkan artikel tujuan, jika ada.
Ini adalah kode yang saya gunakan saat ini untuk situs web yang saya buat yang perlu mendapatkan paragraf / ringkasan / bagian 0 dari artikel Wikipedia, dan semuanya dilakukan di dalam browser (javascript sisi klien) berkat magick dari JSONP! -> http://jsfiddle.net/gautamadude/HMJJg/1/
Ini menggunakan API Wikipedia untuk mendapatkan paragraf terkemuka (disebut bagian 0) dalam HTML seperti: http://en.wikipedia.org/w/api.php?format=json&action=parse&page=Stack_Overflow&prop=text§ion=0&callback=?
Ini kemudian menghapus HTML dan data yang tidak diinginkan lainnya, memberi Anda serangkaian ringkasan artikel yang bersih, jika Anda mau, dengan sedikit penyesuaian, dapatkan tag html "p" di sekitar paragraf terkemuka, tetapi saat ini hanya ada baris baru karakter di antara mereka.
Kode:
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 ini akan mengembalikan ringkasan dalam format xml.
http://lookup.dbpedia.org/api/search.asmx/KeywordSearch?QueryString=Agra&MaxHits=1
Saya telah membuat fungsi untuk mengambil deskripsi kata kunci dari 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');
Anda juga bisa mendapatkan konten seperti pagagraf pertama melalui DBPedia yang mengambil konten Wikipedia dan membuat informasi terstruktur darinya (RDF) dan membuatnya tersedia melalui API. DBPedia API adalah SPARQL (berbasis RDF) tetapi menghasilkan JSON dan cukup mudah untuk dibungkus.
Sebagai contoh di sini adalah perpustakaan JS super sederhana bernama WikipediaJS yang dapat mengekstraksi konten terstruktur termasuk ringkasan paragraf pertama: http://okfnlabs.org/wikipediajs/
Anda dapat membaca lebih lanjut tentang hal ini di posting blog ini: http://okfnlabs.org/blog/2012/09/10/wikipediajs-a-jajacriptcript-library-for-accessing-wikipedia-article-information.html
Kode perpustakaan JS dapat ditemukan di sini: https://github.com/okfn/wikipediajs/blob/master/wikipedia.js
Tempat abstract.xml.gz
sampah terdengar seperti yang Anda inginkan.
Jika Anda hanya mencari teks yang dapat Anda pisah tetapi tidak ingin menggunakan API, lihat en.wikipedia.org/w/index.php?title=Elephant&action=raw
Pendekatan saya adalah sebagai berikut (dalam 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
mungkin perlu dibersihkan lebih lanjut, tetapi pada dasarnya itu saja.
Saya mencoba @Michael Rapadas dan solusi @ Krinkle tetapi dalam kasus saya, saya mengalami kesulitan untuk menemukan beberapa artikel tergantung dari kapitalisasi. Seperti di sini:
Catatan saya memotong respons dengan exsentences=1
Tampaknya "normalisasi judul" tidak berfungsi dengan benar:
Normalisasi judul mengubah judul halaman menjadi bentuk kanonik mereka. Ini berarti menggunakan huruf besar karakter pertama, mengganti garis bawah dengan spasi, dan mengubah namespace ke bentuk terlokalisasi yang ditentukan untuk wiki itu. Normalisasi judul dilakukan secara otomatis, terlepas dari modul kueri yang digunakan. Namun, setiap garis trailing yang terputus dalam judul halaman (\ n) akan menyebabkan perilaku aneh dan mereka harus dihapus terlebih dahulu.
Saya tahu saya bisa menyelesaikan masalah kapitalisasi dengan mudah tetapi ada juga ketidaknyamanan karena harus membuang objek ke array.
Jadi karena saya benar-benar menginginkan paragraf pertama dari pencarian yang terkenal dan terdefinisi (tidak ada risiko untuk mengambil info dari artikel lain) saya melakukannya seperti ini:
https://en.wikipedia.org/w/api.php?action=opensearch&search=led%20zeppelin&limit=1&format=json
Perhatikan dalam hal ini saya melakukan pemotongan limit=1
Cara ini:
Tetapi kita harus tetap berhati-hati dengan penggunaan huruf kapital pencarian kita.
Info lebih lanjut: https://www.mediawiki.org/wiki/API:Opensearch