/zf/library/Zend/Gdata/YouTube/VideoQuery.php
PHP | 540 lines | 336 code | 36 blank | 168 comment | 58 complexity | 04a983afdc1adde822bdc5a7b485ff84 MD5 | raw file
Possible License(s): MIT, BSD-3-Clause, Apache-2.0, LGPL-2.1, LGPL-3.0, BSD-2-Clause
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 license@zend.com so we can send you a copy immediately. 15 * 16 * @category Zend 17 * @package Zend_Gdata 18 * @subpackage YouTube 19 * @copyright Copyright (c) 2005-2011 Zend Technologies USA Inc. (http://www.zend.com) 20 * @license http://framework.zend.com/license/new-bsd New BSD License 21 * @version $Id: VideoQuery.php 23775 2011-03-01 17:25:24Z ralph $ 22 */ 23 24/** 25 * Zend_Gdata_YouTube 26 */ 27require_once('Zend/Gdata/YouTube.php'); 28 29/** 30 * Zend_Gdata_Query 31 */ 32require_once('Zend/Gdata/Query.php'); 33 34/** 35 * Assists in constructing queries for YouTube videos 36 * 37 * @link http://code.google.com/apis/youtube/ 38 * 39 * @category Zend 40 * @package Zend_Gdata 41 * @subpackage YouTube 42 * @copyright Copyright (c) 2005-2011 Zend Technologies USA Inc. (http://www.zend.com) 43 * @license http://framework.zend.com/license/new-bsd New BSD License 44 */ 45class Zend_Gdata_YouTube_VideoQuery extends Zend_Gdata_Query 46{ 47 48 /** 49 * Create Gdata_YouTube_VideoQuery object 50 */ 51 public function __construct($url = null) 52 { 53 parent::__construct($url); 54 } 55 56 /** 57 * Sets the type of feed this query should be used to search 58 * 59 * @param string $feedType The type of feed 60 * @param string $videoId The ID of the video associated with this query 61 * @param string $entry The ID of the entry associated with this query 62 */ 63 public function setFeedType($feedType, $videoId = null, $entry = null) 64 { 65 switch ($feedType) { 66 case 'top rated': 67 $this->_url = Zend_Gdata_YouTube::STANDARD_TOP_RATED_URI; 68 break; 69 case 'most viewed': 70 $this->_url = Zend_Gdata_YouTube::STANDARD_MOST_VIEWED_URI; 71 break; 72 case 'recently featured': 73 $this->_url = Zend_Gdata_YouTube::STANDARD_RECENTLY_FEATURED_URI; 74 break; 75 case 'mobile': 76 $this->_url = Zend_Gdata_YouTube::STANDARD_WATCH_ON_MOBILE_URI; 77 break; 78 case 'related': 79 if ($videoId === null) { 80 require_once 'Zend/Gdata/App/InvalidArgumentException.php'; 81 throw new Zend_Gdata_App_InvalidArgumentException( 82 'Video ID must be set for feed of type: ' . $feedType); 83 } else { 84 $this->_url = Zend_Gdata_YouTube::VIDEO_URI . '/' . $videoId . 85 '/related'; 86 } 87 break; 88 case 'responses': 89 if ($videoId === null) { 90 require_once 'Zend/Gdata/App/InvalidArgumentException.php'; 91 throw new Zend_Gdata_App_Exception( 92 'Video ID must be set for feed of type: ' . $feedType); 93 } else { 94 $this->_url = Zend_Gdata_YouTube::VIDEO_URI . '/' . $videoId . 95 'responses'; 96 } 97 break; 98 case 'comments': 99 if ($videoId === null) { 100 require_once 'Zend/Gdata/App/InvalidArgumentException.php'; 101 throw new Zend_Gdata_App_Exception( 102 'Video ID must be set for feed of type: ' . $feedType); 103 } else { 104 $this->_url = Zend_Gdata_YouTube::VIDEO_URI . '/' . 105 $videoId . 'comments'; 106 if ($entry !== null) { 107 $this->_url .= '/' . $entry; 108 } 109 } 110 break; 111 default: 112 require_once 'Zend/Gdata/App/Exception.php'; 113 throw new Zend_Gdata_App_Exception('Unknown feed type'); 114 break; 115 } 116 } 117 118 /** 119 * Sets the location parameter for the query 120 * 121 * @param string $value 122 * @throws Zend_Gdata_App_InvalidArgumentException 123 * @return Zend_Gdata_YouTube_VideoQuery Provides a fluent interface 124 */ 125 public function setLocation($value) 126 { 127 switch($value) { 128 case null: 129 unset($this->_params['location']); 130 default: 131 $parameters = explode(',', $value); 132 if (count($parameters) != 2) { 133 require_once 'Zend/Gdata/App/InvalidArgumentException.php'; 134 throw new Zend_Gdata_App_InvalidArgumentException( 135 'You must provide 2 coordinates to the location ' . 136 'URL parameter'); 137 } 138 139 foreach($parameters as $param) { 140 $temp = trim($param); 141 // strip off the optional exclamation mark for numeric check 142 if (substr($temp, -1) == '!') { 143 $temp = substr($temp, 0, -1); 144 } 145 if (!is_numeric($temp)) { 146 require_once 'Zend/Gdata/App/InvalidArgumentException.php'; 147 throw new Zend_Gdata_App_InvalidArgumentException( 148 'Value provided to location parameter must' . 149 ' be in the form of two coordinates'); 150 } 151 } 152 $this->_params['location'] = $value; 153 } 154 } 155 156 /** 157 * Get the value of the location parameter 158 * 159 * @return string|null Return the location if it exists, null otherwise. 160 */ 161 public function getLocation() 162 { 163 if (array_key_exists('location', $this->_params)) { 164 return $this->_params['location']; 165 } else { 166 return null; 167 } 168 } 169 170 171 /** 172 * Sets the location-radius parameter for the query 173 * 174 * @param string $value 175 * @return Zend_Gdata_YouTube_VideoQuery Provides a fluent interface 176 */ 177 public function setLocationRadius($value) 178 { 179 switch($value) { 180 case null: 181 unset($this->_params['location-radius']); 182 default: 183 $this->_params['location-radius'] = $value; 184 } 185 } 186 187 /** 188 * Get the value of the location-radius parameter 189 * 190 * @return string|null Return the location-radius if it exists, 191 * null otherwise. 192 */ 193 public function getLocationRadius() 194 { 195 if (array_key_exists('location-radius', $this->_params)) { 196 return $this->_params['location-radius']; 197 } else { 198 return null; 199 } 200 } 201 202 /** 203 * Sets the time period over which this query should apply 204 * 205 * @param string $value 206 * @throws Zend_Gdata_App_InvalidArgumentException 207 * @return Zend_Gdata_YouTube_VideoQuery Provides a fluent interface 208 */ 209 public function setTime($value = null) 210 { 211 switch ($value) { 212 case 'today': 213 $this->_params['time'] = 'today'; 214 break; 215 case 'this_week': 216 $this->_params['time'] = 'this_week'; 217 break; 218 case 'this_month': 219 $this->_params['time'] = 'this_month'; 220 break; 221 case 'all_time': 222 $this->_params['time'] = 'all_time'; 223 break; 224 case null: 225 unset($this->_params['time']); 226 default: 227 require_once 'Zend/Gdata/App/InvalidArgumentException.php'; 228 throw new Zend_Gdata_App_InvalidArgumentException( 229 'Unknown time value'); 230 break; 231 } 232 return $this; 233 } 234 235 /** 236 * Sets the value of the uploader parameter 237 * 238 * @param string $value The value of the uploader parameter. Currently this 239 * can only be set to the value of 'partner'. 240 * @throws Zend_Gdata_App_InvalidArgumentException 241 * @return Zend_Gdata_YouTube_VideoQuery Provides a fluent interface 242 */ 243 public function setUploader($value = null) 244 { 245 switch ($value) { 246 case 'partner': 247 $this->_params['uploader'] = 'partner'; 248 break; 249 case null: 250 unset($this->_params['uploader']); 251 break; 252 default: 253 require_once 'Zend/Gdata/App/InvalidArgumentException.php'; 254 throw new Zend_Gdata_App_InvalidArgumentException( 255 'Unknown value for uploader'); 256 } 257 return $this; 258 } 259 260 /** 261 * Sets the formatted video query (vq) URL param value 262 * 263 * @param string $value 264 * @return Zend_Gdata_YouTube_VideoQuery Provides a fluent interface 265 */ 266 public function setVideoQuery($value = null) 267 { 268 if ($value != null) { 269 $this->_params['vq'] = $value; 270 } else { 271 unset($this->_params['vq']); 272 } 273 return $this; 274 } 275 276 /** 277 * Sets the param to return videos of a specific format 278 * 279 * @param string $value 280 * @return Zend_Gdata_YouTube_VideoQuery Provides a fluent interface 281 */ 282 public function setFormat($value = null) 283 { 284 if ($value != null) { 285 $this->_params['format'] = $value; 286 } else { 287 unset($this->_params['format']); 288 } 289 return $this; 290 } 291 292 /** 293 * Sets whether or not to include racy videos in the search results 294 * 295 * @param string $value 296 * @return Zend_Gdata_YouTube_VideoQuery Provides a fluent interface 297 */ 298 public function setRacy($value = null) 299 { 300 switch ($value) { 301 case 'include': 302 $this->_params['racy'] = $value; 303 break; 304 case 'exclude': 305 $this->_params['racy'] = $value; 306 break; 307 case null: 308 unset($this->_params['racy']); 309 break; 310 } 311 return $this; 312 } 313 314 /** 315 * Whether or not to include racy videos in the search results 316 * 317 * @return string|null The value of racy if it exists, null otherwise. 318 */ 319 public function getRacy() 320 { 321 if (array_key_exists('racy', $this->_params)) { 322 return $this->_params['racy']; 323 } else { 324 return null; 325 } 326 } 327 328 /** 329 * Set the safeSearch parameter 330 * 331 * @param string $value The value of the parameter, currently only 'none', 332 * 'moderate' or 'strict' are allowed values. 333 * @throws Zend_Gdata_App_InvalidArgumentException 334 * @return Zend_Gdata_YouTube_VideoQuery Provides a fluent interface 335 */ 336 public function setSafeSearch($value) 337 { 338 switch ($value) { 339 case 'none': 340 $this->_params['safeSearch'] = 'none'; 341 break; 342 case 'moderate': 343 $this->_params['safeSearch'] = 'moderate'; 344 break; 345 case 'strict': 346 $this->_params['safeSearch'] = 'strict'; 347 break; 348 case null: 349 unset($this->_params['safeSearch']); 350 default: 351 require_once 'Zend/Gdata/App/InvalidArgumentException.php'; 352 throw new Zend_Gdata_App_InvalidArgumentException( 353 'The safeSearch parameter only supports the values '. 354 '\'none\', \'moderate\' or \'strict\'.'); 355 } 356 } 357 358 /** 359 * Return the value of the safeSearch parameter 360 * 361 * @return string|null The value of the safeSearch parameter if it has been 362 * set, null otherwise. 363 */ 364 public function getSafeSearch() 365 { 366 if (array_key_exists('safeSearch', $this->_params)) { 367 return $this->_params['safeSearch']; 368 } 369 return $this; 370 } 371 372 /** 373 * Set the value of the orderby parameter 374 * 375 * @param string $value 376 * @return Zend_Gdata_YouTube_Query Provides a fluent interface 377 */ 378 public function setOrderBy($value) 379 { 380 if ($value != null) { 381 $this->_params['orderby'] = $value; 382 } else { 383 unset($this->_params['orderby']); 384 } 385 return $this; 386 } 387 388 /** 389 * Return the value of the format parameter 390 * 391 * @return string|null The value of format if it exists, null otherwise. 392 */ 393 public function getFormat() 394 { 395 if (array_key_exists('format', $this->_params)) { 396 return $this->_params['format']; 397 } else { 398 return null; 399 } 400 } 401 402 /** 403 * Return the value of the video query that has been set 404 * 405 * @return string|null The value of the video query if it exists, 406 * null otherwise. 407 */ 408 public function getVideoQuery() 409 { 410 if (array_key_exists('vq', $this->_params)) { 411 return $this->_params['vq']; 412 } else { 413 return null; 414 } 415 } 416 417 /** 418 * Return the value of the time parameter 419 * 420 * @return string|null The time parameter if it exists, null otherwise. 421 */ 422 public function getTime() 423 { 424 if (array_key_exists('time', $this->_params)) { 425 return $this->_params['time']; 426 } else { 427 return null; 428 } 429 } 430 431 /** 432 * Return the value of the orderby parameter if it exists 433 * 434 * @return string|null The value of orderby if it exists, null otherwise. 435 */ 436 public function getOrderBy() 437 { 438 if (array_key_exists('orderby', $this->_params)) { 439 return $this->_params['orderby']; 440 } else { 441 return null; 442 } 443 } 444 445 /** 446 * Generate the query string from the URL parameters, optionally modifying 447 * them based on protocol version. 448 * 449 * @param integer $majorProtocolVersion The major protocol version 450 * @param integer $minorProtocolVersion The minor protocol version 451 * @throws Zend_Gdata_App_VersionException 452 * @return string querystring 453 */ 454 public function getQueryString($majorProtocolVersion = null, 455 $minorProtocolVersion = null) 456 { 457 $queryArray = array(); 458 459 foreach ($this->_params as $name => $value) { 460 if (substr($name, 0, 1) == '_') { 461 continue; 462 } 463 464 switch($name) { 465 case 'location-radius': 466 if ($majorProtocolVersion == 1) { 467 require_once 'Zend/Gdata/App/VersionException.php'; 468 throw new Zend_Gdata_App_VersionException("The $name " . 469 "parameter is only supported in version 2."); 470 } 471 break; 472 473 case 'racy': 474 if ($majorProtocolVersion == 2) { 475 require_once 'Zend/Gdata/App/VersionException.php'; 476 throw new Zend_Gdata_App_VersionException("The $name " . 477 "parameter is not supported in version 2. " . 478 "Please use 'safeSearch'."); 479 } 480 break; 481 482 case 'safeSearch': 483 if ($majorProtocolVersion == 1) { 484 require_once 'Zend/Gdata/App/VersionException.php'; 485 throw new Zend_Gdata_App_VersionException("The $name " . 486 "parameter is only supported in version 2. " . 487 "Please use 'racy'."); 488 } 489 break; 490 491 case 'uploader': 492 if ($majorProtocolVersion == 1) { 493 require_once 'Zend/Gdata/App/VersionException.php'; 494 throw new Zend_Gdata_App_VersionException("The $name " . 495 "parameter is only supported in version 2."); 496 } 497 break; 498 499 case 'vq': 500 if ($majorProtocolVersion == 2) { 501 $name = 'q'; 502 } 503 break; 504 } 505 506 $queryArray[] = urlencode($name) . '=' . urlencode($value); 507 508 } 509 if (count($queryArray) > 0) { 510 return '?' . implode('&', $queryArray); 511 } else { 512 return ''; 513 } 514 } 515 516 /** 517 * Returns the generated full query URL, optionally modifying it based on 518 * the protocol version. 519 * 520 * @param integer $majorProtocolVersion The major protocol version 521 * @param integer $minorProtocolVersion The minor protocol version 522 * @return string The URL 523 */ 524 public function getQueryUrl($majorProtocolVersion = null, 525 $minorProtocolVersion = null) 526 { 527 if (isset($this->_url)) { 528 $url = $this->_url; 529 } else { 530 $url = Zend_Gdata_YouTube::VIDEO_URI; 531 } 532 if ($this->getCategory() !== null) { 533 $url .= '/-/' . $this->getCategory(); 534 } 535 $url = $url . $this->getQueryString($majorProtocolVersion, 536 $minorProtocolVersion); 537 return $url; 538 } 539 540}