home *** CD-ROM | disk | FTP | other *** search
/ Cricao de Sites - 650 Layouts Prontos / WebMasters.iso / Servidores / xampp-win32-1.6.7-installer.exe / php / PEAR / Services / Yahoo / ContentAnalysis / Response.php < prev    next >
Encoding:
PHP Script  |  2008-07-02  |  4.8 KB  |  184 lines

  1. <?php
  2. /* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
  3.  
  4. /**
  5.  * Services_Yahoo Content Analysis Response
  6.  *
  7.  * Copyright 2005-2006 Martin Jansen
  8.  *
  9.  * Licensed under the Apache License, Version 2.0 (the "License");
  10.  * you may not use this file except in compliance with the License.
  11.  * You may obtain a copy of the License at
  12.  *
  13.  *     http://www.apache.org/licenses/LICENSE-2.0
  14.  *
  15.  * Unless required by applicable law or agreed to in writing, software
  16.  * distributed under the License is distributed on an "AS IS" BASIS,
  17.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  18.  * See the License for the specific language governing permissions and
  19.  * limitations under the License.
  20.  *
  21.  * @category   Services
  22.  * @package    Services_Yahoo
  23.  * @author     Martin Jansen <mj@php.net>
  24.  * @copyright  2005-2006 Martin Jansen
  25.  * @license    http://www.apache.org/licenses/LICENSE-2.0  Apache License, Version 2.0
  26.  * @version    CVS: $Id: Response.php,v 1.2 2006/10/02 12:53:33 mj Exp $
  27.  * @link       http://pear.php.net/package/Services_Yahoo
  28.  */
  29.  
  30. /**
  31.  * Services_Yahoo Content Analysis Response class
  32.  *
  33.  * This class provides methods for accessing the response of a content
  34.  * analysis request.
  35.  *
  36.  * @category   Services
  37.  * @package    Services_Yahoo
  38.  * @extends    Exception
  39.  * @author     Martin Jansen <mj@php.net>
  40.  * @copyright  2005-2006 Martin Jansen
  41.  * @license    http://www.apache.org/licenses/LICENSE-2.0  Apache License, Version 2.0
  42.  * @version    CVS: $Id: Response.php,v 1.2 2006/10/02 12:53:33 mj Exp $
  43.  */
  44. class Services_Yahoo_ContentAnalysis_Response implements Iterator {
  45.  
  46.     private $isValidIterator = true;
  47.     private $iteratorCounter = 0;
  48.  
  49.     private $request;
  50.     private $results = array();
  51.  
  52.     /**
  53.      * Constructor
  54.      *
  55.      * @param  object HTTP_Request Instance of HTTP_Request that was used for the request
  56.      * @throws Services_Yahoo_Exception
  57.      */
  58.     public function __construct(HTTP_Request $request)
  59.     {
  60.         $this->request = $request;
  61.  
  62.         $this->parseRequest();
  63.         
  64.         if ($this->isError() == true) {
  65.             $exception = new Services_Yahoo_Exception("Content analysis failed");
  66.             $exception->addErrors($this->getMessages());
  67.  
  68.             throw $exception;
  69.         }
  70.     }
  71.  
  72.     // {{{ response handling
  73.  
  74.     /**
  75.      * Get number of result sets returned by the content analysis
  76.      *
  77.      * @access public
  78.      * @return integer Number of result sets returned
  79.      */
  80.     public function getTotalResultsReturned()
  81.     {
  82.         return count((array)$this->xml->Result);
  83.     }
  84.  
  85.     /**
  86.      * Get the HTTP_Request instance that was used for the query
  87.      *
  88.      * Access to the HTTP_Request instance is useful for introspecting
  89.      * into the request details.  (E.g. for getting the HTTP response
  90.      * code.)
  91.      *
  92.      * @access public
  93.      * @return object HTTP_Request Instance of HTTP_Request
  94.      */
  95.     public function getRequest()
  96.     {
  97.         return $this->request;
  98.     }
  99.  
  100.     // }}}
  101.     // {{{ Iterator implementation
  102.  
  103.     public function current()
  104.     {
  105.         return (string)$this->xml->Result[$this->iteratorCounter];
  106.     }
  107.  
  108.     public function next()
  109.     {
  110.         $this->iteratorCounter++;
  111.         if (!isset($this->xml->Result[$this->iteratorCounter])) {
  112.             $this->isValidIterator = false;
  113.         }
  114.     }
  115.  
  116.     public function key()
  117.     {
  118.         return $this->iteratorCounter;
  119.     }
  120.  
  121.     public function rewind()
  122.     {
  123.         $this->iteratorCounter = 0;
  124.     }
  125.  
  126.     public function valid()
  127.     {
  128.         return $this->isValidIterator;
  129.     }
  130.  
  131.     // }}}
  132.     // {{{ private methods
  133.  
  134.     /**
  135.      * Parse XML from the response
  136.      *
  137.      * @access private
  138.      * @throws Services_Yahoo_Exception
  139.      */
  140.     private function parseRequest()
  141.     {
  142.         $this->xml = simplexml_load_string($this->request->getResponseBody());
  143.  
  144.         if ($this->xml === false) {
  145.             throw new Services_Yahoo_Exception("The response contained no valid XML");
  146.         }
  147.     }
  148.  
  149.     /**
  150.      * Determine if an error was returned by the Yahoo API
  151.      *
  152.      * This method evaluates the HTTP response code. If it indicates
  153.      * an error, the method returns true.
  154.      *
  155.      * @access private
  156.      * @return boolean  True on error, otherwise false.
  157.      */
  158.     private function isError()
  159.     {
  160.         return in_array($this->request->getResponseCode(), array(400, 403, 404, 503));
  161.     }
  162.  
  163.     /**
  164.      * Get all error messages if the response contained an error
  165.      *
  166.      * Returns all errors in an numerically indexed array that were 
  167.      * part of the response.
  168.      *
  169.      * @access private
  170.      * @see    isError()
  171.      * @return array
  172.      */
  173.     private function getMessages()
  174.     {
  175.         $returnValue = array();
  176.         foreach ($this->xml->Message as $message) {
  177.             $returnValue[] = $message;
  178.         }
  179.         return $returnValue;
  180.     }
  181.  
  182.     // }}}
  183. }
  184.