ウィキペディアのページの最初の段落を取得するだけです。コンテンツはHTML形式で、ウェブサイトに表示する準備ができている必要があります(BBCODEなし、またはWIKIPEDIA特別コード!)
ウィキペディアのページの最初の段落を取得するだけです。コンテンツはHTML形式で、ウェブサイトに表示する準備ができている必要があります(BBCODEなし、またはWIKIPEDIA特別コード!)
回答:
HTMLを解析せずに「イントロセクション」全体を取得する方法があります。AnthonySの回答に似ていますが、explaintext
、イントロセクションのテキストをプレーンテキストで取得できます。
Stack 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:query / prop = extracts
編集:&redirects=1
コメントで推奨されているとおりに追加されました。
$extract = current((array)$data->query->pages)->extract;
。しかし、「通知:非オブジェクトのプロパティを取得しようとしています」が引き続き発生します。
この目的のために特別に設計されたクエリで使用できる、抽出と呼ばれる非常に優れたプロップがあります。抽出により、記事の抽出(切り捨てられた記事のテキスト)を取得できます。0番目のセクションのテキストを取得するために使用できるexintroというパラメーターがあります(画像や情報ボックスなどの追加のアセットはありません)。特定の数の文字(exchars)や特定の数の文(exsentences)など、より細かい粒度で抽出を取得することもできます。
ここにあるサンプルは、クエリ http://en.wikipedia.org/w/api.php?action=query&prop=extracts&format=json&exintro=&titles=Stack%20Overflow とAPIサンドボックス http://en.wikipedia.org/wiki/ Special:ApiSandbox#action = query&prop = extracts&format = json&exintro =&titles = Stack%20Overflowを使用して、このクエリをさらに実験してください。
特に最初の段落が必要な場合は、選択した回答で提案されているように、さらにいくつかの追加解析を行う必要があることに注意してください。ここでの違いは、解析するAPI応答に画像などの追加のアセットがないため、このクエリによって返される応答が他の一部のAPIクエリよりも短いことです。
2017年以降、ウィキペディアはより良いキャッシングを備えたREST APIを提供しています。ではドキュメントあなたは完全にあなたのユースケースに合う以下の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\""
抽出したjsonデータ があり、QIDで抽出を取得できますか?
このコードを使用すると、ページの最初の段落のコンテンツをプレーンテキストで取得できます。
この回答の一部はここから、つまりここから来ています。詳細については、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.
}
はいあります。たとえば、記事Stack Overflowの最初のセクションのコンテンツを取得する場合は、次のようなクエリを使用します。
パーツはこれを意味します:
format=xml
:結果のフォーマッターをXMLとして返します。他のオプション(JSONなど)を使用できます。これは、ページコンテンツ自体の形式には影響せず、それを囲むデータ形式にのみ影響します。
action=query&prop=revisions
:ページのリビジョンに関する情報を取得します。どのリビジョンを指定するかについては、最新のものを使用しています。
titles=Stack%20Overflow
:ページに関する情報を取得しますStack Overflow
。名前でで区切ると、一度に複数のページのテキストを取得できます|
。
rvprop=content
:リビジョンのコンテンツ(またはテキスト)を返します。
rvsection=0
:セクション0のコンテンツのみを返します。
rvparse
:HTMLとして解析されたコンテンツを返します。
これにより、ハットノート(「その他の用途」…)、情報ボックス、画像などを含む最初のセクション全体が返されることに注意してください。
APIの操作を容易にするさまざまな言語で利用可能ないくつかのライブラリーがあり、それらのいずれかを使用した方がよい場合があります。
&redirects=true
リンクの最後に追加すると、リンク先の記事がある場合は、そこに確実にアクセスできます。
これは、Wikipediaの記事の最初の段落/要約/セクション0を取得する必要がある作成中のWebサイトで現在使用しているコードであり、マジックのおかげですべてブラウザー(クライアント側のJavaScript)内で実行されますJSONP!-> http://jsfiddle.net/gautamadude/HMJJg/1/
Wikipedia APIを使用して、次のようにHTMLの先頭の段落(セクション0と呼ばれます)を取得します。http://en.wikipedia.org/w/api.php? format = json&action = parse&page = Stack_Overflow&prop = text& section = 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
ウィキペディアからキーワードの説明を取得する関数を作成しました。
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');
また、DBPediaを介して最初のpagagraphなどのコンテンツを取得することもできます。DBPediaは、ウィキペディアのコンテンツを取得し、そこから構造化情報(RDF)を作成し、APIを介してこれを利用可能にします。DBPedia APIはSPARQLの1つ(RDFベース)ですが、JSONを出力し、ラップするのは非常に簡単です。
例として、概要の最初の段落を含む構造化されたコンテンツを抽出できるWikipediaJSという名前の非常に単純なJSライブラリを次に示します。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
どうやら「タイトルの正規化」は正しく機能していませんでした:
タイトルの正規化は、ページタイトルを正規の形式に変換します。つまり、最初の文字を大文字にし、アンダースコアをスペースに置き換え、名前空間をそのwikiに定義されているローカライズされたフォームに変更します。タイトルの正規化は、使用されるクエリモジュールに関係なく、自動的に行われます。ただし、ページタイトルの末尾の改行(\ n)は奇妙な動作を引き起こすため、最初に削除する必要があります。
大文字の問題は簡単に解決できたはずですが、オブジェクトを配列にキャストしなければならないという不便もありました。
だから私は本当に有名で定義された検索の最初の段落が本当に欲しかったので(別の記事から情報を取得するリスクはありません)、私は次のようにしました:
https://en.wikipedia.org/w/api.php?action=opensearch&search=led%20zeppelin&limit=1&format=json
この場合、私は切り捨てを行ったことに注意してください limit=1
こちらです:
ただし、検索の大文字の使用には注意を払う必要があります。