* API: added property for external links (urls) retrieval
authorYuri Astrakhan <yurik@users.mediawiki.org>
Mon, 14 May 2007 07:04:13 +0000 (07:04 +0000)
committerYuri Astrakhan <yurik@users.mediawiki.org>
Mon, 14 May 2007 07:04:13 +0000 (07:04 +0000)
RELEASE-NOTES
includes/AutoLoader.php
includes/api/ApiQuery.php
includes/api/ApiQueryCategories.php
includes/api/ApiQueryExternalLinks.php [new file with mode: 0644]

index a808ed0..c68d942 100644 (file)
@@ -61,7 +61,7 @@ it from source control: http://www.mediawiki.org/wiki/Download_from_SVN
 
 For the current progress and discussion, see http://meta.wikimedia.org/wiki/API
 
-* New properties: links, templates, images, langlinks
+* New properties: links, templates, images, langlinks, categories, external links
 * Breaking Change: imagelinks renamed into imageusage (il->iu)
 * Bug fix: incorrect generator behavior in some cases
 
index da9eb30..ca198eb 100644 (file)
@@ -292,6 +292,7 @@ function __autoload($className) {
                'ApiQueryBacklinks' => 'includes/api/ApiQueryBacklinks.php',
                'ApiQueryCategories' => 'includes/api/ApiQueryCategories.php',
                'ApiQueryContributions' => 'includes/api/ApiQueryUserContributions.php',
+               'ApiQueryExternalLinks' => 'includes/api/ApiQueryExternalLinks.php',
                'ApiQueryImages' => 'includes/api/ApiQueryImages.php',
                'ApiQueryInfo' => 'includes/api/ApiQueryInfo.php',
                'ApiQueryLangLinks' => 'includes/api/ApiQueryLangLinks.php',
index 729d371..04dee33 100644 (file)
@@ -44,6 +44,7 @@ class ApiQuery extends ApiBase {
                'images' => 'ApiQueryImages',
                'templates' => 'ApiQueryLinks',
                'categories' => 'ApiQueryCategories',
+               'extlinks' => 'ApiQueryExternalLinks',
        );
        //      'categories' => 'ApiQueryCategories',
        //      'imageinfo' => 'ApiQueryImageinfo',
index 9d1d99e..63defe2 100644 (file)
@@ -144,9 +144,9 @@ class ApiQueryCategories extends ApiQueryGeneratorBase {
 
        protected function getExamples() {
                return array (
-                               "Get a list of categories used in the [[Main Page]]:",
+                               "Get a list of categories used in the [[Albert Einstein]]:",
                                "  api.php?action=query&prop=categories&titles=Albert%20Einstein",
-                               "Get information about all categories used in the [[Main Page]]:",
+                               "Get information about all categories used in the [[Albert Einstein]]:",
                                "  api.php?action=query&generator=categories&titles=Albert%20Einstein&prop=info"
                        );
        }
diff --git a/includes/api/ApiQueryExternalLinks.php b/includes/api/ApiQueryExternalLinks.php
new file mode 100644 (file)
index 0000000..83234bd
--- /dev/null
@@ -0,0 +1,99 @@
+<?php
+
+/*
+ * Created on May 13, 2007
+ *
+ * API for MediaWiki 1.8+
+ *
+ * Copyright (C) 2006 Yuri Astrakhan <FirstnameLastname@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ */
+
+if (!defined('MEDIAWIKI')) {
+       // Eclipse helper - will be ignored in production
+       require_once ("ApiQueryBase.php");
+}
+
+/**
+ * @addtogroup API
+ */
+class ApiQueryExternalLinks extends ApiQueryBase {
+
+       public function __construct($query, $moduleName) {
+               parent :: __construct($query, $moduleName, 'el');
+       }
+
+       public function execute() {
+
+               $this->addFields(array (
+                       'el_from',
+                       'el_to'
+               ));
+               
+               $this->addTables('externallinks');
+               $this->addWhereFld('el_from', array_keys($this->getPageSet()->getGoodTitles()));
+
+               $db = $this->getDB();
+               $res = $this->select(__METHOD__);
+                       
+               $data = array();
+               $lastId = 0;    // database has no ID 0 
+               while ($row = $db->fetchObject($res)) {
+                       if ($lastId != $row->el_from) {
+                               if($lastId != 0) {
+                                       $this->addPageSubItems($lastId, $data);
+                                       $data = array();
+                               }
+                               $lastId = $row->el_from;
+                       }
+                       
+                       $entry = array();
+                       ApiResult :: setContent($entry, $row->el_to);
+                       $data[] = $entry;
+               }
+
+               if($lastId != 0) {
+                       $this->addPageSubItems($lastId, $data);
+               }
+
+               $db->freeResult($res);
+       }
+
+       private function addPageSubItems($pageId, $data) {
+               $result = $this->getResult();
+               $result->setIndexedTagName($data, 'el');
+               $result->addValue(array ('query', 'pages', intval($pageId)),
+                       'extlinks',
+                       $data);
+       }
+
+       protected function getDescription() {
+               return 'Returns all external urls (not interwikies) from the given page(s)';
+       }
+
+       protected function getExamples() {
+               return array (
+                               "Get a list of external links on the [[Main Page]]:",
+                               "  api.php?action=query&prop=extlinks&titles=Main%20Page",
+                       );
+       }
+
+       public function getVersion() {
+               return __CLASS__ . ': $Id$';
+       }
+}
+?>