[ Index ] |
PHP Cross Reference of moodle-2.8 |
[Summary view] [Print] [Text view]
1 <?php 2 3 /** 4 * Zend Framework 5 * 6 * LICENSE 7 * 8 * This source file is subject to the new BSD license that is bundled 9 * with this package in the file LICENSE.txt. 10 * It is also available through the world-wide-web at this URL: 11 * http://framework.zend.com/license/new-bsd 12 * If you did not receive a copy of the license and are unable to 13 * obtain it through the world-wide-web, please send an email 14 * to [email protected] so we can send you a copy immediately. 15 * 16 * @category Zend 17 * @package Zend_Service 18 * @subpackage Yahoo 19 * @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com) 20 * @license http://framework.zend.com/license/new-bsd New BSD License 21 * @version $Id$ 22 */ 23 24 25 /** 26 * @category Zend 27 * @package Zend_Service 28 * @subpackage Yahoo 29 * @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com) 30 * @license http://framework.zend.com/license/new-bsd New BSD License 31 */ 32 class Zend_Service_Yahoo 33 { 34 /** 35 * Yahoo Developer Application ID 36 * 37 * @var string 38 */ 39 public $appId; 40 41 /** 42 * Reference to the REST client 43 * 44 * @var Zend_Rest_Client 45 */ 46 protected $_rest; 47 48 49 /** 50 * Sets the application ID and instantiates the REST client 51 * 52 * @param string $appId specified the developer's appid 53 * @return void 54 */ 55 public function __construct($appId) 56 { 57 $this->appId = (string) $appId; 58 /** 59 * @see Zend_Rest_Client 60 */ 61 require_once 'Zend/Rest/Client.php'; 62 $this->_rest = new Zend_Rest_Client('http://search.yahooapis.com'); 63 } 64 65 66 /** 67 * Retrieve Inlink Data from siteexplorer.yahoo.com. A basic query 68 * consists simply of a URL. Additional options that can be 69 * specified consist of: 70 * 'results' => int How many results to return, max is 100 71 * 'start' => int The start offset for search results 72 * 'entire_site' => bool Data for the whole site or a single page 73 * 'omit_inlinks' => (none|domain|subdomain) Filter inlinks from these sources 74 * 75 * @param string $query the query being run 76 * @param array $options any optional parameters 77 * @return Zend_Service_Yahoo_ResultSet The return set 78 * @throws Zend_Service_Exception 79 */ 80 public function inlinkDataSearch($query, array $options = array()) 81 { 82 static $defaultOptions = array('results' => '50', 83 'start' => 1); 84 85 $options = $this->_prepareOptions($query, $options, $defaultOptions); 86 $this->_validateInlinkDataSearch($options); 87 88 $this->_rest->getHttpClient()->resetParameters(); 89 $this->_rest->setUri('http://search.yahooapis.com'); 90 $response = $this->_rest->restGet('/SiteExplorerService/V1/inlinkData', $options); 91 92 if ($response->isError()) { 93 /** 94 * @see Zend_Service_Exception 95 */ 96 require_once 'Zend/Service/Exception.php'; 97 throw new Zend_Service_Exception('An error occurred sending request. Status code: ' . 98 $response->getStatus()); 99 } 100 101 $dom = new DOMDocument(); 102 $dom->loadXML($response->getBody()); 103 104 self::_checkErrors($dom); 105 106 /** 107 * @see Zend_Service_Yahoo_InlinkDataResultSet 108 */ 109 require_once 'Zend/Service/Yahoo/InlinkDataResultSet.php'; 110 return new Zend_Service_Yahoo_InlinkDataResultSet($dom); 111 } 112 113 114 /** 115 * Perform a search of images. The most basic query consists simply 116 * of a plain text search, but you can also specify the type of 117 * image, the format, color, etc. 118 * 119 * The specific options are: 120 * 'type' => (all|any|phrase) How to parse the query terms 121 * 'results' => int How many results to return, max is 50 122 * 'start' => int The start offset for search results 123 * 'format' => (any|bmp|gif|jpeg|png) The type of images to search for 124 * 'coloration' => (any|color|bw) The coloration of images to search for 125 * 'adult_ok' => bool Flag to allow 'adult' images. 126 * 127 * @param string $query the query to be run 128 * @param array $options an optional array of query options 129 * @return Zend_Service_Yahoo_ImageResultSet the search results 130 * @throws Zend_Service_Exception 131 */ 132 public function imageSearch($query, array $options = array()) 133 { 134 static $defaultOptions = array('type' => 'all', 135 'results' => 10, 136 'start' => 1, 137 'format' => 'any', 138 'coloration' => 'any'); 139 140 $options = $this->_prepareOptions($query, $options, $defaultOptions); 141 142 $this->_validateImageSearch($options); 143 144 $this->_rest->getHttpClient()->resetParameters(); 145 $this->_rest->setUri('http://search.yahooapis.com'); 146 $response = $this->_rest->restGet('/ImageSearchService/V1/imageSearch', $options); 147 148 if ($response->isError()) { 149 /** 150 * @see Zend_Service_Exception 151 */ 152 require_once 'Zend/Service/Exception.php'; 153 throw new Zend_Service_Exception('An error occurred sending request. Status code: ' . 154 $response->getStatus()); 155 } 156 157 $dom = new DOMDocument(); 158 $dom->loadXML($response->getBody()); 159 160 self::_checkErrors($dom); 161 162 /** 163 * @see Zend_Service_YahooImageResultSet 164 */ 165 require_once 'Zend/Service/Yahoo/ImageResultSet.php'; 166 return new Zend_Service_Yahoo_ImageResultSet($dom); 167 } 168 169 170 /** 171 * Perform a search on local.yahoo.com. The basic search 172 * consists of a query and some fragment of location information; 173 * for example zipcode, latitude/longitude, or street address. 174 * 175 * Query options include: 176 * 'results' => int How many results to return, max is 50 177 * 'start' => int The start offset for search results 178 * 'sort' => (relevance|title|distance|rating) How to order your results 179 * 180 * 'radius' => float The radius (in miles) in which to search 181 * 182 * 'longitude' => float The longitude of the location to search around 183 * 'latitude' => float The latitude of the location to search around 184 * 185 * 'zip' => string The zipcode to search around 186 * 187 * 'street' => string The street address to search around 188 * 'city' => string The city for address search 189 * 'state' => string The state for address search 190 * 'location' => string An adhoc location string to search around 191 * 192 * @param string $query The query string you want to run 193 * @param array $options The search options, including location 194 * @return Zend_Service_Yahoo_LocalResultSet The results 195 * @throws Zend_Service_Exception 196 */ 197 public function localSearch($query, array $options = array()) 198 { 199 static $defaultOptions = array('results' => 10, 200 'start' => 1, 201 'sort' => 'distance', 202 'radius' => 5); 203 204 $options = $this->_prepareOptions($query, $options, $defaultOptions); 205 206 $this->_validateLocalSearch($options); 207 208 $this->_rest->getHttpClient()->resetParameters(); 209 $this->_rest->setUri('http://local.yahooapis.com'); 210 $response = $this->_rest->restGet('/LocalSearchService/V1/localSearch', $options); 211 212 if ($response->isError()) { 213 /** 214 * @see Zend_Service_Exception 215 */ 216 require_once 'Zend/Service/Exception.php'; 217 throw new Zend_Service_Exception('An error occurred sending request. Status code: ' . 218 $response->getStatus()); 219 } 220 221 $dom = new DOMDocument(); 222 $dom->loadXML($response->getBody()); 223 224 self::_checkErrors($dom); 225 226 /** 227 * @see Zend_Service_Yahoo_LocalResultSet 228 */ 229 require_once 'Zend/Service/Yahoo/LocalResultSet.php'; 230 return new Zend_Service_Yahoo_LocalResultSet($dom); 231 } 232 233 234 /** 235 * Execute a search on news.yahoo.com. This method minimally takes a 236 * text query to search on. 237 * 238 * Query options coonsist of: 239 * 240 * 'results' => int How many results to return, max is 50 241 * 'start' => int The start offset for search results 242 * 'sort' => (rank|date) How to order your results 243 * 'language' => lang The target document language to match 244 * 'type' => (all|any|phrase) How the query should be parsed 245 * 'site' => string A site to which your search should be restricted 246 * 247 * @param string $query The query to run 248 * @param array $options The array of optional parameters 249 * @return Zend_Service_Yahoo_NewsResultSet The query return set 250 * @throws Zend_Service_Exception 251 */ 252 public function newsSearch($query, array $options = array()) 253 { 254 static $defaultOptions = array('type' => 'all', 255 'start' => 1, 256 'sort' => 'rank'); 257 258 $options = $this->_prepareOptions($query, $options, $defaultOptions); 259 260 $this->_validateNewsSearch($options); 261 262 $this->_rest->getHttpClient()->resetParameters(); 263 $this->_rest->setUri('http://search.yahooapis.com'); 264 $response = $this->_rest->restGet('/NewsSearchService/V1/newsSearch', $options); 265 266 if ($response->isError()) { 267 /** 268 * @see Zend_Service_Exception 269 */ 270 require_once 'Zend/Service/Exception.php'; 271 throw new Zend_Service_Exception('An error occurred sending request. Status code: ' . 272 $response->getStatus()); 273 } 274 275 $dom = new DOMDocument(); 276 $dom->loadXML($response->getBody()); 277 278 self::_checkErrors($dom); 279 280 /** 281 * @see Zend_Service_Yahoo_NewsResultSet 282 */ 283 require_once 'Zend/Service/Yahoo/NewsResultSet.php'; 284 return new Zend_Service_Yahoo_NewsResultSet($dom); 285 } 286 287 288 /** 289 * Retrieve Page Data from siteexplorer.yahoo.com. A basic query 290 * consists simply of a URL. Additional options that can be 291 * specified consist of: 292 * 'results' => int How many results to return, max is 100 293 * 'start' => int The start offset for search results 294 * 'domain_only' => bool Data for just the given domain or all sub-domains also 295 * 296 * @param string $query the query being run 297 * @param array $options any optional parameters 298 * @return Zend_Service_Yahoo_ResultSet The return set 299 * @throws Zend_Service_Exception 300 */ 301 public function pageDataSearch($query, array $options = array()) 302 { 303 static $defaultOptions = array('results' => '50', 304 'start' => 1); 305 306 $options = $this->_prepareOptions($query, $options, $defaultOptions); 307 $this->_validatePageDataSearch($options); 308 309 $this->_rest->getHttpClient()->resetParameters(); 310 $this->_rest->setUri('http://search.yahooapis.com'); 311 $response = $this->_rest->restGet('/SiteExplorerService/V1/pageData', $options); 312 313 if ($response->isError()) { 314 /** 315 * @see Zend_Service_Exception 316 */ 317 require_once 'Zend/Service/Exception.php'; 318 throw new Zend_Service_Exception('An error occurred sending request. Status code: ' . 319 $response->getStatus()); 320 } 321 322 $dom = new DOMDocument(); 323 $dom->loadXML($response->getBody()); 324 325 self::_checkErrors($dom); 326 327 /** 328 * @see Zend_Service_Yahoo_PageDataResultSet 329 */ 330 require_once 'Zend/Service/Yahoo/PageDataResultSet.php'; 331 return new Zend_Service_Yahoo_PageDataResultSet($dom); 332 } 333 334 335 /** 336 * Perform a search of videos. The most basic query consists simply 337 * of a plain text search, but you can also specify the format of 338 * video. 339 * 340 * The specific options are: 341 * 'type' => (all|any|phrase) How to parse the query terms 342 * 'results' => int How many results to return, max is 50 343 * 'start' => int The start offset for search results 344 * 'format' => (any|avi|flash|mpeg|msmedia|quicktime|realmedia) The type of videos to search for 345 * 'adult_ok' => bool Flag to allow 'adult' videos. 346 * 347 * @param string $query the query to be run 348 * @param array $options an optional array of query options 349 * @return Zend_Service_Yahoo_VideoResultSet the search results 350 * @throws Zend_Service_Exception 351 */ 352 public function videoSearch($query, array $options = array()) 353 { 354 static $defaultOptions = array('type' => 'all', 355 'results' => 10, 356 'start' => 1, 357 'format' => 'any'); 358 359 $options = $this->_prepareOptions($query, $options, $defaultOptions); 360 361 $this->_validateVideoSearch($options); 362 363 $this->_rest->getHttpClient()->resetParameters(); 364 $this->_rest->setUri('http://search.yahooapis.com'); 365 $response = $this->_rest->restGet('/VideoSearchService/V1/videoSearch', $options); 366 367 if ($response->isError()) { 368 /** 369 * @see Zend_Service_Exception 370 */ 371 require_once 'Zend/Service/Exception.php'; 372 throw new Zend_Service_Exception('An error occurred sending request. Status code: ' . 373 $response->getStatus()); 374 } 375 376 $dom = new DOMDocument(); 377 $dom->loadXML($response->getBody()); 378 379 self::_checkErrors($dom); 380 381 /** 382 * @see Zend_Service_YahooVideoResultSet 383 */ 384 require_once 'Zend/Service/Yahoo/VideoResultSet.php'; 385 return new Zend_Service_Yahoo_VideoResultSet($dom); 386 } 387 388 389 /** 390 * Perform a web content search on search.yahoo.com. A basic query 391 * consists simply of a text query. Additional options that can be 392 * specified consist of: 393 * 'results' => int How many results to return, max is 50 394 * 'start' => int The start offset for search results 395 * 'language' => lang The target document language to match 396 * 'type' => (all|any|phrase) How the query should be parsed 397 * 'site' => string A site to which your search should be restricted 398 * 'format' => (any|html|msword|pdf|ppt|rss|txt|xls) 399 * 'adult_ok' => bool permit 'adult' content in the search results 400 * 'similar_ok' => bool permit similar results in the result set 401 * 'country' => string The country code for the content searched 402 * 'license' => (any|cc_any|cc_commercial|cc_modifiable) The license of content being searched 403 * 'region' => The regional search engine on which the service performs the search. default us. 404 * 405 * @param string $query the query being run 406 * @param array $options any optional parameters 407 * @return Zend_Service_Yahoo_WebResultSet The return set 408 * @throws Zend_Service_Exception 409 */ 410 public function webSearch($query, array $options = array()) 411 { 412 static $defaultOptions = array('type' => 'all', 413 'start' => 1, 414 'results' => 10, 415 'format' => 'any'); 416 417 $options = $this->_prepareOptions($query, $options, $defaultOptions); 418 $this->_validateWebSearch($options); 419 420 $this->_rest->getHttpClient()->resetParameters(); 421 $this->_rest->setUri('http://search.yahooapis.com'); 422 $response = $this->_rest->restGet('/WebSearchService/V1/webSearch', $options); 423 424 if ($response->isError()) { 425 /** 426 * @see Zend_Service_Exception 427 */ 428 require_once 'Zend/Service/Exception.php'; 429 throw new Zend_Service_Exception('An error occurred sending request. Status code: ' . 430 $response->getStatus()); 431 } 432 433 $dom = new DOMDocument(); 434 $dom->loadXML($response->getBody()); 435 436 self::_checkErrors($dom); 437 438 /** 439 * @see Zend_Service_Yahoo_WebResultSet 440 */ 441 require_once 'Zend/Service/Yahoo/WebResultSet.php'; 442 return new Zend_Service_Yahoo_WebResultSet($dom); 443 } 444 445 446 /** 447 * Returns a reference to the REST client 448 * 449 * @return Zend_Rest_Client 450 */ 451 public function getRestClient() 452 { 453 return $this->_rest; 454 } 455 456 457 /** 458 * Validate Inlink Data Search Options 459 * 460 * @param array $options 461 * @return void 462 * @throws Zend_Service_Exception 463 */ 464 protected function _validateInlinkDataSearch(array $options) 465 { 466 $validOptions = array('appid', 'query', 'results', 'start', 'entire_site', 'omit_inlinks'); 467 468 $this->_compareOptions($options, $validOptions); 469 470 /** 471 * @see Zend_Validate_Between 472 */ 473 require_once 'Zend/Validate/Between.php'; 474 $between = new Zend_Validate_Between(1, 100, true); 475 476 if (isset($options['results']) && !$between->setMin(1)->setMax(100)->isValid($options['results'])) { 477 /** 478 * @see Zend_Service_Exception 479 */ 480 require_once 'Zend/Service/Exception.php'; 481 throw new Zend_Service_Exception("Invalid value for option 'results': {$options['results']}"); 482 } 483 484 if (isset($options['start']) && !$between->setMin(1)->setMax(1000)->isValid($options['start'])) { 485 /** 486 * @see Zend_Service_Exception 487 */ 488 require_once 'Zend/Service/Exception.php'; 489 throw new Zend_Service_Exception("Invalid value for option 'start': {$options['start']}"); 490 } 491 492 if (isset($options['omit_inlinks'])) { 493 $this->_validateInArray('omit_inlinks', $options['omit_inlinks'], array('none', 'domain', 'subdomain')); 494 } 495 } 496 497 498 /** 499 * Validate Image Search Options 500 * 501 * @param array $options 502 * @return void 503 * @throws Zend_Service_Exception 504 */ 505 protected function _validateImageSearch(array $options) 506 { 507 $validOptions = array('appid', 'query', 'type', 'results', 'start', 'format', 'coloration', 'adult_ok'); 508 509 $this->_compareOptions($options, $validOptions); 510 511 if (isset($options['type'])) { 512 switch($options['type']) { 513 case 'all': 514 case 'any': 515 case 'phrase': 516 break; 517 default: 518 /** 519 * @see Zend_Service_Exception 520 */ 521 require_once 'Zend/Service/Exception.php'; 522 throw new Zend_Service_Exception("Invalid value for option 'type': '{$options['type']}'"); 523 } 524 } 525 526 /** 527 * @see Zend_Validate_Between 528 */ 529 require_once 'Zend/Validate/Between.php'; 530 $between = new Zend_Validate_Between(1, 50, true); 531 532 if (isset($options['results']) && !$between->setMin(1)->setMax(50)->isValid($options['results'])) { 533 /** 534 * @see Zend_Service_Exception 535 */ 536 require_once 'Zend/Service/Exception.php'; 537 throw new Zend_Service_Exception("Invalid value for option 'results': {$options['results']}"); 538 } 539 540 if (isset($options['start']) && !$between->setMin(1)->setMax(1000)->isValid($options['start'])) { 541 /** 542 * @see Zend_Service_Exception 543 */ 544 require_once 'Zend/Service/Exception.php'; 545 throw new Zend_Service_Exception("Invalid value for option 'start': {$options['start']}"); 546 } 547 548 if (isset($options['format'])) { 549 switch ($options['format']) { 550 case 'any': 551 case 'bmp': 552 case 'gif': 553 case 'jpeg': 554 case 'png': 555 break; 556 default: 557 /** 558 * @see Zend_Service_Exception 559 */ 560 require_once 'Zend/Service/Exception.php'; 561 throw new Zend_Service_Exception("Invalid value for option 'format': {$options['format']}"); 562 } 563 } 564 565 if (isset($options['coloration'])) { 566 switch ($options['coloration']) { 567 case 'any': 568 case 'color': 569 case 'bw': 570 break; 571 default: 572 /** 573 * @see Zend_Service_Exception 574 */ 575 require_once 'Zend/Service/Exception.php'; 576 throw new Zend_Service_Exception("Invalid value for option 'coloration': " 577 . "{$options['coloration']}"); 578 } 579 } 580 } 581 582 583 /** 584 * Validate Local Search Options 585 * 586 * @param array $options 587 * @return void 588 * @throws Zend_Service_Exception 589 */ 590 protected function _validateLocalSearch(array $options) 591 { 592 $validOptions = array('appid', 'query', 'results', 'start', 'sort', 'radius', 'street', 593 'city', 'state', 'zip', 'location', 'latitude', 'longitude'); 594 595 $this->_compareOptions($options, $validOptions); 596 597 /** 598 * @see Zend_Validate_Between 599 */ 600 require_once 'Zend/Validate/Between.php'; 601 $between = new Zend_Validate_Between(1, 20, true); 602 603 if (isset($options['results']) && !$between->setMin(1)->setMax(20)->isValid($options['results'])) { 604 /** 605 * @see Zend_Service_Exception 606 */ 607 require_once 'Zend/Service/Exception.php'; 608 throw new Zend_Service_Exception("Invalid value for option 'results': {$options['results']}"); 609 } 610 611 if (isset($options['start']) && !$between->setMin(1)->setMax(1000)->isValid($options['start'])) { 612 /** 613 * @see Zend_Service_Exception 614 */ 615 require_once 'Zend/Service/Exception.php'; 616 throw new Zend_Service_Exception("Invalid value for option 'start': {$options['start']}"); 617 } 618 619 if (isset($options['longitude']) && !$between->setMin(-90)->setMax(90)->isValid($options['longitude'])) { 620 /** 621 * @see Zend_Service_Exception 622 */ 623 require_once 'Zend/Service/Exception.php'; 624 throw new Zend_Service_Exception("Invalid value for option 'longitude': {$options['longitude']}"); 625 } 626 627 if (isset($options['latitude']) && !$between->setMin(-180)->setMax(180)->isValid($options['latitude'])) { 628 /** 629 * @see Zend_Service_Exception 630 */ 631 require_once 'Zend/Service/Exception.php'; 632 throw new Zend_Service_Exception("Invalid value for option 'latitude': {$options['latitude']}"); 633 } 634 635 if (isset($options['zip']) && !preg_match('/(^\d{5}$)|(^\d{5}-\d{4}$)/', $options['zip'])) { 636 /** 637 * @see Zend_Service_Exception 638 */ 639 require_once 'Zend/Service/Exception.php'; 640 throw new Zend_Service_Exception("Invalid value for option 'zip': {$options['zip']}"); 641 } 642 643 $hasLocation = false; 644 $locationFields = array('street', 'city', 'state', 'zip', 'location'); 645 foreach ($locationFields as $field) { 646 if (isset($options[$field]) && $options[$field] != '') { 647 $hasLocation = true; 648 break; 649 } 650 } 651 652 if (!$hasLocation && (!isset($options['latitude']) || !isset($options['longitude']))) { 653 /** 654 * @see Zend_Service_Exception 655 */ 656 require_once 'Zend/Service/Exception.php'; 657 throw new Zend_Service_Exception('Location data are required but missing'); 658 } 659 660 if (!in_array($options['sort'], array('relevance', 'title', 'distance', 'rating'))) { 661 /** 662 * @see Zend_Service_Exception 663 */ 664 require_once 'Zend/Service/Exception.php'; 665 throw new Zend_Service_Exception("Invalid value for option 'sort': {$options['sort']}"); 666 } 667 } 668 669 670 /** 671 * Validate News Search Options 672 * 673 * @param array $options 674 * @return void 675 * @throws Zend_Service_Exception 676 */ 677 protected function _validateNewsSearch(array $options) 678 { 679 $validOptions = array('appid', 'query', 'results', 'start', 'sort', 'language', 'type', 'site'); 680 681 $this->_compareOptions($options, $validOptions); 682 683 /** 684 * @see Zend_Validate_Between 685 */ 686 require_once 'Zend/Validate/Between.php'; 687 $between = new Zend_Validate_Between(1, 50, true); 688 689 if (isset($options['results']) && !$between->setMin(1)->setMax(50)->isValid($options['results'])) { 690 /** 691 * @see Zend_Service_Exception 692 */ 693 require_once 'Zend/Service/Exception.php'; 694 throw new Zend_Service_Exception("Invalid value for option 'results': {$options['results']}"); 695 } 696 697 if (isset($options['start']) && !$between->setMin(1)->setMax(1000)->isValid($options['start'])) { 698 /** 699 * @see Zend_Service_Exception 700 */ 701 require_once 'Zend/Service/Exception.php'; 702 throw new Zend_Service_Exception("Invalid value for option 'start': {$options['start']}"); 703 } 704 705 if (isset($options['language'])) { 706 $this->_validateLanguage($options['language']); 707 } 708 709 $this->_validateInArray('sort', $options['sort'], array('rank', 'date')); 710 $this->_validateInArray('type', $options['type'], array('all', 'any', 'phrase')); 711 } 712 713 714 /** 715 * Validate Page Data Search Options 716 * 717 * @param array $options 718 * @return void 719 * @throws Zend_Service_Exception 720 */ 721 protected function _validatePageDataSearch(array $options) 722 { 723 $validOptions = array('appid', 'query', 'results', 'start', 'domain_only'); 724 725 $this->_compareOptions($options, $validOptions); 726 727 /** 728 * @see Zend_Validate_Between 729 */ 730 require_once 'Zend/Validate/Between.php'; 731 $between = new Zend_Validate_Between(1, 100, true); 732 733 if (isset($options['results']) && !$between->setMin(1)->setMax(100)->isValid($options['results'])) { 734 /** 735 * @see Zend_Service_Exception 736 */ 737 require_once 'Zend/Service/Exception.php'; 738 throw new Zend_Service_Exception("Invalid value for option 'results': {$options['results']}"); 739 } 740 741 if (isset($options['start']) && !$between->setMin(1)->setMax(1000)->isValid($options['start'])) { 742 /** 743 * @see Zend_Service_Exception 744 */ 745 require_once 'Zend/Service/Exception.php'; 746 throw new Zend_Service_Exception("Invalid value for option 'start': {$options['start']}"); 747 } 748 } 749 750 751 /** 752 * Validate Video Search Options 753 * 754 * @param array $options 755 * @return void 756 * @throws Zend_Service_Exception 757 */ 758 protected function _validateVideoSearch(array $options) 759 { 760 $validOptions = array('appid', 'query', 'type', 'results', 'start', 'format', 'adult_ok'); 761 762 $this->_compareOptions($options, $validOptions); 763 764 if (isset($options['type'])) { 765 $this->_validateInArray('type', $options['type'], array('all', 'any', 'phrase')); 766 } 767 768 /** 769 * @see Zend_Validate_Between 770 */ 771 require_once 'Zend/Validate/Between.php'; 772 $between = new Zend_Validate_Between(1, 50, true); 773 774 if (isset($options['results']) && !$between->setMin(1)->setMax(50)->isValid($options['results'])) { 775 /** 776 * @see Zend_Service_Exception 777 */ 778 require_once 'Zend/Service/Exception.php'; 779 throw new Zend_Service_Exception("Invalid value for option 'results': {$options['results']}"); 780 } 781 782 if (isset($options['start']) && !$between->setMin(1)->setMax(1000)->isValid($options['start'])) { 783 /** 784 * @see Zend_Service_Exception 785 */ 786 require_once 'Zend/Service/Exception.php'; 787 throw new Zend_Service_Exception("Invalid value for option 'start': {$options['start']}"); 788 } 789 790 if (isset($options['format'])) { 791 $this->_validateInArray('format', $options['format'], array('any', 'avi', 'flash', 'mpeg', 'msmedia', 'quicktime', 'realmedia')); 792 } 793 } 794 795 796 /** 797 * Validate Web Search Options 798 * 799 * @param array $options 800 * @return void 801 * @throws Zend_Service_Exception 802 */ 803 protected function _validateWebSearch(array $options) 804 { 805 $validOptions = array('appid', 'query', 'results', 'start', 'language', 'type', 'format', 'adult_ok', 806 'similar_ok', 'country', 'site', 'subscription', 'license', 'region'); 807 808 $this->_compareOptions($options, $validOptions); 809 810 /** 811 * @see Zend_Validate_Between 812 */ 813 require_once 'Zend/Validate/Between.php'; 814 $between = new Zend_Validate_Between(1, 100, true); 815 816 if (isset($options['results']) && !$between->setMin(1)->setMax(100)->isValid($options['results'])) { 817 /** 818 * @see Zend_Service_Exception 819 */ 820 require_once 'Zend/Service/Exception.php'; 821 throw new Zend_Service_Exception("Invalid value for option 'results': {$options['results']}"); 822 } 823 824 if (isset($options['start']) && !$between->setMin(1)->setMax(1000)->isValid($options['start'])) { 825 /** 826 * @see Zend_Service_Exception 827 */ 828 require_once 'Zend/Service/Exception.php'; 829 throw new Zend_Service_Exception("Invalid value for option 'start': {$options['start']}"); 830 } 831 832 if (isset($options['language'])) { 833 $this->_validateLanguage($options['language']); 834 } 835 836 $this->_validateInArray('type', $options['type'], array('all', 'any', 'phrase')); 837 $this->_validateInArray('format', $options['format'], array('any', 'html', 'msword', 'pdf', 'ppt', 'rss', 838 'txt', 'xls')); 839 if (isset($options['license'])) { 840 $this->_validateInArray('license', $options['license'], array('any', 'cc_any', 'cc_commercial', 841 'cc_modifiable')); 842 } 843 844 if (isset($options['region'])){ 845 $this->_validateInArray('region', $options['region'], array('ar', 'au', 'at', 'br', 'ca', 'ct', 'dk', 'fi', 846 'fr', 'de', 'in', 'id', 'it', 'my', 'mx', 847 'nl', 'no', 'ph', 'ru', 'sg', 'es', 'se', 848 'ch', 'th', 'uk', 'us')); 849 } 850 } 851 852 853 /** 854 * Prepare options for sending to Yahoo! 855 * 856 * @param string $query Search Query 857 * @param array $options User specified options 858 * @param array $defaultOptions Required/Default options 859 * @return array 860 */ 861 protected function _prepareOptions($query, array $options, array $defaultOptions = array()) 862 { 863 $options['appid'] = $this->appId; 864 $options['query'] = (string) $query; 865 866 return array_merge($defaultOptions, $options); 867 } 868 869 870 /** 871 * Throws an exception if the chosen language is not supported 872 * 873 * @param string $lang Language code 874 * @return void 875 * @throws Zend_Service_Exception 876 */ 877 protected function _validateLanguage($lang) 878 { 879 $languages = array('ar', 'bg', 'ca', 'szh', 'tzh', 'hr', 'cs', 'da', 'nl', 'en', 'et', 'fi', 'fr', 'de', 'el', 880 'he', 'hu', 'is', 'id', 'it', 'ja', 'ko', 'lv', 'lt', 'no', 'fa', 'pl', 'pt', 'ro', 'ru', 'sk', 'sr', 'sl', 881 'es', 'sv', 'th', 'tr' 882 ); 883 if (!in_array($lang, $languages)) { 884 /** 885 * @see Zend_Service_Exception 886 */ 887 require_once 'Zend/Service/Exception.php'; 888 throw new Zend_Service_Exception("The selected language '$lang' is not supported"); 889 } 890 } 891 892 893 /** 894 * Utility function to check for a difference between two arrays. 895 * 896 * @param array $options User specified options 897 * @param array $validOptions Valid options 898 * @return void 899 * @throws Zend_Service_Exception if difference is found (e.g., unsupported query option) 900 */ 901 protected function _compareOptions(array $options, array $validOptions) 902 { 903 $difference = array_diff(array_keys($options), $validOptions); 904 if ($difference) { 905 /** 906 * @see Zend_Service_Exception 907 */ 908 require_once 'Zend/Service/Exception.php'; 909 throw new Zend_Service_Exception('The following parameters are invalid: ' . join(', ', $difference)); 910 } 911 } 912 913 914 /** 915 * Check that a named value is in the given array 916 * 917 * @param string $name Name associated with the value 918 * @param mixed $value Value 919 * @param array $array Array in which to check for the value 920 * @return void 921 * @throws Zend_Service_Exception 922 */ 923 protected function _validateInArray($name, $value, array $array) 924 { 925 if (!in_array($value, $array)) { 926 /** 927 * @see Zend_Service_Exception 928 */ 929 require_once 'Zend/Service/Exception.php'; 930 throw new Zend_Service_Exception("Invalid value for option '$name': $value"); 931 } 932 } 933 934 935 /** 936 * Check if response is an error 937 * 938 * @param DOMDocument $dom DOM Object representing the result XML 939 * @return void 940 * @throws Zend_Service_Exception Thrown when the result from Yahoo! is an error 941 */ 942 protected static function _checkErrors(DOMDocument $dom) 943 { 944 $xpath = new DOMXPath($dom); 945 $xpath->registerNamespace('yapi', 'urn:yahoo:api'); 946 947 if ($xpath->query('//yapi:Error')->length >= 1) { 948 $message = $xpath->query('//yapi:Error/yapi:Message/text()')->item(0)->data; 949 /** 950 * @see Zend_Service_Exception 951 */ 952 require_once 'Zend/Service/Exception.php'; 953 throw new Zend_Service_Exception($message); 954 } 955 } 956 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Fri Nov 28 20:29:05 2014 | Cross-referenced by PHPXref 0.7.1 |