Sadece bir Wikipedia sayfasının ilk paragrafını almam gerekiyor. İçerik html olarak biçimlendirilmiş, web sitelerimde görüntülenmeye hazır olmalıdır (bu nedenle BBCODE veya WIKIPEDIA özel KODU YOK!)
Sadece bir Wikipedia sayfasının ilk paragrafını almam gerekiyor. İçerik html olarak biçimlendirilmiş, web sitelerimde görüntülenmeye hazır olmalıdır (bu nedenle BBCODE veya WIKIPEDIA özel KODU YOK!)
Yanıtlar:
Herhangi bir html ayrıştırma yapmadan tüm "intro bölümünü" almanın bir yolu var! AnthonyS'nin ek bir parametreyle verdiği cevaba benzer şekilde explaintext
, giriş bölümü metnini düz metin olarak alabilirsiniz.
Yığın Taşması'nın girişini düz metin olarak alma:
(uyarılar kaldırıldı)
{
"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."
}
}
}
}
Dokümantasyon: API: query / prop = alıntılar
Düzenleme: &redirects=1
Yorumlarda önerildiği gibi eklendi .
$extract = current((array)$data->query->pages)->extract;
. ancak "Uyarı: Nesne dışı özelliğini almaya çalışmak" devam ediyor.
Aslında , bu amaç için özel olarak tasarlanmış sorgularla kullanılabilen, özler adı verilen çok güzel bir destek var . Alıntılar makale alıntıları (kesilmiş makale metni) almanızı sağlar. Sıfırıncı bölümdeki metni almak için kullanılabilecek exintro adı verilen bir parametre vardır (resimler veya bilgi kutuları gibi ek varlık yok). Ayrıca, belirli sayıda karakter ( uyarma ) veya belirli sayıda cümle ( exsentences ) gibi daha küçük ayrıntı düzeyine sahip alıntılar da alabilirsiniz.
İşte olan örnek sorgu http://en.wikipedia.org/w/api.php?action=query&prop=extracts&format=json&exintro=&titles=Stack%20Overflow ve API test ortamı http://en.wikipedia.org/wiki/ Özel: ApiSandbox # action = query & prop = ayıklar & format = json & exintro = & titles = Bu sorgu ile daha fazla deneme yapmak için % 20 Aşırı Akışı yığınla .
İlk paragrafı özellikle istiyorsanız, yine de seçilen cevapta önerildiği gibi ek ayrıştırma yapmanız gerektiğini unutmayın. Buradaki fark, bu sorgu tarafından döndürülen yanıtın, çözümlenecek api yanıtında görüntüler gibi ek varlıklara sahip olmadığınız için önerilen diğer api sorgularından bazılarından daha kısa olmasıdır.
2017'den bu yana Wikipedia, daha iyi önbelleğe sahip bir REST API'si sunuyor . Gelen belgeler size mükemmel kullanım örneğini uyan aşağıdaki API bulabilirsiniz. (yeni Sayfa Önizlemeleri özelliği tarafından kullanıldığı için )
https://en.wikipedia.org/api/rest_v1/page/summary/Stack_Overflow
küçük bir küçük resmi içeren bir yazlık görüntülemek için kullanılabilecek aşağıdaki verileri döndürür:
{
"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"
}
}
Varsayılan olarak, yönlendirmeleri izler (böylece /api/rest_v1/page/summary/StackOverflow
de çalışır), ancak bu ile devre dışı bırakılabilir?redirect=false
Başka bir etki alanından API erişmek gerekiyorsa ile CORS başlığı ayarlayabilirsiniz &origin=
(mesela &origin=*
)
2019 Güncellemesi: API, sayfa hakkında daha yararlı bilgiler döndürüyor gibi görünüyor.
"other_tags" : "\"addr:country\"=>\"CW\",\"historic\"=>\"ruins\",\"name:nl\"=>\"Riffort\",\"wikidata\"=>\"Q4563360\",\"wikipedia\"=>\"nl:Riffort\""
Şimdi QID tarafından özü alabilir miyim?
Bu kod, sayfanın ilk paragrafının içeriğini düz metin olarak almanızı sağlar.
Bu cevabın bazı kısımları buradan ve dolayısıyla buradan geliyor . Daha fazla bilgi için MediaWiki API belgelerine bakın .
// 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.
}
Evet var. Örneğin, Yığın Taşması makalesinin ilk bölümünün içeriğini almak istiyorsanız , şöyle bir sorgu kullanın:
Parçalar şu anlama gelir:
format=xml
: Sonuç biçimlendiricisini XML olarak döndür. Diğer seçenekler (JSON gibi) mevcuttur. Bu, sayfa içeriğinin biçimini etkilemez, yalnızca ekteki veri biçimini etkiler.
action=query&prop=revisions
: Sayfanın düzeltmeleri hakkında bilgi edinin. Hangi düzeltmeyi belirtmediğimizden sonuncusu kullanılır.
titles=Stack%20Overflow
: Sayfa hakkında bilgi alın Stack Overflow
. İsimlerini ayırırsanız, bir seferde daha fazla sayfanın metnini almak mümkündür |
.
rvprop=content
: Düzeltmenin içeriğini (veya metnini) döndürün.
rvsection=0
: Yalnızca bölüm 0'dan içerik döndürün.
rvparse
: HTML olarak ayrıştırılan içeriği döndürür.
Bunun, hatnotlar (“Diğer kullanımlar için…”), bilgi kutuları veya resimler gibi ilk bölümün tamamını döndürdüğünü unutmayın.
API ile çalışmayı kolaylaştıran çeşitli diller için çeşitli kütüphaneler vardır, bunlardan birini kullandıysanız sizin için daha iyi olabilir.
&redirects=true
Bağlantının sonuna eklemek , varsa hedef makaleye ulaşmanızı sağlar.
Bu, şu anda Wikipedia makalelerinin önde gelen paragraflarını / özetini / bölümünü 0 alması gereken bir web sitesi için kullanıyorum ve sihirbaz sayesinde hepsi tarayıcıda (istemci tarafı javascript) yapılır. JSONP! -> http://jsfiddle.net/gautamadude/HMJJg/1/
HTML'de baştaki paragrafları (bölüm 0 olarak adlandırılır) şu şekilde almak için Wikipedia API'sını kullanır: http://en.wikipedia.org/w/api.php?format=json&action=parse&page=Stack_Overflow&prop=text§ion=0&callback=?
Daha sonra HTML ve diğer istenmeyen verileri çıkarır, size bir makale özeti temiz bir dize verir, isterseniz, küçük bir değişiklikle, önde gelen paragrafların etrafında bir "p" html etiketi alabilirsiniz, ancak şu anda sadece yeni bir satır var karakter arasında.
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§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
}
});
Bu url özetini xml biçiminde döndürür.
http://lookup.dbpedia.org/api/search.asmx/KeywordSearch?QueryString=Agra&MaxHits=1
Vikipedi'den bir anahtar kelimenin açıklamasını almak için bir işlev oluşturdum.
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');
Ayrıca , Vikipedi içeriğini alan ve ondan yapılandırılmış bilgi ( DBF) oluşturan ve bunu bir API aracılığıyla kullanılabilir hale getiren DBPedia aracılığıyla ilk sayfalama gibi içerikleri de alabilirsiniz . DBPedia API bir SPARQL (RDF tabanlı) ama JSON çıktı ve sarmak oldukça kolaydır.
Örnek olarak, bir özet ilk paragraf da dahil olmak üzere yapılandırılmış içeriği ayıklayabilen WikipediaJS adında süper basit bir JS kütüphanesi: http://okfnlabs.org/wikipediajs/
Bu blog yayınında daha fazla bilgi bulabilirsiniz: http://okfnlabs.org/blog/2012/09/10/wikipediajs-a-javascript-library-for-accessing-wikipedia-article-information.html
JS kütüphane kodunu şu adreste bulabilirsiniz: https://github.com/okfn/wikipediajs/blob/master/wikipedia.js
abstract.xml.gz
Dökümü sesleri istediğiniz birini ister.
Sadece bölebileceğiniz ancak API'yı kullanmak istemediğiniz metni arıyorsanız en.wikipedia.org/w/index.php?title=Elephant&action=raw adresine bakın.
Benim yaklaşımım (PHP'de) şu şekildeydi:
$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
daha fazla temizlenmesi gerekebilir, ancak temelde budur.
@Michael Rapadas ve @ Krinkle'nin çözümünü denedim ama benim durumumda büyük / küçük harf kullanımına bağlı olarak bazı makaleler bulmakta zorlandım. Burası gibi:
Not ile yanıtı kestim exsentences=1
Görünüşe göre "başlık normalizasyonu" düzgün çalışmıyor:
Başlık normalizasyonu sayfa başlıklarını standart formlarına dönüştürür. Bu, ilk karakteri büyük harfe çevirme, alt çizgileri boşluklarla değiştirme ve ad alanını o wiki için tanımlanan yerelleştirilmiş forma değiştirme anlamına gelir. Hangi sorgu modüllerinin kullanıldığına bakılmaksızın başlık normalleştirmesi otomatik olarak yapılır. Ancak, sayfa başlıklarındaki (\ n) sondaki satır sonları garip davranışlara neden olur ve önce bunların çıkarılması gerekir.
Büyük / küçük harf sorununu kolayca çözmüş olabileceğimi biliyorum, ancak nesneyi bir diziye dökmenin zorluğu da vardı.
Gerçekten iyi bilinen ve tanımlanmış bir aramanın ilk paragrafını istediğim için (başka bir makaleden bilgi alma riski yok) Bunu şöyle yaptım:
https://en.wikipedia.org/w/api.php?action=opensearch&search=led%20zeppelin&limit=1&format=json
Bu durumda, limit=1
Bu yoldan:
Ancak araştırmamızın büyük harf kullanımına dikkat etmeliyiz.
Daha fazla bilgi: https://www.mediawiki.org/wiki/API:Opensearch