mediawiki使⽤教程_使⽤PHP和MediaWikiAPI了解Wikipedia
信息
mediawiki使⽤教程
常⽤缩略语
API:应⽤程序接⼝
CSRF:跨站点请求伪造
HTML:超⽂本标记语⾔
HTTP:超⽂本传输协议
IP:⽹际⽹路通讯协定
JSON:JavaScript对象表⽰法
OOP:⾯向对象的编程
PEAR:PHP扩展和应⽤程序存储库
REST:代表性状态转移
WDDX:Web分布式数据交换
XHTML:可扩展超⽂本标记语⾔
XML:可扩展标记语⾔
YAML:YAML不是标记语⾔
⼤多数⼈都听说过Wikipedia:这是来⾃⼈的知识的终极存储库,⼏乎涵盖了您可以想到的所有主题,并且可供使⽤Web浏览器的任何⼈使⽤。 ⽆论您要查什么信息,都可以在Wikipedia上到详尽的详细信息。 并且由于它是可公开编辑的,因此它始终包含更新的相关信息。
⼤多数⼈对⼀⽆所知。 隐藏在幕后的是强⼤的Web服务API,它使开发⼈员可以访问,搜索Wikipedia内容并将其集成到⾃定义Web应⽤程序中。 该API可通过HTTP⼯作,并以多种不同格式(包括XML)返回数据,可供编程⼈员免费使⽤,并可以创建由Wikipedia 庞⼤的内容数据库提供⽀持的各种⾃定义Web应⽤程序。
在本⽂中,我向您简要介绍了此API,向您展⽰了如何将其与我最喜欢的编程语⾔PHP集成和使⽤。 本⽂介绍了API如何⼯作的基础知识,然后为您提供了列出⽬录类别,按类别或关键字搜索条⽬,检索和显⽰条⽬以及远程添加和编辑内容的实⽤演练。
了解API
在深⼊研究PHP代码之前,需要对Wikipedia API进⾏⼀些说明。 ⾸先,尽管我在本⽂中将其称为“ Wikipedia API”,但需要注意的是,该API并不是仅Wikipedia独有的。 它实际上是运⾏Wikipedia的MediaWiki基础应⽤程序的⼀部分,因此本⽂概述的技术和API⽅法也可以在任何其他基于MediaWiki的Wiki上使⽤。 您可以在参考资料中到指向MediaWiki和完整的MediaWiki API参考⼿册的 。
与所有基于HTTP的服务⼀样,API的⼯作⽅式是接受包含⼀个或多个输⼊参数的HTTP请求,并返回可以由请求客户端解析和使⽤的响应。响应通常采⽤XML格式,因为当今⼏乎每种编程语⾔都可以解析XML。 但是,也可以请求其他格式的响应,例如JSON,WDDX,YAML 或序列化PHP。
API的每个HTTP请求都必须包含⼀个强制性的“ action”参数,该参数指定了所需的操作。 此参数可以是查询,编辑或删除操作,⾝份验证请求或其他任何受⽀持的操作。 除了此必需的参数之外,还必须根据选择的操作传递其他参数,例如,⽤于查询的搜索关键字,⽤于编辑或删除操作的页⾯标题,或⽤于认证的⽤户名和密码。
要查看运⾏中的API,请尝试在您喜欢的Web浏览器中访问以下URL。 ( 注意:此URL实际上是单个字符串。仅出于格式化⽬的,该URL 显⽰为两⾏。)
/w/api.php?action=query&list=allcategories&acprop=size
&acprefix=hollywood&format=xml
此⽅法返回以前缀“好莱坞”开头的前10个Wikipedia类别的列表。 展⽰了对此请求的原始XML响应。
清单1.⼀个⽰例API feed
<?xml version="1.0"?>
<api>
<query>
<allcategories>
<c size="31" pages="28" files="0" subcats="3"
xml:space="preserve">Hollywood</c>
<c size="0" pages="0" files="0" subcats="0"
xml:space="preserve">Hollywood's Rock Walk inductees</c>
<c size="0" pages="0" files="0" subcats="0"
xml:space="preserve">Hollywood, California</c>
<c size="1" pages="1" files="0" subcats="0"
xml:space="preserve">Hollywood, Florida</c>
<c size="0" pages="0" files="0" subcats="0"
xml:space="preserve">Hollywood, Los Angeles, California</c>
<c size="0" pages="0" files="0" subcats="0"
xml:space="preserve">Hollywood/celebrity/Wanda Shelley</c>
<c size="0" pages="0" files="0" subcats="0"
xml:space="preserve">Hollywood Actors</c>
<c size="0" pages="0" files="0" subcats="0"
xml:space="preserve">Hollywood Actress</c>
<c size="0" pages="0" files="0" subcats="0"
xml:space="preserve">Hollywood Blacklist</c>
<c size="2" pages="2" files="0" subcats="0"
xml:space="preserve">Hollywood Boulevard</c>
</allcategories>
</query>
<query-continue>
<allcategories acfrom="Hollywood Cemetery (Richmond)" />
</query-continue>
</api>
列出类别和页⾯
现在您已经了解了API的⼯作原理,下⾯让我们看⼀些代码。 在本⽂全⽂中,我假定您熟悉HTML和XML,并且您具有⼀个⼯作正常的Apache / PHP开发环境,并且安装了最新版本的Zend Framework。 我还假定您了解使⽤PHP中的类和对象的基础知识,因为本⽂中使⽤PHP组件是按照OOP原则编写的。
要与API交互,您需要⼀个HTTP客户端,该客户端能够传输GET和POST请求并处理响应。 Zend Framework的Zend_Rest_Client组件是⼀个很好的⼯具,该组件专门为试图将PHP应⽤程序与Web服务集成的开发⼈员设计。 该客户端可⽤于对服务端点执⾏
GET,POST,PUT和DELETE响应。 XML响应作为Zend_Rest_Client_Response对象的实例返回,从⽽可以轻松访问各个响应属性。
说明了在PHP脚本的上下⽂中使⽤Zend_Rest_Client检索和显⽰的类别的过程。
清单2.列出类别
// define category prefix
$prefix = 'hollywood';
try {
// initialize REST client
$wikipedia = new Zend_Rest_Client('/w/api.php');
// set query parameters
$wikipedia->action('query');
$wikipedia->list('allcategories');
$wikipedia->acprefix($prefix);
$wikipedia->format('xml');
// perform request
/
/ iterate over XML result set
$result = $wikipedia->get();
} catch (Exception $e) {
die('ERROR: ' . $e->getMessage());
}
>
<html>
<head></head>
<body>
<h2>Search results for categories starting with
'<?php echo $prefix; ?>'</h2>
<ol>
<?php foreach ($result->query->allcategories->c as $c): ?>
<li><a href="/wiki/Category:
<?php echo $c; ?>"><?php echo $c; ?></a></li>
<?php endforeach; ?>
</ol>
</body>
</html>
⾸先初始化Zend Framework的⾃动加载器,然后加载Zend_Rest_Client组件。 创建Zend_Rest_Client对象的实例,并使⽤Wikipedia API服务端点作为构造函数参数进⾏初始化。 然后定义和添加请求参数,然后使⽤客户端对象的get()⽅法将请求传输到API。
Zend_Rest_Client⾃动接收来⾃服务器的XML响应,并将其转换为⼀组SimpleXML对象,您可以使⽤
php编程手册
标准的对象属性表⽰法对其进⾏访问。
说明了的输出。
图1.列出类别的⽹页
列出以“好莱坞”开头的类别的⽹页的屏幕截图
注意使⽤Zend_Rest_Client将请求参数传递到服务器的⽅式。 通过调⽤具有相同名称的客户端⽅法并将该值作为第⼀个参数传递给该⽅法来指定每个参数。 例如,要将参数action=query添加到请求中,脚本将调⽤$client->action('query') 。 您可以将Zend_Rest_Client⽂档(见阅读更多关于此中的链接)。
您还可以通过更改查询以返回类别成员⽽不是类别的列表来检索类别中的页⾯列表。 显然,您需要将类别名称作为输⼊传递给API。 考虑,它仅完成此任务。
清单3.列出类别中的页⾯
// define category
$cat = 'Greek_legendary_creatures';
try {
// initialize REST client
$wikipedia = new Zend_Rest_Client('/w/api.php');
// set query parameters
$wikipedia->action('query');
$wikipedia->list('categorymembers');
$wikipedia->cmtitle('Category:'.$cat);
$wikipedia->cmlimit('30');
$wikipedia->format('xml');
// perform request
// iterate over XML result set
$result = $wikipedia->get();
} catch (Exception $e) {
die('ERROR: ' . $e->getMessage());
}
>
<html>
<head></head>
<body>
<h2>Search results for pages in category
'<?php echo $cat; ?>'</h2>
<ol>
<?php foreach ($result->query->categorymembers->cm as $c): ?>
<li><a href="/wiki/
<?php echo $c['title']; ?>">
<?php echo $c['title']; ?></a></li>
<?php endforeach; ?>
</ol>
</body>
</html>
指定类别的名称,并使⽤cmtitle参数将该名称传递给API。 还要注意cmlimit参数,该参数指定要返回的结果数。 和以前⼀
样,Zend_Rest_Client传输请求并将XML响应转换为SimpleXML对象,从⽽使解析和显⽰查询结果变得容易。
显⽰了的输出。
图2.列出所选类别中的页⾯的⽹页
执⾏全⽂搜索
接下来,如何搜索与特定关键字匹配的页⾯? 使⽤上⼀页中所述的相同查询可以轻松完成此任务,除了在这种情况下,您要列出搜索结果⽽不是类别成员。 考虑 ,它说明了该过程。
清单4.列出全⽂搜索结果
// define search query
$query = 'michelangelo';
try {
// initialize REST client
$wikipedia = new Zend_Rest_Client('/w/api.php');
// set query parameters
$wikipedia->action('query');
$wikipedia->list('search');
$wikipedia->srwhat('text');
$wikipedia->format('xml');
$wikipedia->srsearch($query);
// perform request
// iterate over XML result set
$result = $wikipedia->get();
} catch (Exception $e) {
die('ERROR: ' . $e->getMessage());
}
>
<html>
<head></head>
<body>
<h2>Search results for '<?php echo $query; ?>'</h2>
<ol>
<?php foreach ($result->query->search->p as $r): ?>
<li><a href="/wiki/
<?php echo $r['title']; ?>">
<?php echo $r['title']; ?></a> <br/>
<small><?php echo $r['snippet']; ?></small></li>
<?php endforeach; ?>
</ol>
</body>
</html>
使⽤了与前⾯相同的query操作,但是在这种情况下,参数略有不同。 list参数指定这是⼀个全⽂本搜索操作,⽽srsearch参数指定搜索关键字(在本例中为“ michelangelo”)。 指定srwhat参数也很重要,该参数指⽰是否应在页⾯标题或页⾯⽂本上执⾏搜索。
每个搜索结果条⽬都包含页⾯标题,⼤⼩,字数,名称空间(稍后会详细介绍)以及页⾯内容的摘要。 然后,您可以格式化该数据并将其显⽰为HTML⽹页, 。
图3.列出搜索结果的⽹页
列出Wikipedia对“ michelangelo”的搜索结果的⽹页的屏幕截图
⽰例应⽤程序:Wikipedia搜索
在现实世界中,搜索关键字不是硬编码到脚本中的,⽽是由⽤户输⼊的。 进⾏了改进,使其更具交互性,允许⽤户在应⽤程序中输⼊搜索词,并查看与该搜索词匹配的Wikipedia页⾯。
清单5.交互式搜索⼯具

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。