import v1.0.0-RC4 | 2009-05-20
This commit is contained in:
71
libs/Zend/Service/Abstract.php
Normal file
71
libs/Zend/Service/Abstract.php
Normal file
@ -0,0 +1,71 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: Abstract.php 8064 2008-02-16 10:58:39Z thomas $
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Zend_Http_Client
|
||||
*/
|
||||
require_once 'Zend/Http/Client.php';
|
||||
|
||||
|
||||
/**
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
abstract class Zend_Service_Abstract
|
||||
{
|
||||
/**
|
||||
* HTTP Client used to query all web services
|
||||
*
|
||||
* @var Zend_Http_Client
|
||||
*/
|
||||
protected static $_httpClient = null;
|
||||
|
||||
|
||||
/**
|
||||
* Sets the HTTP client object to use for retrieving the feeds. If none
|
||||
* is set, the default Zend_Http_Client will be used.
|
||||
*
|
||||
* @param Zend_Http_Client $httpClient
|
||||
*/
|
||||
final public static function setHttpClient(Zend_Http_Client $httpClient)
|
||||
{
|
||||
self::$_httpClient = $httpClient;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Gets the HTTP client object.
|
||||
*
|
||||
* @return Zend_Http_Client
|
||||
*/
|
||||
final public static function getHttpClient()
|
||||
{
|
||||
if (!self::$_httpClient instanceof Zend_Http_Client) {
|
||||
self::$_httpClient = new Zend_Http_Client();
|
||||
}
|
||||
|
||||
return self::$_httpClient;
|
||||
}
|
||||
}
|
||||
|
387
libs/Zend/Service/Akismet.php
Normal file
387
libs/Zend/Service/Akismet.php
Normal file
@ -0,0 +1,387 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Akismet
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: Akismet.php 8502 2008-03-01 19:56:46Z weppos $
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @see Zend_Version
|
||||
*/
|
||||
require_once 'Zend/Version.php';
|
||||
|
||||
/**
|
||||
* @see Zend_Service_Abstract
|
||||
*/
|
||||
require_once 'Zend/Service/Abstract.php';
|
||||
|
||||
|
||||
/**
|
||||
* Akismet REST service implementation
|
||||
*
|
||||
* @uses Zend_Service_Abstract
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Akismet
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Akismet extends Zend_Service_Abstract
|
||||
{
|
||||
/**
|
||||
* Akismet API key
|
||||
* @var string
|
||||
*/
|
||||
protected $_apiKey;
|
||||
|
||||
/**
|
||||
* Blog URL
|
||||
* @var string
|
||||
*/
|
||||
protected $_blogUrl;
|
||||
|
||||
/**
|
||||
* Charset used for encoding
|
||||
* @var string
|
||||
*/
|
||||
protected $_charset = 'UTF-8';
|
||||
|
||||
/**
|
||||
* TCP/IP port to use in requests
|
||||
* @var int
|
||||
*/
|
||||
protected $_port = 80;
|
||||
|
||||
/**
|
||||
* User Agent string to send in requests
|
||||
* @var string
|
||||
*/
|
||||
protected $_userAgent;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param string $apiKey Akismet API key
|
||||
* @param string $blog Blog URL
|
||||
* @return void
|
||||
*/
|
||||
public function __construct($apiKey, $blog)
|
||||
{
|
||||
$this->setBlogUrl($blog)
|
||||
->setApiKey($apiKey)
|
||||
->setUserAgent('Zend Framework/' . Zend_Version::VERSION . ' | Akismet/1.11');
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve blog URL
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getBlogUrl()
|
||||
{
|
||||
return $this->_blogUrl;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set blog URL
|
||||
*
|
||||
* @param string $blogUrl
|
||||
* @return Zend_Service_Akismet
|
||||
* @throws Zend_Service_Exception if invalid URL provided
|
||||
*/
|
||||
public function setBlogUrl($blogUrl)
|
||||
{
|
||||
require_once 'Zend/Uri.php';
|
||||
if (!Zend_Uri::check($blogUrl)) {
|
||||
require_once 'Zend/Service/Exception.php';
|
||||
throw new Zend_Service_Exception('Invalid url provided for blog');
|
||||
}
|
||||
|
||||
$this->_blogUrl = $blogUrl;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve API key
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getApiKey()
|
||||
{
|
||||
return $this->_apiKey;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set API key
|
||||
*
|
||||
* @param string $apiKey
|
||||
* @return Zend_Service_Akismet
|
||||
*/
|
||||
public function setApiKey($apiKey)
|
||||
{
|
||||
$this->_apiKey = $apiKey;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve charset
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getCharset()
|
||||
{
|
||||
return $this->_charset;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set charset
|
||||
*
|
||||
* @param string $charset
|
||||
* @return Zend_Service_Akismet
|
||||
*/
|
||||
public function setCharset($charset)
|
||||
{
|
||||
$this->_charset = $charset;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve TCP/IP port
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function getPort()
|
||||
{
|
||||
return $this->_port;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set TCP/IP port
|
||||
*
|
||||
* @param int $port
|
||||
* @return Zend_Service_Akismet
|
||||
* @throws Zend_Service_Exception if non-integer value provided
|
||||
*/
|
||||
public function setPort($port)
|
||||
{
|
||||
if (!is_int($port)) {
|
||||
require_once 'Zend/Service/Exception.php';
|
||||
throw new Zend_Service_Exception('Invalid port');
|
||||
}
|
||||
|
||||
$this->_port = $port;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve User Agent string
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getUserAgent()
|
||||
{
|
||||
return $this->_userAgent;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set User Agent
|
||||
*
|
||||
* Should be of form "Some user agent/version | Akismet/version"
|
||||
*
|
||||
* @param string $userAgent
|
||||
* @return Zend_Service_Akismet
|
||||
* @throws Zend_Service_Exception with invalid user agent string
|
||||
*/
|
||||
public function setUserAgent($userAgent)
|
||||
{
|
||||
if (!is_string($userAgent)
|
||||
|| !preg_match(":^[^\n/]*/[^ ]* \| Akismet/[0-9\.]*$:i", $userAgent))
|
||||
{
|
||||
require_once 'Zend/Service/Exception.php';
|
||||
throw new Zend_Service_Exception('Invalid User Agent string; must be of format "Application name/version | Akismet/version"');
|
||||
}
|
||||
|
||||
$this->_userAgent = $userAgent;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Post a request
|
||||
*
|
||||
* @param string $host
|
||||
* @param string $path
|
||||
* @param array $params
|
||||
* @return mixed
|
||||
*/
|
||||
protected function _post($host, $path, array $params)
|
||||
{
|
||||
$uri = 'http://' . $host . ':' . $this->getPort() . $path;
|
||||
$client = self::getHttpClient();
|
||||
$client->setUri($uri);
|
||||
$client->setConfig(array(
|
||||
'useragent' => $this->getUserAgent(),
|
||||
));
|
||||
|
||||
$client->setHeaders(array(
|
||||
'Host' => $host,
|
||||
'Content-Type' => 'application/x-www-form-urlencoded; charset=' . $this->getCharset()
|
||||
));
|
||||
$client->setParameterPost($params);
|
||||
|
||||
$client->setMethod(Zend_Http_Client::POST);
|
||||
return $client->request();
|
||||
}
|
||||
|
||||
/**
|
||||
* Verify an API key
|
||||
*
|
||||
* @param string $key Optional; API key to verify
|
||||
* @param string $blog Optional; blog URL against which to verify key
|
||||
* @return boolean
|
||||
*/
|
||||
public function verifyKey($key = null, $blog = null)
|
||||
{
|
||||
if (null === $key) {
|
||||
$key = $this->getApiKey();
|
||||
}
|
||||
|
||||
if (null === $blog) {
|
||||
$blog = $this->getBlogUrl();
|
||||
}
|
||||
|
||||
$response = $this->_post('rest.akismet.com', '/1.1/verify-key', array(
|
||||
'key' => $key,
|
||||
'blog' => $blog
|
||||
));
|
||||
|
||||
return ('valid' == $response->getBody());
|
||||
}
|
||||
|
||||
/**
|
||||
* Perform an API call
|
||||
*
|
||||
* @param string $path
|
||||
* @param array $params
|
||||
* @return Zend_Http_Response
|
||||
* @throws Zend_Service_Exception if missing user_ip or user_agent fields
|
||||
*/
|
||||
protected function _makeApiCall($path, $params)
|
||||
{
|
||||
if (empty($params['user_ip']) || empty($params['user_agent'])) {
|
||||
require_once 'Zend/Service/Exception.php';
|
||||
throw new Zend_Service_Exception('Missing required Akismet fields (user_ip and user_agent are required)');
|
||||
}
|
||||
|
||||
if (!isset($params['blog'])) {
|
||||
$params['blog'] = $this->getBlogUrl();
|
||||
}
|
||||
|
||||
return $this->_post($this->getApiKey() . '.rest.akismet.com', $path, $params);
|
||||
}
|
||||
|
||||
/**
|
||||
* Check a comment for spam
|
||||
*
|
||||
* Checks a comment to see if it is spam. $params should be an associative
|
||||
* array with one or more of the following keys (unless noted, all keys are
|
||||
* optional):
|
||||
* - blog: URL of the blog. If not provided, uses value returned by {@link getBlogUrl()}
|
||||
* - user_ip (required): IP address of comment submitter
|
||||
* - user_agent (required): User Agent used by comment submitter
|
||||
* - referrer: contents of HTTP_REFERER header
|
||||
* - permalink: location of the entry to which the comment was submitted
|
||||
* - comment_type: typically, one of 'blank', 'comment', 'trackback', or 'pingback', but may be any value
|
||||
* - comment_author: name submitted with the content
|
||||
* - comment_author_email: email submitted with the content
|
||||
* - comment_author_url: URL submitted with the content
|
||||
* - comment_content: actual content
|
||||
*
|
||||
* Additionally, Akismet suggests returning the key/value pairs in the
|
||||
* $_SERVER array, and these may be included in the $params.
|
||||
*
|
||||
* This method implements the Akismet comment-check REST method.
|
||||
*
|
||||
* @param array $params
|
||||
* @return boolean
|
||||
* @throws Zend_Service_Exception with invalid API key
|
||||
*/
|
||||
public function isSpam($params)
|
||||
{
|
||||
$response = $this->_makeApiCall('/1.1/comment-check', $params);
|
||||
|
||||
$return = trim($response->getBody());
|
||||
|
||||
if ('invalid' == $return) {
|
||||
require_once 'Zend/Service/Exception.php';
|
||||
throw new Zend_Service_Exception('Invalid API key');
|
||||
}
|
||||
|
||||
if ('true' == $return) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Submit spam
|
||||
*
|
||||
* Takes the same arguments as {@link isSpam()}.
|
||||
*
|
||||
* Submits known spam content to Akismet to help train it.
|
||||
*
|
||||
* This method implements Akismet's submit-spam REST method.
|
||||
*
|
||||
* @param array $params
|
||||
* @return void
|
||||
* @throws Zend_Service_Exception with invalid API key
|
||||
*/
|
||||
public function submitSpam($params)
|
||||
{
|
||||
$response = $this->_makeApiCall('/1.1/submit-spam', $params);
|
||||
$value = trim($response->getBody());
|
||||
if ('invalid' == $value) {
|
||||
require_once 'Zend/Service/Exception.php';
|
||||
throw new Zend_Service_Exception('Invalid API key');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Submit ham
|
||||
*
|
||||
* Takes the same arguments as {@link isSpam()}.
|
||||
*
|
||||
* Submits a comment that has been falsely categorized as spam by Akismet
|
||||
* as a false positive, telling Akismet's filters not to filter such
|
||||
* comments as spam in the future.
|
||||
*
|
||||
* Unlike {@link submitSpam()} and {@link isSpam()}, a valid API key is
|
||||
* never necessary; as a result, this method never throws an exception
|
||||
* (unless an exception happens with the HTTP client layer).
|
||||
*
|
||||
* this method implements Akismet's submit-ham REST method.
|
||||
*
|
||||
* @param array $params
|
||||
* @return void
|
||||
*/
|
||||
public function submitHam($params)
|
||||
{
|
||||
$response = $this->_makeApiCall('/1.1/submit-ham', $params);
|
||||
}
|
||||
}
|
238
libs/Zend/Service/Amazon.php
Normal file
238
libs/Zend/Service/Amazon.php
Normal file
@ -0,0 +1,238 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Amazon
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: Amazon.php 8064 2008-02-16 10:58:39Z thomas $
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Amazon
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Amazon
|
||||
{
|
||||
/**
|
||||
* Amazon Web Services Access Key ID
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $appId;
|
||||
|
||||
/**
|
||||
* List of Amazon Web Service base URLs, indexed by country code
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $_baseUriList = array('US' => 'http://webservices.amazon.com',
|
||||
'UK' => 'http://webservices.amazon.co.uk',
|
||||
'DE' => 'http://webservices.amazon.de',
|
||||
'JP' => 'http://webservices.amazon.co.jp',
|
||||
'FR' => 'http://webservices.amazon.fr',
|
||||
'CA' => 'http://webservices.amazon.ca');
|
||||
|
||||
/**
|
||||
* Reference to REST client object
|
||||
*
|
||||
* @var Zend_Rest_Client
|
||||
*/
|
||||
protected $_rest;
|
||||
|
||||
|
||||
/**
|
||||
* Constructs a new Amazon Web Services Client
|
||||
*
|
||||
* @param string $appId Developer's Amazon appid
|
||||
* @param string $countryCode Country code for Amazon service; may be US, UK, DE, JP, FR, CA
|
||||
* @throws Zend_Service_Exception
|
||||
* @return Zend_Service_Amazon
|
||||
*/
|
||||
public function __construct($appId, $countryCode = 'US')
|
||||
{
|
||||
$this->appId = (string) $appId;
|
||||
$countryCode = (string) $countryCode;
|
||||
|
||||
if (!isset($this->_baseUriList[$countryCode])) {
|
||||
/**
|
||||
* @see Zend_Service_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Exception.php';
|
||||
throw new Zend_Service_Exception("Unknown country code: $countryCode");
|
||||
}
|
||||
|
||||
/**
|
||||
* @see Zend_Rest_Client
|
||||
*/
|
||||
require_once 'Zend/Rest/Client.php';
|
||||
$this->_rest = new Zend_Rest_Client($this->_baseUriList[$countryCode]);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Search for Items
|
||||
*
|
||||
* @param array $options Options to use for the Search Query
|
||||
* @throws Zend_Service_Exception
|
||||
* @return Zend_Service_Amazon_ResultSet
|
||||
* @see http://www.amazon.com/gp/aws/sdk/main.html/102-9041115-9057709?s=AWSEcommerceService&v=2005-10-05&p=ApiReference/ItemSearchOperation
|
||||
*/
|
||||
public function itemSearch(array $options)
|
||||
{
|
||||
$defaultOptions = array('ResponseGroup' => 'Small');
|
||||
$options = $this->_prepareOptions('ItemSearch', $options, $defaultOptions);
|
||||
$this->_rest->getHttpClient()->resetParameters();
|
||||
$response = $this->_rest->restGet('/onca/xml', $options);
|
||||
|
||||
if ($response->isError()) {
|
||||
/**
|
||||
* @see Zend_Service_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Exception.php';
|
||||
throw new Zend_Service_Exception('An error occurred sending request. Status code: '
|
||||
. $response->getStatus());
|
||||
}
|
||||
|
||||
$dom = new DOMDocument();
|
||||
$dom->loadXML($response->getBody());
|
||||
self::_checkErrors($dom);
|
||||
|
||||
/**
|
||||
* @see Zend_Service_Amazon_ResultSet
|
||||
*/
|
||||
require_once 'Zend/Service/Amazon/ResultSet.php';
|
||||
return new Zend_Service_Amazon_ResultSet($dom);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Look up item(s) by ASIN
|
||||
*
|
||||
* @param string $asin Amazon ASIN ID
|
||||
* @param array $options Query Options
|
||||
* @see http://www.amazon.com/gp/aws/sdk/main.html/102-9041115-9057709?s=AWSEcommerceService&v=2005-10-05&p=ApiReference/ItemLookupOperation
|
||||
* @throws Zend_Service_Exception
|
||||
* @return Zend_Service_Amazon_Item|Zend_Service_Amazon_ResultSet
|
||||
*/
|
||||
public function itemLookup($asin, array $options = array())
|
||||
{
|
||||
$defaultOptions = array('IdType' => 'ASIN', 'ResponseGroup' => 'Small');
|
||||
$options['ItemId'] = (string) $asin;
|
||||
$options = $this->_prepareOptions('ItemLookup', $options, $defaultOptions);
|
||||
$this->_rest->getHttpClient()->resetParameters();
|
||||
$response = $this->_rest->restGet('/onca/xml', $options);
|
||||
|
||||
if ($response->isError()) {
|
||||
/**
|
||||
* @see Zend_Service_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Exception.php';
|
||||
throw new Zend_Service_Exception('An error occurred sending request. Status code: '
|
||||
. $response->getStatus());
|
||||
}
|
||||
|
||||
$dom = new DOMDocument();
|
||||
$dom->loadXML($response->getBody());
|
||||
self::_checkErrors($dom);
|
||||
$xpath = new DOMXPath($dom);
|
||||
$xpath->registerNamespace('az', 'http://webservices.amazon.com/AWSECommerceService/2005-10-05');
|
||||
$items = $xpath->query('//az:Items/az:Item');
|
||||
|
||||
if ($items->length == 1) {
|
||||
/**
|
||||
* @see Zend_Service_Amazon_Item
|
||||
*/
|
||||
require_once 'Zend/Service/Amazon/Item.php';
|
||||
return new Zend_Service_Amazon_Item($items->item(0));
|
||||
}
|
||||
|
||||
/**
|
||||
* @see Zend_Service_Amazon_ResultSet
|
||||
*/
|
||||
require_once 'Zend/Service/Amazon/ResultSet.php';
|
||||
return new Zend_Service_Amazon_ResultSet($dom);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns a reference to the REST client
|
||||
*
|
||||
* @return Zend_Rest_Client
|
||||
*/
|
||||
public function getRestClient()
|
||||
{
|
||||
return $this->_rest;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Prepare options for request
|
||||
*
|
||||
* @param string $query Action to perform
|
||||
* @param array $options User supplied options
|
||||
* @param array $defaultOptions Default options
|
||||
* @return array
|
||||
*/
|
||||
protected function _prepareOptions($query, array $options, array $defaultOptions)
|
||||
{
|
||||
$options['SubscriptionId'] = $this->appId;
|
||||
$options['Service'] = 'AWSECommerceService';
|
||||
$options['Operation'] = (string) $query;
|
||||
|
||||
// de-canonicalize out sort key
|
||||
if (isset($options['ResponseGroup'])) {
|
||||
$responseGroup = split(',', $options['ResponseGroup']);
|
||||
|
||||
if (!in_array('Request', $responseGroup)) {
|
||||
$responseGroup[] = 'Request';
|
||||
$options['ResponseGroup'] = implode(',', $responseGroup);
|
||||
}
|
||||
}
|
||||
|
||||
$options = array_merge($defaultOptions, $options);
|
||||
return $options;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Check result for errors
|
||||
*
|
||||
* @param DOMDocument $dom
|
||||
* @throws Zend_Service_Exception
|
||||
* @return void
|
||||
*/
|
||||
protected static function _checkErrors(DOMDocument $dom)
|
||||
{
|
||||
$xpath = new DOMXPath($dom);
|
||||
$xpath->registerNamespace('az', 'http://webservices.amazon.com/AWSECommerceService/2005-10-05');
|
||||
|
||||
if ($xpath->query('//az:Error')->length >= 1) {
|
||||
$code = $xpath->query('//az:Error/az:Code/text()')->item(0)->data;
|
||||
$message = $xpath->query('//az:Error/az:Message/text()')->item(0)->data;
|
||||
|
||||
/**
|
||||
* @see Zend_Service_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Exception.php';
|
||||
throw new Zend_Service_Exception("$message ($code)");
|
||||
}
|
||||
}
|
||||
}
|
48
libs/Zend/Service/Amazon/Accessories.php
Normal file
48
libs/Zend/Service/Amazon/Accessories.php
Normal file
@ -0,0 +1,48 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Amazon
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: Accessories.php 8064 2008-02-16 10:58:39Z thomas $
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Amazon
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Amazon_Accessories
|
||||
{
|
||||
/**
|
||||
* Assigns values to properties relevant to Accessories
|
||||
*
|
||||
* @param DOMElement $dom
|
||||
* @return void
|
||||
*/
|
||||
public function __construct(DOMElement $dom)
|
||||
{
|
||||
$xpath = new DOMXPath($dom->ownerDocument);
|
||||
$xpath->registerNamespace('az', 'http://webservices.amazon.com/AWSECommerceService/2005-10-05');
|
||||
foreach (array('ASIN', 'Title') as $el) {
|
||||
$this->$el = (string) $xpath->query("./az:$el/text()", $dom)->item(0)->data;
|
||||
}
|
||||
}
|
||||
}
|
51
libs/Zend/Service/Amazon/CustomerReview.php
Normal file
51
libs/Zend/Service/Amazon/CustomerReview.php
Normal file
@ -0,0 +1,51 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Amazon
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: CustomerReview.php 8064 2008-02-16 10:58:39Z thomas $
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Amazon
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Amazon_CustomerReview
|
||||
{
|
||||
/**
|
||||
* Assigns values to properties relevant to CustomerReview
|
||||
*
|
||||
* @param DOMElement $dom
|
||||
* @return void
|
||||
*/
|
||||
public function __construct(DOMElement $dom)
|
||||
{
|
||||
$xpath = new DOMXPath($dom->ownerDocument);
|
||||
$xpath->registerNamespace('az', 'http://webservices.amazon.com/AWSECommerceService/2005-10-05');
|
||||
foreach (array('Rating', 'HelpfulVotes', 'CustomerId', 'TotalVotes', 'Date', 'Summary', 'Content') as $el) {
|
||||
$result = $xpath->query("./az:$el/text()", $dom);
|
||||
if ($result->length == 1) {
|
||||
$this->$el = (string) $result->item(0)->data;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
48
libs/Zend/Service/Amazon/EditorialReview.php
Normal file
48
libs/Zend/Service/Amazon/EditorialReview.php
Normal file
@ -0,0 +1,48 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Amazon
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: EditorialReview.php 8064 2008-02-16 10:58:39Z thomas $
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Amazon
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Amazon_EditorialReview
|
||||
{
|
||||
/**
|
||||
* Assigns values to properties relevant to EditorialReview
|
||||
*
|
||||
* @param DOMElement $dom
|
||||
* @return void
|
||||
*/
|
||||
public function __construct(DOMElement $dom)
|
||||
{
|
||||
$xpath = new DOMXPath($dom->ownerDocument);
|
||||
$xpath->registerNamespace('az', 'http://webservices.amazon.com/AWSECommerceService/2005-10-05');
|
||||
foreach (array('Source', 'Content') as $el) {
|
||||
$this->$el = (string) $xpath->query("./az:$el/text()", $dom)->item(0)->data;
|
||||
}
|
||||
}
|
||||
}
|
69
libs/Zend/Service/Amazon/Image.php
Normal file
69
libs/Zend/Service/Amazon/Image.php
Normal file
@ -0,0 +1,69 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Amazon
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: Image.php 8064 2008-02-16 10:58:39Z thomas $
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Amazon
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Amazon_Image
|
||||
{
|
||||
/**
|
||||
* Image URL
|
||||
*
|
||||
* @var Zend_Uri
|
||||
*/
|
||||
public $Url;
|
||||
|
||||
/**
|
||||
* Image height in pixels
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
public $Height;
|
||||
|
||||
/**
|
||||
* Image width in pixels
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
public $Width;
|
||||
|
||||
/**
|
||||
* Assigns values to properties relevant to Image
|
||||
*
|
||||
* @param DOMElement $dom
|
||||
* @return void
|
||||
*/
|
||||
public function __construct(DOMElement $dom)
|
||||
{
|
||||
$xpath = new DOMXPath($dom->ownerDocument);
|
||||
$xpath->registerNamespace('az', 'http://webservices.amazon.com/AWSECommerceService/2005-10-05');
|
||||
$this->Url = Zend_Uri::factory($xpath->query('./az:URL/text()', $dom)->item(0)->data);
|
||||
$this->Height = (int) $xpath->query('./az:Height/text()', $dom)->item(0)->data;
|
||||
$this->Width = (int) $xpath->query('./az:Width/text()', $dom)->item(0)->data;
|
||||
}
|
||||
}
|
199
libs/Zend/Service/Amazon/Item.php
Normal file
199
libs/Zend/Service/Amazon/Item.php
Normal file
@ -0,0 +1,199 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Amazon
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: Item.php 8064 2008-02-16 10:58:39Z thomas $
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Amazon
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Amazon_Item
|
||||
{
|
||||
public $ASIN;
|
||||
public $DetailPageURL;
|
||||
public $SalesRank;
|
||||
public $SmallImage;
|
||||
public $MediumImage;
|
||||
public $LargeImage;
|
||||
public $Subjects;
|
||||
public $Offers;
|
||||
public $CustomerReviews;
|
||||
public $SimilarProducts;
|
||||
public $Accessories;
|
||||
public $Tracks;
|
||||
public $ListmaniaLists;
|
||||
public $PromotionalTag;
|
||||
|
||||
protected $_dom;
|
||||
|
||||
|
||||
/**
|
||||
* Parse the given <Item> element
|
||||
*
|
||||
* @param DOMElement $dom
|
||||
* @return void
|
||||
*/
|
||||
public function __construct(DOMElement $dom)
|
||||
{
|
||||
$xpath = new DOMXPath($dom->ownerDocument);
|
||||
$xpath->registerNamespace('az', 'http://webservices.amazon.com/AWSECommerceService/2005-10-05');
|
||||
$this->ASIN = $xpath->query('./az:ASIN/text()', $dom)->item(0)->data;
|
||||
|
||||
$result = $xpath->query('./az:DetailPageURL/text()', $dom);
|
||||
if ($result->length == 1) {
|
||||
$this->DetailPageURL = $result->item(0)->data;
|
||||
}
|
||||
|
||||
if ($xpath->query('./az:ItemAttributes/az:ListPrice', $dom)->length >= 1) {
|
||||
$this->CurrencyCode = (string) $xpath->query('./az:ItemAttributes/az:ListPrice/az:CurrencyCode/text()', $dom)->item(0)->data;
|
||||
$this->Amount = (int) $xpath->query('./az:ItemAttributes/az:ListPrice/az:Amount/text()', $dom)->item(0)->data;
|
||||
$this->FormattedPrice = (string) $xpath->query('./az:ItemAttributes/az:ListPrice/az:FormattedPrice/text()', $dom)->item(0)->data;
|
||||
}
|
||||
|
||||
$result = $xpath->query('./az:ItemAttributes/az:*/text()', $dom);
|
||||
if ($result->length >= 1) {
|
||||
foreach ($result as $v) {
|
||||
if (isset($this->{$v->parentNode->tagName})) {
|
||||
if (is_array($this->{$v->parentNode->tagName})) {
|
||||
array_push($this->{$v->parentNode->tagName}, (string) $v->data);
|
||||
} else {
|
||||
$this->{$v->parentNode->tagName} = array($this->{$v->parentNode->tagName}, (string) $v->data);
|
||||
}
|
||||
} else {
|
||||
$this->{$v->parentNode->tagName} = (string) $v->data;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
foreach (array('SmallImage', 'MediumImage', 'LargeImage') as $im) {
|
||||
$result = $xpath->query("./az:ImageSets/az:ImageSet[position() = 1]/az:$im", $dom);
|
||||
if ($result->length == 1) {
|
||||
/**
|
||||
* @see Zend_Service_Amazon_Image
|
||||
*/
|
||||
require_once 'Zend/Service/Amazon/Image.php';
|
||||
$this->$im = new Zend_Service_Amazon_Image($result->item(0));
|
||||
}
|
||||
}
|
||||
|
||||
$result = $xpath->query('./az:SalesRank/text()', $dom);
|
||||
if ($result->length == 1) {
|
||||
$this->SalesRank = (int) $result->item(0)->data;
|
||||
}
|
||||
|
||||
$result = $xpath->query('./az:CustomerReviews/az:Review', $dom);
|
||||
if ($result->length >= 1) {
|
||||
/**
|
||||
* @see Zend_Service_Amazon_CustomerReview
|
||||
*/
|
||||
require_once 'Zend/Service/Amazon/CustomerReview.php';
|
||||
foreach ($result as $review) {
|
||||
$this->CustomerReviews[] = new Zend_Service_Amazon_CustomerReview($review);
|
||||
}
|
||||
$this->AverageRating = (float) $xpath->query('./az:CustomerReviews/az:AverageRating/text()', $dom)->item(0)->data;
|
||||
$this->TotalReviews = (int) $xpath->query('./az:CustomerReviews/az:TotalReviews/text()', $dom)->item(0)->data;
|
||||
}
|
||||
|
||||
$result = $xpath->query('./az:EditorialReviews/az:*', $dom);
|
||||
if ($result->length >= 1) {
|
||||
/**
|
||||
* @see Zend_Service_Amazon_EditorialReview
|
||||
*/
|
||||
require_once 'Zend/Service/Amazon/EditorialReview.php';
|
||||
foreach ($result as $r) {
|
||||
$this->EditorialReviews[] = new Zend_Service_Amazon_EditorialReview($r);
|
||||
}
|
||||
}
|
||||
|
||||
$result = $xpath->query('./az:SimilarProducts/az:*', $dom);
|
||||
if ($result->length >= 1) {
|
||||
/**
|
||||
* @see Zend_Service_Amazon_SimilarProduct
|
||||
*/
|
||||
require_once 'Zend/Service/Amazon/SimilarProduct.php';
|
||||
foreach ($result as $r) {
|
||||
$this->SimilarProducts[] = new Zend_Service_Amazon_SimilarProduct($r);
|
||||
}
|
||||
}
|
||||
|
||||
$result = $xpath->query('./az:ListmaniaLists/*', $dom);
|
||||
if ($result->length >= 1) {
|
||||
/**
|
||||
* @see Zend_Service_Amazon_ListmaniaList
|
||||
*/
|
||||
require_once 'Zend/Service/Amazon/ListmaniaList.php';
|
||||
foreach ($result as $r) {
|
||||
$this->ListmaniaLists[] = new Zend_Service_Amazon_ListmaniaList($r);
|
||||
}
|
||||
}
|
||||
|
||||
$result = $xpath->query('./az:Tracks/az:Disc', $dom);
|
||||
if ($result->length > 1) {
|
||||
foreach ($result as $disk) {
|
||||
foreach ($xpath->query('./*/text()', $disk) as $t) {
|
||||
$this->Tracks[$disk->getAttribute('number')] = (string) $t->data;
|
||||
}
|
||||
}
|
||||
} else if ($result->length == 1) {
|
||||
foreach ($xpath->query('./*/text()', $result->item(0)) as $t) {
|
||||
$this->Tracks[] = (string) $t->data;
|
||||
}
|
||||
}
|
||||
|
||||
$result = $xpath->query('./az:Offers', $dom);
|
||||
$resultSummary = $xpath->query('./az:OfferSummary', $dom);
|
||||
if ($result->length > 1 || $resultSummary->length == 1) {
|
||||
/**
|
||||
* @see Zend_Service_Amazon_OfferSet
|
||||
*/
|
||||
require_once 'Zend/Service/Amazon/OfferSet.php';
|
||||
$this->Offers = new Zend_Service_Amazon_OfferSet($dom);
|
||||
}
|
||||
|
||||
$result = $xpath->query('./az:Accessories/*', $dom);
|
||||
if ($result->length > 1) {
|
||||
/**
|
||||
* @see Zend_Service_Amazon_Accessories
|
||||
*/
|
||||
require_once 'Zend/Service/Amazon/Accessories.php';
|
||||
foreach ($result as $r) {
|
||||
$this->Accessories[] = new Zend_Service_Amazon_Accessories($r);
|
||||
}
|
||||
}
|
||||
|
||||
$this->_dom = $dom;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns the item's original XML
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function asXml()
|
||||
{
|
||||
return $this->_dom->ownerDocument->saveXML($this->_dom);
|
||||
}
|
||||
}
|
48
libs/Zend/Service/Amazon/ListmaniaList.php
Normal file
48
libs/Zend/Service/Amazon/ListmaniaList.php
Normal file
@ -0,0 +1,48 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Amazon
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: ListmaniaList.php 8064 2008-02-16 10:58:39Z thomas $
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Amazon
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Amazon_ListmaniaList
|
||||
{
|
||||
/**
|
||||
* Assigns values to properties relevant to ListmaniaList
|
||||
*
|
||||
* @param DOMElement $dom
|
||||
* @return void
|
||||
*/
|
||||
public function __construct(DOMElement $dom)
|
||||
{
|
||||
$xpath = new DOMXPath($dom->ownerDocument);
|
||||
$xpath->registerNamespace('az', 'http://webservices.amazon.com/AWSECommerceService/2005-10-05');
|
||||
foreach (array('ListId', 'ListName') as $el) {
|
||||
$this->$el = (string) $xpath->query("./az:$el/text()", $dom)->item(0)->data;
|
||||
}
|
||||
}
|
||||
}
|
56
libs/Zend/Service/Amazon/Offer.php
Normal file
56
libs/Zend/Service/Amazon/Offer.php
Normal file
@ -0,0 +1,56 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Amazon
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: Offer.php 8064 2008-02-16 10:58:39Z thomas $
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Amazon
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Amazon_Offer
|
||||
{
|
||||
/**
|
||||
* Parse the given Offer element
|
||||
*
|
||||
* @param DOMElement $dom
|
||||
* @return void
|
||||
*/
|
||||
public function __construct(DOMElement $dom)
|
||||
{
|
||||
$xpath = new DOMXPath($dom->ownerDocument);
|
||||
$xpath->registerNamespace('az', 'http://webservices.amazon.com/AWSECommerceService/2005-10-05');
|
||||
$this->MerchantId = (string) $xpath->query('./az:Merchant/az:MerchantId/text()', $dom)->item(0)->data;
|
||||
$this->GlancePage = (string) $xpath->query('./az:Merchant/az:GlancePage/text()', $dom)->item(0)->data;
|
||||
$this->Condition = (string) $xpath->query('./az:OfferAttributes/az:Condition/text()', $dom)->item(0)->data;
|
||||
$this->OfferListingId = (string) $xpath->query('./az:OfferListing/az:OfferListingId/text()', $dom)->item(0)->data;
|
||||
$this->Price = (int) $xpath->query('./az:OfferListing/az:Price/az:Amount/text()', $dom)->item(0)->data;
|
||||
$this->CurrencyCode = (string) $xpath->query('./az:OfferListing/az:Price/az:CurrencyCode/text()', $dom)->item(0)->data;
|
||||
$this->Availability = (string) $xpath->query('./az:OfferListing/az:Availability/text()', $dom)->item(0)->data;
|
||||
$result = $xpath->query('./az:OfferListing/az:IsEligibleForSuperSaverShipping/text()', $dom);
|
||||
if ($result->length >= 1) {
|
||||
$this->IsEligibleForSuperSaverShipping = (bool) $result->item(0)->data;
|
||||
}
|
||||
}
|
||||
}
|
73
libs/Zend/Service/Amazon/OfferSet.php
Normal file
73
libs/Zend/Service/Amazon/OfferSet.php
Normal file
@ -0,0 +1,73 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Amazon
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: OfferSet.php 8064 2008-02-16 10:58:39Z thomas $
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Amazon
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Amazon_OfferSet
|
||||
{
|
||||
/**
|
||||
* Parse the given Offer Set Element
|
||||
*
|
||||
* @param DOMElement $dom
|
||||
* @return void
|
||||
*/
|
||||
public function __construct(DOMElement $dom)
|
||||
{
|
||||
$xpath = new DOMXPath($dom->ownerDocument);
|
||||
$xpath->registerNamespace('az', 'http://webservices.amazon.com/AWSECommerceService/2005-10-05');
|
||||
|
||||
$offer = $xpath->query('./az:OfferSummary', $dom);
|
||||
if ($offer->length == 1) {
|
||||
$lowestNewPrice = $xpath->query('./az:OfferSummary/az:LowestNewPrice', $dom);
|
||||
if ($lowestNewPrice->length == 1) {
|
||||
$this->LowestNewPrice = (int) $xpath->query('./az:OfferSummary/az:LowestNewPrice/az:Amount/text()', $dom)->item(0)->data;
|
||||
$this->LowestNewPriceCurrency = (string) $xpath->query('./az:OfferSummary/az:LowestNewPrice/az:CurrencyCode/text()', $dom)->item(0)->data;
|
||||
}
|
||||
$lowestUsedPrice = $xpath->query('./az:OfferSummary/az:LowestUsedPrice', $dom);
|
||||
if ($lowestUsedPrice->length == 1) {
|
||||
$this->LowestUsedPrice = (int) $xpath->query('./az:OfferSummary/az:LowestUsedPrice/az:Amount/text()', $dom)->item(0)->data;
|
||||
$this->LowestUsedPriceCurrency = (string) $xpath->query('./az:OfferSummary/az:LowestUsedPrice/az:CurrencyCode/text()', $dom)->item(0)->data;
|
||||
}
|
||||
$this->TotalNew = (int) $xpath->query('./az:OfferSummary/az:TotalNew/text()', $dom)->item(0)->data;
|
||||
$this->TotalUsed = (int) $xpath->query('./az:OfferSummary/az:TotalUsed/text()', $dom)->item(0)->data;
|
||||
$this->TotalCollectible = (int) $xpath->query('./az:OfferSummary/az:TotalCollectible/text()', $dom)->item(0)->data;
|
||||
$this->TotalRefurbished = (int) $xpath->query('./az:OfferSummary/az:TotalRefurbished/text()', $dom)->item(0)->data;
|
||||
}
|
||||
$offers = $xpath->query('./az:Offers/az:Offer', $dom);
|
||||
if ($offers->length >= 1) {
|
||||
/**
|
||||
* @see Zend_Service_Amazon_Offer
|
||||
*/
|
||||
require_once 'Zend/Service/Amazon/Offer.php';
|
||||
foreach ($offers as $offer) {
|
||||
$this->Offers[] = new Zend_Service_Amazon_Offer($offer);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
98
libs/Zend/Service/Amazon/Query.php
Normal file
98
libs/Zend/Service/Amazon/Query.php
Normal file
@ -0,0 +1,98 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Amazon
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: Query.php 8064 2008-02-16 10:58:39Z thomas $
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @see Zend_Service_Amazon
|
||||
*/
|
||||
require_once 'Zend/Service/Amazon.php';
|
||||
|
||||
|
||||
/**
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Amazon
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Amazon_Query extends Zend_Service_Amazon
|
||||
{
|
||||
/**
|
||||
* Search parameters
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $_search = array();
|
||||
|
||||
/**
|
||||
* Search index
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $_searchIndex = null;
|
||||
|
||||
/**
|
||||
* Prepares query parameters
|
||||
*
|
||||
* @param string $method
|
||||
* @param array $args
|
||||
* @throws Zend_Service_Exception
|
||||
* @return Zend_Service_Amazon_Query Provides a fluent interface
|
||||
*/
|
||||
public function __call($method, $args)
|
||||
{
|
||||
if (strtolower($method) === 'asin') {
|
||||
$this->_searchIndex = 'asin';
|
||||
$this->_search['ItemId'] = $args[0];
|
||||
return $this;
|
||||
}
|
||||
|
||||
if (strtolower($method) === 'category') {
|
||||
$this->_searchIndex = $args[0];
|
||||
$this->_search['SearchIndex'] = $args[0];
|
||||
} else if (isset($this->_search['SearchIndex']) || $this->_searchIndex !== null || $this->_searchIndex === 'asin') {
|
||||
$this->_search[$method] = $args[0];
|
||||
} else {
|
||||
/**
|
||||
* @see Zend_Service_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Exception.php';
|
||||
throw new Zend_Service_Exception('You must set a category before setting the search parameters');
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Search using the prepared query
|
||||
*
|
||||
* @return Zend_Service_Amazon_Item|Zend_Service_Amazon_ResultSet
|
||||
*/
|
||||
public function search()
|
||||
{
|
||||
if ($this->_searchIndex === 'asin') {
|
||||
return $this->itemLookup($this->_search['ItemId'], $this->_search);
|
||||
}
|
||||
return $this->itemSearch($this->_search);
|
||||
}
|
||||
}
|
170
libs/Zend/Service/Amazon/ResultSet.php
Normal file
170
libs/Zend/Service/Amazon/ResultSet.php
Normal file
@ -0,0 +1,170 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Amazon
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: ResultSet.php 8064 2008-02-16 10:58:39Z thomas $
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @see Zend_Service_Amazon_Item
|
||||
*/
|
||||
require_once 'Zend/Service/Amazon/Item.php';
|
||||
|
||||
|
||||
/**
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Amazon
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Amazon_ResultSet implements SeekableIterator
|
||||
{
|
||||
/**
|
||||
* A DOMNodeList of <Item> elements
|
||||
*
|
||||
* @var DOMNodeList
|
||||
*/
|
||||
protected $_results = null;
|
||||
|
||||
/**
|
||||
* Amazon Web Service Return Document
|
||||
*
|
||||
* @var DOMDocument
|
||||
*/
|
||||
protected $_dom;
|
||||
|
||||
/**
|
||||
* XPath Object for $this->_dom
|
||||
*
|
||||
* @var DOMXPath
|
||||
*/
|
||||
protected $_xpath;
|
||||
|
||||
/**
|
||||
* Current index for SeekableIterator
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
protected $_currentIndex = 0;
|
||||
|
||||
/**
|
||||
* Create an instance of Zend_Service_Amazon_ResultSet and create the necessary data objects
|
||||
*
|
||||
* @param DOMDocument $dom
|
||||
* @return void
|
||||
*/
|
||||
public function __construct(DOMDocument $dom)
|
||||
{
|
||||
$this->_dom = $dom;
|
||||
$this->_xpath = new DOMXPath($dom);
|
||||
$this->_xpath->registerNamespace('az', 'http://webservices.amazon.com/AWSECommerceService/2005-10-05');
|
||||
$this->_results = $this->_xpath->query('//az:Item');
|
||||
}
|
||||
|
||||
/**
|
||||
* Total Number of results returned
|
||||
*
|
||||
* @return int Total number of results returned
|
||||
*/
|
||||
public function totalResults()
|
||||
{
|
||||
$result = $this->_xpath->query('//az:TotalResults/text()');
|
||||
return (int) $result->item(0)->data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Total Number of pages returned
|
||||
*
|
||||
* @return int Total number of pages returned
|
||||
*/
|
||||
public function totalPages()
|
||||
{
|
||||
$result = $this->_xpath->query('//az:TotalPages/text()');
|
||||
return (int) $result->item(0)->data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Implement SeekableIterator::current()
|
||||
*
|
||||
* @return Zend_Service_Amazon_Item
|
||||
*/
|
||||
public function current()
|
||||
{
|
||||
return new Zend_Service_Amazon_Item($this->_results->item($this->_currentIndex));
|
||||
}
|
||||
|
||||
/**
|
||||
* Implement SeekableIterator::key()
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function key()
|
||||
{
|
||||
return $this->_currentIndex;
|
||||
}
|
||||
|
||||
/**
|
||||
* Implement SeekableIterator::next()
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function next()
|
||||
{
|
||||
$this->_currentIndex += 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Implement SeekableIterator::rewind()
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function rewind()
|
||||
{
|
||||
$this->_currentIndex = 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Implement SeekableIterator::seek()
|
||||
*
|
||||
* @param int $index
|
||||
* @throws OutOfBoundsException
|
||||
* @return void
|
||||
*/
|
||||
public function seek($index)
|
||||
{
|
||||
$indexInt = (int) $index;
|
||||
if ($indexInt >= 0 && (null === $this->_results || $indexInt < $this->_results->length)) {
|
||||
$this->_currentIndex = $indexInt;
|
||||
} else {
|
||||
throw new OutOfBoundsException("Illegal index '$index'");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Implement SeekableIterator::valid()
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
public function valid()
|
||||
{
|
||||
return null !== $this->_results && $this->_currentIndex < $this->_results->length;
|
||||
}
|
||||
}
|
48
libs/Zend/Service/Amazon/SimilarProduct.php
Normal file
48
libs/Zend/Service/Amazon/SimilarProduct.php
Normal file
@ -0,0 +1,48 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Amazon
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: SimilarProduct.php 8064 2008-02-16 10:58:39Z thomas $
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Amazon
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Amazon_SimilarProduct
|
||||
{
|
||||
/**
|
||||
* Assigns values to properties relevant to SimilarProduct
|
||||
*
|
||||
* @param DOMElement $dom
|
||||
* @return void
|
||||
*/
|
||||
public function __construct(DOMElement $dom)
|
||||
{
|
||||
$xpath = new DOMXPath($dom->ownerDocument);
|
||||
$xpath->registerNamespace('az', 'http://webservices.amazon.com/AWSECommerceService/2005-10-05');
|
||||
foreach (array('ASIN', 'Title') as $el) {
|
||||
$this->$el = (string) $xpath->query("./az:$el/text()", $dom)->item(0)->data;
|
||||
}
|
||||
}
|
||||
}
|
626
libs/Zend/Service/Audioscrobbler.php
Normal file
626
libs/Zend/Service/Audioscrobbler.php
Normal file
@ -0,0 +1,626 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Audioscrobbler
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: Audioscrobbler.php 9094 2008-03-30 18:36:55Z thomas $
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @see Zend_Http_Client
|
||||
*/
|
||||
require_once 'Zend/Http/Client.php';
|
||||
|
||||
|
||||
/**
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Audioscrobbler
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Audioscrobbler
|
||||
{
|
||||
/**
|
||||
* Zend_Http_Client Object
|
||||
*
|
||||
* @var Zend_Http_Client
|
||||
* @access protected
|
||||
*/
|
||||
protected $_client;
|
||||
|
||||
/**
|
||||
* Array that contains parameters being used by the webservice
|
||||
*
|
||||
* @var array
|
||||
* @access protected
|
||||
*/
|
||||
protected $_params;
|
||||
|
||||
/**
|
||||
* Flag if we're doing testing or not
|
||||
*
|
||||
* @var boolean
|
||||
* @access protected
|
||||
*/
|
||||
protected $_testing;
|
||||
|
||||
/**
|
||||
* Http response used for testing purposes
|
||||
*
|
||||
* @var string
|
||||
* @access protected
|
||||
*/
|
||||
protected $_testingResponse;
|
||||
|
||||
/**
|
||||
* Holds error information (e.g., for handling simplexml_load_string() warnings)
|
||||
*
|
||||
* @var array
|
||||
* @access protected
|
||||
*/
|
||||
protected $_error = null;
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////
|
||||
/////////////////// CORE METHODS ///////////////////////
|
||||
//////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
/**
|
||||
* Sets up character encoding, instantiates the HTTP client, and assigns the web service version
|
||||
* and testing parameters (if provided).
|
||||
*
|
||||
* @param boolean $testing
|
||||
* @param string $testingResponse
|
||||
* @return void
|
||||
*/
|
||||
public function __construct($testing = false, $testingResponse = null)
|
||||
{
|
||||
$this->set('version', '1.0');
|
||||
|
||||
iconv_set_encoding('output_encoding', 'UTF-8');
|
||||
iconv_set_encoding('input_encoding', 'UTF-8');
|
||||
iconv_set_encoding('internal_encoding', 'UTF-8');
|
||||
|
||||
$this->_client = new Zend_Http_Client();
|
||||
|
||||
$this->_testing = (boolean) $testing;
|
||||
$this->_testingResponse = (string) $testingResponse;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns a field value, or false if the named field does not exist
|
||||
*
|
||||
* @param string $field
|
||||
* @return string|false
|
||||
*/
|
||||
public function get($field)
|
||||
{
|
||||
if (array_key_exists($field, $this->_params)) {
|
||||
return $this->_params[$field];
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Generic set action for a field in the parameters being used
|
||||
*
|
||||
* @param string $field name of field to set
|
||||
* @param string $value value to assign to the named field
|
||||
* @return Zend_Service_Audioscrobbler Provides a fluent interface
|
||||
*/
|
||||
public function set($field, $value)
|
||||
{
|
||||
$this->_params[$field] = urlencode($value);
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Protected method that queries REST service and returns SimpleXML response set
|
||||
*
|
||||
* @param string $service name of Audioscrobbler service file we're accessing
|
||||
* @param string $params parameters that we send to the service if needded
|
||||
* @throws Zend_Http_Client_Exception
|
||||
* @throws Zend_Service_Exception
|
||||
* @return SimpleXMLElement result set
|
||||
* @access protected
|
||||
*/
|
||||
protected function _getInfo($service, $params = null)
|
||||
{
|
||||
$service = (string) $service;
|
||||
$params = (string) $params;
|
||||
|
||||
if ($params === '') {
|
||||
$this->_client->setUri("http://ws.audioscrobbler.com{$service}");
|
||||
} else {
|
||||
$this->_client->setUri("http://ws.audioscrobbler.com{$service}?{$params}");
|
||||
}
|
||||
|
||||
if ($this->_testing) {
|
||||
/**
|
||||
* @see Zend_Http_Client_Adapter_Test
|
||||
*/
|
||||
require_once 'Zend/Http/Client/Adapter/Test.php';
|
||||
$adapter = new Zend_Http_Client_Adapter_Test();
|
||||
|
||||
$this->_client->setConfig(array('adapter' => $adapter));
|
||||
|
||||
$adapter->setResponse($this->_testingResponse);
|
||||
}
|
||||
|
||||
$response = $this->_client->request();
|
||||
$responseBody = $response->getBody();
|
||||
|
||||
if (preg_match('/No such path/', $responseBody)) {
|
||||
/**
|
||||
* @see Zend_Http_Client_Exception
|
||||
*/
|
||||
require_once 'Zend/Http/Client/Exception.php';
|
||||
throw new Zend_Http_Client_Exception('Could not find: ' . $this->_client->getUri());
|
||||
} elseif (preg_match('/No user exists with this name/', $responseBody)) {
|
||||
/**
|
||||
* @see Zend_Http_Client_Exception
|
||||
*/
|
||||
require_once 'Zend/Http/Client/Exception.php';
|
||||
throw new Zend_Http_Client_Exception('No user exists with this name');
|
||||
} elseif (!$response->isSuccessful()) {
|
||||
/**
|
||||
* @see Zend_Http_Client_Exception
|
||||
*/
|
||||
require_once 'Zend/Http/Client/Exception.php';
|
||||
throw new Zend_Http_Client_Exception('The web service ' . $this->_client->getUri() . ' returned the following status code: ' . $response->getStatus());
|
||||
}
|
||||
|
||||
set_error_handler(array($this, '_errorHandler'));
|
||||
|
||||
if (!$simpleXmlElementResponse = simplexml_load_string($responseBody)) {
|
||||
restore_error_handler();
|
||||
/**
|
||||
* @see Zend_Service_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Exception.php';
|
||||
$exception = new Zend_Service_Exception('Response failed to load with SimpleXML');
|
||||
$exception->error = $this->_error;
|
||||
$exception->response = $responseBody;
|
||||
throw $exception;
|
||||
}
|
||||
|
||||
restore_error_handler();
|
||||
|
||||
return $simpleXmlElementResponse;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////
|
||||
/////////////////////// USER ///////////////////////////
|
||||
//////////////////////////////////////////////////////////
|
||||
|
||||
/**
|
||||
* Utility function to get Audioscrobbler profile information (eg: Name, Gender)
|
||||
* @return array containing information
|
||||
*/
|
||||
public function userGetProfileInformation()
|
||||
{
|
||||
$service = "/{$this->get('version')}/user/{$this->get('user')}/profile.xml";
|
||||
return $this->_getInfo($service);
|
||||
}
|
||||
|
||||
/**
|
||||
* Utility function get this user's 50 most played artists
|
||||
* @return array containing info
|
||||
*/
|
||||
public function userGetTopArtists()
|
||||
{
|
||||
$service = "/{$this->get('version')}/user/{$this->get('user')}/topartists.xml";
|
||||
return $this->_getInfo($service);
|
||||
}
|
||||
|
||||
/**
|
||||
* Utility function to get this user's 50 most played albums
|
||||
* @return SimpleXML object containing result set
|
||||
*/
|
||||
public function userGetTopAlbums()
|
||||
{
|
||||
$service = "/{$this->get('version')}/user/{$this->get('user')}/topalbums.xml";
|
||||
return $this->_getInfo($service);
|
||||
}
|
||||
|
||||
/**
|
||||
* Utility function to get this user's 50 most played tracks
|
||||
* @return SimpleXML object containing resut set
|
||||
*/
|
||||
public function userGetTopTracks()
|
||||
{
|
||||
$service = "/{$this->get('version')}/user/{$this->get('user')}/toptracks.xml";
|
||||
return $this->_getInfo($service);
|
||||
}
|
||||
|
||||
/**
|
||||
* Utility function to get this user's 50 most used tags
|
||||
* @return SimpleXML object containing result set
|
||||
*/
|
||||
public function userGetTopTags()
|
||||
{
|
||||
$service = "/{$this->get('version')}/user/{$this->get('user')}/tags.xml";
|
||||
return $this->_getInfo($service);
|
||||
}
|
||||
|
||||
/**
|
||||
* Utility function that returns the user's top tags used most used on a specific artist
|
||||
* @return SimpleXML object containing result set
|
||||
*
|
||||
*/
|
||||
public function userGetTopTagsForArtist()
|
||||
{
|
||||
$service = "/{$this->get('version')}/user/{$this->get('user')}/artisttags.xml";
|
||||
$params = "artist={$this->get('artist')}";
|
||||
return $this->_getInfo($service, $params);
|
||||
}
|
||||
|
||||
/**
|
||||
* Utility function that returns this user's top tags for an album
|
||||
* @return SimpleXML object containing result set
|
||||
*
|
||||
*/
|
||||
public function userGetTopTagsForAlbum()
|
||||
{
|
||||
$service = "/{$this->get('version')}/user/{$this->get('user')}/albumtags.xml";
|
||||
$params = "artist={$this->get('artist')}&album={$this->get('album')}";
|
||||
return $this->_getInfo($service, $params);
|
||||
}
|
||||
|
||||
/**
|
||||
* Utility function that returns this user's top tags for a track
|
||||
* @return SimpleXML object containing result set
|
||||
*
|
||||
*/
|
||||
public function userGetTopTagsForTrack()
|
||||
{
|
||||
$service = "/{$this->get('version')}/user/{$this->get('user')}/tracktags.xml";
|
||||
$params = "artist={$this->get('artist')}&track={$this->get('track')}";
|
||||
return $this->_getInfo($service, $params);
|
||||
}
|
||||
|
||||
/**
|
||||
* Utility function that retrieves this user's list of friends
|
||||
* @return SimpleXML object containing result set
|
||||
*/
|
||||
public function userGetFriends()
|
||||
{
|
||||
$service = "/{$this->get('version')}/user/{$this->get('user')}/friends.xml";
|
||||
return $this->_getInfo($service);
|
||||
}
|
||||
|
||||
/**
|
||||
* Utility function that returns a list of people with similar listening preferences to this user
|
||||
* @return SimpleXML object containing result set
|
||||
*
|
||||
*/
|
||||
public function userGetNeighbours()
|
||||
{
|
||||
$service = "/{$this->get('version')}/user/{$this->get('user')}/neighbours.xml";
|
||||
return $this->_getInfo($service);
|
||||
}
|
||||
|
||||
/**
|
||||
* Utility function that returns a list of the 10 most recent tracks played by this user
|
||||
* @return SimpleXML object containing result set
|
||||
*
|
||||
*/
|
||||
public function userGetRecentTracks()
|
||||
{
|
||||
$service = "/{$this->get('version')}/user/{$this->get('user')}/recenttracks.xml";
|
||||
return $this->_getInfo($service);
|
||||
}
|
||||
|
||||
/**
|
||||
* Utility function that returns a list of the 10 tracks most recently banned by this user
|
||||
* @return SimpleXML object containing result set
|
||||
*
|
||||
*/
|
||||
public function userGetRecentBannedTracks()
|
||||
{
|
||||
$service = "/{$this->get('version')}/user/{$this->get('user')}/recentbannedtracks.xml";
|
||||
return $this->_getInfo($service);
|
||||
}
|
||||
|
||||
/**
|
||||
* Utility function that returns a list of the 10 tracks most recently loved by this user
|
||||
* @return SimpleXML object containing result set
|
||||
*
|
||||
*/
|
||||
public function userGetRecentLovedTracks()
|
||||
{
|
||||
$service = "/{$this->get('version')}/user/{$this->get('user')}/recentlovedtracks.xml";
|
||||
return $this->_getInfo($service);
|
||||
}
|
||||
|
||||
/**
|
||||
* Utility function that returns a list of dates of available weekly charts for a this user
|
||||
* Should actually be named userGetWeeklyChartDateList() but we have to follow audioscrobbler's naming
|
||||
* @return SimpleXML object containing result set
|
||||
*
|
||||
*/
|
||||
public function userGetWeeklyChartList()
|
||||
{
|
||||
$service = "/{$this->get('version')}/user/{$this->get('user')}/weeklychartlist.xml";
|
||||
return $this->_getInfo($service);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Utility function that returns weekly album chart data for this user
|
||||
* @return SimpleXML object containing result set
|
||||
*
|
||||
* @param integer $from optional UNIX timestamp for start of date range
|
||||
* @param integer $to optional UNIX timestamp for end of date range
|
||||
*/
|
||||
public function userGetWeeklyAlbumChart($from = NULL, $to = NULL)
|
||||
{
|
||||
$params = "";
|
||||
|
||||
if ($from != NULL && $to != NULL) {
|
||||
$from = (int)$from;
|
||||
$to = (int)$to;
|
||||
$params = "from={$from}&to={$to}";
|
||||
}
|
||||
|
||||
$service = "/{$this->get('version')}/user/{$this->get('user')}/weeklyalbumchart.xml";
|
||||
return $this->_getInfo($service, $params);
|
||||
}
|
||||
|
||||
/**
|
||||
* Utility function that returns weekly artist chart data for this user
|
||||
* @return SimpleXML object containing result set
|
||||
*
|
||||
* @param integer $from optional UNIX timestamp for start of date range
|
||||
* @param integer $to optional UNIX timestamp for end of date range
|
||||
*/
|
||||
public function userGetWeeklyArtistChart($from = NULL, $to = NULL)
|
||||
{
|
||||
$params = "";
|
||||
|
||||
if ($from != NULL && $to != NULL) {
|
||||
$from = (int)$from;
|
||||
$to = (int)$to;
|
||||
$params = "from={$from}&to={$to}";
|
||||
}
|
||||
|
||||
$service = "/{$this->get('version')}/user/{$this->get('user')}/weeklyartistchart.xml";
|
||||
return $this->_getInfo($service, $params);
|
||||
}
|
||||
|
||||
/**
|
||||
* Utility function that returns weekly track chart data for this user
|
||||
* @return SimpleXML object containing result set
|
||||
*
|
||||
* @param integer $from optional UNIX timestamp for start of date range
|
||||
* @param integer $to optional UNIX timestamp for end of date range
|
||||
*/
|
||||
public function userGetWeeklyTrackChart($from = NULL, $to = NULL)
|
||||
{
|
||||
$params = "";
|
||||
|
||||
if ($from != NULL && $to != NULL) {
|
||||
$from = (int)$from;
|
||||
$to = (int)$to;
|
||||
$params = "from={$from}&to={$to}";
|
||||
}
|
||||
|
||||
$service = "/{$this->get('version')}/user/{$this->get('user')}/weeklytrackchart.xml";
|
||||
return $this->_getInfo($service, $params);
|
||||
}
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////
|
||||
/////////////////////// ARTIST /////////////////////////
|
||||
//////////////////////////////////////////////////////////
|
||||
|
||||
/**
|
||||
* Public functions for retrieveing artist-specific information
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Utility function that returns a list of artists similiar to this artist
|
||||
* @return SimpleXML object containing result set
|
||||
*
|
||||
*/
|
||||
public function artistGetRelatedArtists()
|
||||
{
|
||||
$service = "/{$this->get('version')}/artist/{$this->get('artist')}/similar.xml";
|
||||
return $this->_getInfo($service);
|
||||
}
|
||||
|
||||
/**
|
||||
* Utility function that returns a list of this artist's top listeners
|
||||
* @return SimpleXML object containing result set
|
||||
*
|
||||
*/
|
||||
public function artistGetTopFans()
|
||||
{
|
||||
$service = "/{$this->get('version')}/artist/{$this->get('artist')}/fans.xml";
|
||||
return $this->_getInfo($service);
|
||||
}
|
||||
|
||||
/**
|
||||
* Utility function that returns a list of this artist's top-rated tracks
|
||||
* @return SimpleXML object containing result set
|
||||
*
|
||||
*/
|
||||
public function artistGetTopTracks()
|
||||
{
|
||||
$service = "/{$this->get('version')}/artist/{$this->get('artist')}/toptracks.xml";
|
||||
return $this->_getInfo($service);
|
||||
}
|
||||
|
||||
/**
|
||||
* Utility function that returns a list of this artist's top-rated albums
|
||||
* @return SimpleXML object containing result set
|
||||
*
|
||||
*/
|
||||
public function artistGetTopAlbums()
|
||||
{
|
||||
$service = "/{$this->get('version')}/artist/{$this->get('artist')}/topalbums.xml";
|
||||
return $this->_getInfo($service);
|
||||
}
|
||||
|
||||
/**
|
||||
* Utility function that returns a list of this artist's top-rated tags
|
||||
* @return SimpleXML object containing result set
|
||||
*
|
||||
*/
|
||||
public function artistGetTopTags()
|
||||
{
|
||||
$service = "/{$this->get('version')}/artist/{$this->get('artist')}/toptags.xml";
|
||||
return $this->_getInfo($service);
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////
|
||||
/////////////////////// ALBUM //////////////////////////
|
||||
//////////////////////////////////////////////////////////
|
||||
|
||||
public function albumGetInfo()
|
||||
{
|
||||
$service = "/{$this->get('version')}/album/{$this->get('artist')}/{$this->get('album')}/info.xml";
|
||||
return $this->_getInfo($service);
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////
|
||||
/////////////////////// TRACKS //////////////////////////
|
||||
//////////////////////////////////////////////////////////
|
||||
|
||||
public function trackGetTopFans()
|
||||
{
|
||||
$service = "/{$this->get('version')}/track/{$this->get('artist')}/{$this->get('track')}/fans.xml";
|
||||
return $this->_getInfo($service);
|
||||
}
|
||||
|
||||
public function trackGetTopTags()
|
||||
{
|
||||
$service = "/{$this->get('version')}/track/{$this->get('artist')}/{$this->get('track')}/toptags.xml";
|
||||
return $this->_getInfo($service);
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////
|
||||
/////////////////////// TAGS //////////////////////////
|
||||
//////////////////////////////////////////////////////////
|
||||
|
||||
public function tagGetTopTags()
|
||||
{
|
||||
$service = "/{$this->get('version')}/tag/toptags.xml";
|
||||
return $this->_getInfo($service);
|
||||
}
|
||||
|
||||
public function tagGetTopAlbums()
|
||||
{
|
||||
$service = "/{$this->get('version')}/tag/{$this->get('tag')}/topalbums.xml";
|
||||
return $this->_getInfo($service);
|
||||
}
|
||||
|
||||
public function tagGetTopArtists()
|
||||
{
|
||||
$service = "/{$this->get('version')}/tag/{$this->get('tag')}/topartists.xml";
|
||||
return $this->_getInfo($service);
|
||||
}
|
||||
|
||||
public function tagGetTopTracks()
|
||||
{
|
||||
$service = "/{$this->get('version')}/tag/{$this->get('tag')}/toptracks.xml";
|
||||
return $this->_getInfo($service);
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////
|
||||
/////////////////////// GROUPS //////////////////////////
|
||||
//////////////////////////////////////////////////////////
|
||||
|
||||
public function groupGetWeeklyChartList()
|
||||
{
|
||||
$service = "/{$this->get('version')}/group/{$this->get('group')}/weeklychartlist.xml";
|
||||
return $this->_getInfo($service);
|
||||
}
|
||||
|
||||
public function groupGetWeeklyArtistChartList($from = NULL, $to = NULL)
|
||||
{
|
||||
|
||||
if ($from != NULL && $to != NULL) {
|
||||
$from = (int)$from;
|
||||
$to = (int)$to;
|
||||
$params = "from={$from}&$to={$to}";
|
||||
} else {
|
||||
$params = "";
|
||||
}
|
||||
|
||||
$service = "/{$this->get('version')}/group/{$this->get('group')}/weeklyartistchart.xml";
|
||||
return $this->_getInfo($service, $params);
|
||||
}
|
||||
|
||||
public function groupGetWeeklyTrackChartList($from = NULL, $to = NULL)
|
||||
{
|
||||
if ($from != NULL && $to != NULL) {
|
||||
$from = (int)$from;
|
||||
$to = (int)$to;
|
||||
$params = "from={$from}&to={$to}";
|
||||
} else {
|
||||
$params = "";
|
||||
}
|
||||
|
||||
$service = "/{$this->get('version')}/group/{$this->get('group')}/weeklytrackchart.xml";
|
||||
return $this->_getInfo($service, $params);
|
||||
}
|
||||
|
||||
public function groupGetWeeklyAlbumChartList($from = NULL, $to = NULL)
|
||||
{
|
||||
if ($from != NULL && $to != NULL) {
|
||||
$from = (int)$from;
|
||||
$to = (int)$to;
|
||||
$params = "from={$from}&to={$to}";
|
||||
} else {
|
||||
$params = "";
|
||||
}
|
||||
|
||||
$service = "/{$this->get('version')}/group/{$this->get('group')}/weeklyalbumchart.xml";
|
||||
return $this->_getInfo($service, $params);
|
||||
}
|
||||
|
||||
/**
|
||||
* Saves the provided error information to this instance
|
||||
*
|
||||
* @param integer $errno
|
||||
* @param string $errstr
|
||||
* @param string $errfile
|
||||
* @param integer $errline
|
||||
* @param array $errcontext
|
||||
* @return void
|
||||
*/
|
||||
protected function _errorHandler($errno, $errstr, $errfile, $errline, array $errcontext)
|
||||
{
|
||||
$this->_error = array(
|
||||
'errno' => $errno,
|
||||
'errstr' => $errstr,
|
||||
'errfile' => $errfile,
|
||||
'errline' => $errline,
|
||||
'errcontext' => $errcontext
|
||||
);
|
||||
}
|
||||
}
|
616
libs/Zend/Service/Delicious.php
Normal file
616
libs/Zend/Service/Delicious.php
Normal file
@ -0,0 +1,616 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Delicious
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: Delicious.php 9638 2008-06-08 15:58:11Z ghacek $
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @see Zend_Rest_Client
|
||||
*/
|
||||
require_once 'Zend/Rest/Client.php';
|
||||
|
||||
/**
|
||||
* @see Zend_Json_Decoder
|
||||
*/
|
||||
require_once 'Zend/Json/Decoder.php';
|
||||
|
||||
/**
|
||||
* @see Zend_Service_Delicious_SimplePost
|
||||
*/
|
||||
require_once 'Zend/Service/Delicious/SimplePost.php';
|
||||
|
||||
/**
|
||||
* @see Zend_Service_Delicious_Post
|
||||
*/
|
||||
require_once 'Zend/Service/Delicious/Post.php';
|
||||
|
||||
/**
|
||||
* @see Zend_Service_Delicious_PostList
|
||||
*/
|
||||
require_once 'Zend/Service/Delicious/PostList.php';
|
||||
|
||||
|
||||
/**
|
||||
* Zend_Service_Delicious is a concrete implementation of the del.icio.us web service
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Delicious
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Delicious
|
||||
{
|
||||
const API_URI = 'https://api.del.icio.us';
|
||||
|
||||
const PATH_UPDATE = '/v1/posts/update';
|
||||
const PATH_TAGS = '/v1/tags/get';
|
||||
const PATH_TAG_RENAME = '/v1/tags/rename';
|
||||
const PATH_BUNDLES = '/v1/tags/bundles/all';
|
||||
const PATH_BUNDLE_DELETE = '/v1/tags/bundles/delete';
|
||||
const PATH_BUNDLE_ADD = '/v1/tags/bundles/set';
|
||||
const PATH_DATES = '/v1/posts/dates';
|
||||
const PATH_POST_DELETE = '/v1/posts/delete';
|
||||
const PATH_POSTS_GET = '/v1/posts/get';
|
||||
const PATH_POSTS_ALL = '/v1/posts/all';
|
||||
const PATH_POSTS_ADD = '/v1/posts/add';
|
||||
const PATH_POSTS_RECENT = '/v1/posts/recent';
|
||||
|
||||
const JSON_URI = 'http://del.icio.us';
|
||||
const JSON_POSTS = '/feeds/json/%s/%s';
|
||||
const JSON_TAGS = '/feeds/json/tags/%s';
|
||||
const JSON_NETWORK = '/feeds/json/network/%s';
|
||||
const JSON_FANS = '/feeds/json/fans/%s';
|
||||
const JSON_URL = '/feeds/json/url/data';
|
||||
|
||||
/**
|
||||
* Zend_Service_Rest instance
|
||||
*
|
||||
* @var Zend_Service_Rest
|
||||
*/
|
||||
protected $_rest;
|
||||
|
||||
/**
|
||||
* Username
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $_authUname;
|
||||
|
||||
/**
|
||||
* Password
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $_authPass;
|
||||
|
||||
/**
|
||||
* Microtime of last request
|
||||
*
|
||||
* @var float
|
||||
*/
|
||||
protected static $_lastRequestTime = 0;
|
||||
|
||||
/**
|
||||
* Constructs a new del.icio.us Web Services Client
|
||||
*
|
||||
* @param string $uname Client username
|
||||
* @param string $pass Client password
|
||||
* @return void
|
||||
*/
|
||||
public function __construct($uname = null, $pass = null)
|
||||
{
|
||||
$this->_rest = new Zend_Rest_Client();
|
||||
$this->_rest->getHttpClient()->setConfig(array('ssltransport' => 'ssl'));
|
||||
$this->setAuth($uname, $pass);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set client username and password
|
||||
*
|
||||
* @param string $uname Client user name
|
||||
* @param string $pass Client password
|
||||
* @return Zend_Service_Delicious Provides a fluent interface
|
||||
*/
|
||||
public function setAuth($uname, $pass)
|
||||
{
|
||||
$this->_authUname = $uname;
|
||||
$this->_authPass = $pass;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get time of the last update
|
||||
*
|
||||
* @throws Zend_Service_Delicious_Exception
|
||||
* @return Zend_Date
|
||||
*/
|
||||
public function getLastUpdate()
|
||||
{
|
||||
$response = $this->makeRequest(self::PATH_UPDATE);
|
||||
|
||||
$rootNode = $response->documentElement;
|
||||
if ($rootNode && $rootNode->nodeName == 'update') {
|
||||
/**
|
||||
* @todo replace strtotime() with Zend_Date equivalent
|
||||
*/
|
||||
return new Zend_Date(strtotime($rootNode->getAttribute('time')));
|
||||
} else {
|
||||
/**
|
||||
* @see Zend_Service_Delicious_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Delicious/Exception.php';
|
||||
throw new Zend_Service_Delicious_Exception('del.icio.us web service has returned something odd!');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all tags, returning an array with tags as keys and number of corresponding posts as values
|
||||
*
|
||||
* @return array list of tags
|
||||
*/
|
||||
public function getTags()
|
||||
{
|
||||
$response = $this->makeRequest(self::PATH_TAGS);
|
||||
|
||||
return self::_xmlResponseToArray($response, 'tags', 'tag', 'tag', 'count');
|
||||
}
|
||||
|
||||
/**
|
||||
* Rename a tag
|
||||
*
|
||||
* @param string $old Old tag name
|
||||
* @param string $new New tag name
|
||||
* @return Zend_Service_Delicious Provides a fluent interface
|
||||
*/
|
||||
public function renameTag($old, $new)
|
||||
{
|
||||
$response = $this->makeRequest(self::PATH_TAG_RENAME, array('old' => $old, 'new' => $new));
|
||||
|
||||
self::_evalXmlResult($response);
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all bundles, returning an array with bundles as keys and array of tags as values
|
||||
*
|
||||
* @return array list of bundles
|
||||
*/
|
||||
public function getBundles()
|
||||
{
|
||||
$response = $this->makeRequest(self::PATH_BUNDLES);
|
||||
|
||||
$bundles = self::_xmlResponseToArray($response, 'bundles', 'bundle', 'name', 'tags');
|
||||
foreach ($bundles as &$tags) {
|
||||
$tags = explode(' ', $tags);
|
||||
}
|
||||
return $bundles;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a new bundle
|
||||
*
|
||||
* @param string $bundle Name of new bundle
|
||||
* @param array $tags Array of tags
|
||||
* @return Zend_Service_Delicious Provides a fluent interface
|
||||
*/
|
||||
public function addBundle($bundle, array $tags)
|
||||
{
|
||||
$tags = implode(' ', (array) $tags);
|
||||
$response = $this->makeRequest(self::PATH_BUNDLE_ADD, array('bundle' => $bundle, 'tags' => $tags));
|
||||
|
||||
self::_evalXmlResult($response);
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a bundle
|
||||
*
|
||||
* @param string $bundle Name of bundle to be deleted
|
||||
* @return Zend_Service_Delicious Provides a fluent interface
|
||||
*/
|
||||
public function deleteBundle($bundle)
|
||||
{
|
||||
$response = $this->makeRequest(self::PATH_BUNDLE_DELETE, array('bundle' => $bundle));
|
||||
|
||||
self::_evalXmlResult($response);
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a post
|
||||
*
|
||||
* @param string $url URL of post to be deleted
|
||||
* @return Zend_Service_Delicious Provides a fluent interface
|
||||
*/
|
||||
public function deletePost($url)
|
||||
{
|
||||
$response = $this->makeRequest(self::PATH_POST_DELETE, array('url' => $url));
|
||||
|
||||
self::_evalXmlResult($response);
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get number of posts by date
|
||||
*
|
||||
* Returns array where keys are dates and values are numbers of posts
|
||||
*
|
||||
* @param string $tag Optional filtering by tag
|
||||
* @return array list of dates
|
||||
*/
|
||||
public function getDates($tag = null)
|
||||
{
|
||||
$parms = array();
|
||||
if ($tag) {
|
||||
$parms['tag'] = $tag;
|
||||
}
|
||||
|
||||
$response = $this->makeRequest(self::PATH_DATES, $parms);
|
||||
|
||||
return self::_xmlResponseToArray($response, 'dates', 'date', 'date', 'count');
|
||||
}
|
||||
|
||||
/**
|
||||
* Get posts matching the arguments
|
||||
*
|
||||
* If no date or url is given, most recent date will be used
|
||||
*
|
||||
* @param string $tag Optional filtering by tag
|
||||
* @param Zend_Date $dt Optional filtering by date
|
||||
* @param string $url Optional filtering by url
|
||||
* @throws Zend_Service_Delicious_Exception
|
||||
* @return Zend_Service_Delicious_PostList
|
||||
*/
|
||||
public function getPosts($tag = null, Zend_Date $dt = null, $url = null)
|
||||
{
|
||||
$parms = array();
|
||||
if ($tag) {
|
||||
$parms['tag'] = $tag;
|
||||
}
|
||||
if ($url) {
|
||||
$parms['url'] = $url;
|
||||
}
|
||||
if ($dt) {
|
||||
$parms['dt'] = $dt->get('Y-m-d\TH:i:s\Z');
|
||||
}
|
||||
|
||||
$response = $this->makeRequest(self::PATH_POSTS_GET, $parms);
|
||||
|
||||
return $this->_parseXmlPostList($response);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all posts
|
||||
*
|
||||
* @param string $tag Optional filtering by tag
|
||||
* @return Zend_Service_Delicious_PostList
|
||||
*/
|
||||
public function getAllPosts($tag = null)
|
||||
{
|
||||
$parms = array();
|
||||
if ($tag) {
|
||||
$parms['tag'] = $tag;
|
||||
}
|
||||
|
||||
$response = $this->makeRequest(self::PATH_POSTS_ALL, $parms);
|
||||
|
||||
return $this->_parseXmlPostList($response);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get recent posts
|
||||
*
|
||||
* @param string $tag Optional filtering by tag
|
||||
* @param string $count Maximum number of posts to be returned (default 15)
|
||||
* @return Zend_Service_Delicious_PostList
|
||||
*/
|
||||
public function getRecentPosts($tag = null, $count = 15)
|
||||
{
|
||||
$parms = array();
|
||||
if ($tag) {
|
||||
$parms['tag'] = $tag;
|
||||
}
|
||||
if ($count) {
|
||||
$parms['count'] = $count;
|
||||
}
|
||||
|
||||
$response = $this->makeRequest(self::PATH_POSTS_RECENT, $parms);
|
||||
|
||||
return $this->_parseXmlPostList($response);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create new post
|
||||
*
|
||||
* @return Zend_Service_Delicious_Post
|
||||
*/
|
||||
public function createNewPost($title, $url)
|
||||
{
|
||||
return new Zend_Service_Delicious_Post($this, array('title' => $title, 'url' => $url));
|
||||
}
|
||||
|
||||
/**
|
||||
* Get posts of a user
|
||||
*
|
||||
* @param string $user Owner of the posts
|
||||
* @param int $count Number of posts (default 15, max. 100)
|
||||
* @param string $tag Optional filtering by tag
|
||||
* @return Zend_Service_Delicious_PostList
|
||||
*/
|
||||
public function getUserPosts($user, $count = null, $tag = null)
|
||||
{
|
||||
$parms = array();
|
||||
if ($count) {
|
||||
$parms['count'] = $count;
|
||||
}
|
||||
|
||||
$path = sprintf(self::JSON_POSTS, $user, $tag);
|
||||
$res = $this->makeRequest($path, $parms, 'json');
|
||||
|
||||
return new Zend_Service_Delicious_PostList($this, $res);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get tags of a user
|
||||
*
|
||||
* Returned array has tags as keys and number of posts as values
|
||||
*
|
||||
* @param string $user Owner of the posts
|
||||
* @param int $atleast Include only tags for which there are at least ### number of posts
|
||||
* @param int $count Number of tags to get (default all)
|
||||
* @param string $sort Order of returned tags ('alpha' || 'count')
|
||||
* @return array
|
||||
*/
|
||||
public function getUserTags($user, $atleast = null, $count = null, $sort = 'alpha')
|
||||
{
|
||||
$parms = array();
|
||||
if ($atleast) {
|
||||
$parms['atleast'] = $atleast;
|
||||
}
|
||||
if ($count) {
|
||||
$parms['count'] = $count;
|
||||
}
|
||||
if ($sort) {
|
||||
$parms['sort'] = $sort;
|
||||
}
|
||||
|
||||
$path = sprintf(self::JSON_TAGS, $user);
|
||||
|
||||
return $this->makeRequest($path, $parms, 'json');
|
||||
}
|
||||
|
||||
/**
|
||||
* Get network of a user
|
||||
*
|
||||
* @param string $user Owner of the network
|
||||
* @return array
|
||||
*/
|
||||
public function getUserNetwork($user)
|
||||
{
|
||||
$path = sprintf(self::JSON_NETWORK, $user);
|
||||
return $this->makeRequest($path, array(), 'json');
|
||||
}
|
||||
|
||||
/**
|
||||
* Get fans of a user
|
||||
*
|
||||
* @param string $user Owner of the fans
|
||||
* @return array
|
||||
*/
|
||||
public function getUserFans($user)
|
||||
{
|
||||
$path = sprintf(self::JSON_FANS, $user);
|
||||
return $this->makeRequest($path, array(), 'json');
|
||||
}
|
||||
|
||||
/**
|
||||
* Get details on a particular bookmarked URL
|
||||
*
|
||||
* Returned array contains four elements:
|
||||
* - hash - md5 hash of URL
|
||||
* - top_tags - array of tags and their respective usage counts
|
||||
* - url - URL for which details were returned
|
||||
* - total_posts - number of users that have bookmarked URL
|
||||
*
|
||||
* If URL hasen't been bookmarked null is returned.
|
||||
*
|
||||
* @param string $url URL for which to get details
|
||||
* @return array
|
||||
*/
|
||||
public function getUrlDetails($url)
|
||||
{
|
||||
$parms = array('hash' => md5($url));
|
||||
|
||||
$res = $this->makeRequest(self::JSON_URL, $parms, 'json');
|
||||
|
||||
if(isset($res[0])) {
|
||||
return $res[0];
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles all GET requests to a web service
|
||||
*
|
||||
* @param string $path Path
|
||||
* @param array $parms Array of GET parameters
|
||||
* @param string $type Type of a request ("xml"|"json")
|
||||
* @return mixed decoded response from web service
|
||||
* @throws Zend_Service_Delicious_Exception
|
||||
*/
|
||||
public function makeRequest($path, array $parms = array(), $type = 'xml')
|
||||
{
|
||||
// if previous request was made less then 1 sec ago
|
||||
// wait until we can make a new request
|
||||
$timeDiff = microtime(true) - self::$_lastRequestTime;
|
||||
if ($timeDiff < 1) {
|
||||
usleep((1 - $timeDiff) * 1000000);
|
||||
}
|
||||
|
||||
$this->_rest->getHttpClient()->setAuth($this->_authUname, $this->_authPass);
|
||||
|
||||
switch ($type) {
|
||||
case 'xml':
|
||||
$this->_rest->setUri(self::API_URI);
|
||||
break;
|
||||
case 'json':
|
||||
$parms['raw'] = true;
|
||||
$this->_rest->setUri(self::JSON_URI);
|
||||
break;
|
||||
default:
|
||||
/**
|
||||
* @see Zend_Service_Delicious_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Delicious/Exception.php';
|
||||
throw new Zend_Service_Delicious_Exception('Unknown request type');
|
||||
}
|
||||
|
||||
self::$_lastRequestTime = microtime(true);
|
||||
$response = $this->_rest->restGet($path, $parms);
|
||||
|
||||
if (!$response->isSuccessful()) {
|
||||
/**
|
||||
* @see Zend_Service_Delicious_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Delicious/Exception.php';
|
||||
throw new Zend_Service_Delicious_Exception("Http client reported an error: '{$response->getMessage()}'");
|
||||
}
|
||||
|
||||
$responseBody = $response->getBody();
|
||||
|
||||
switch ($type) {
|
||||
case 'xml':
|
||||
$dom = new DOMDocument() ;
|
||||
|
||||
if (!@$dom->loadXML($responseBody)) {
|
||||
/**
|
||||
* @see Zend_Service_Delicious_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Delicious/Exception.php';
|
||||
throw new Zend_Service_Delicious_Exception('XML Error');
|
||||
}
|
||||
|
||||
return $dom;
|
||||
case 'json':
|
||||
return Zend_Json_Decoder::decode($responseBody);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Transform XML string to array
|
||||
*
|
||||
* @param DOMDocument $response
|
||||
* @param string $root Name of root tag
|
||||
* @param string $child Name of children tags
|
||||
* @param string $attKey Attribute of child tag to be used as a key
|
||||
* @param string $attValue Attribute of child tag to be used as a value
|
||||
* @return array
|
||||
* @throws Zend_Service_Delicious_Exception
|
||||
*/
|
||||
private static function _xmlResponseToArray(DOMDocument $response, $root, $child, $attKey, $attValue)
|
||||
{
|
||||
$rootNode = $response->documentElement;
|
||||
$arrOut = array();
|
||||
|
||||
if ($rootNode->nodeName == $root) {
|
||||
$childNodes = $rootNode->childNodes;
|
||||
|
||||
for ($i = 0; $i < $childNodes->length; $i++) {
|
||||
$currentNode = $childNodes->item($i);
|
||||
if ($currentNode->nodeName == $child) {
|
||||
$arrOut[$currentNode->getAttribute($attKey)] = $currentNode->getAttribute($attValue);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
/**
|
||||
* @see Zend_Service_Delicious_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Delicious/Exception.php';
|
||||
throw new Zend_Service_Delicious_Exception('del.icio.us web service has returned something odd!');
|
||||
}
|
||||
|
||||
return $arrOut;
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs Zend_Service_Delicious_PostList from XML response
|
||||
*
|
||||
* @param DOMDocument $response
|
||||
* @return Zend_Service_Delicious_PostList
|
||||
* @throws Zend_Service_Delicious_Exception
|
||||
*/
|
||||
private function _parseXmlPostList(DOMDocument $response)
|
||||
{
|
||||
$rootNode = $response->documentElement;
|
||||
|
||||
if ($rootNode->nodeName == 'posts') {
|
||||
return new Zend_Service_Delicious_PostList($this, $rootNode->childNodes);
|
||||
} else {
|
||||
/**
|
||||
* @see Zend_Service_Delicious_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Delicious/Exception.php';
|
||||
throw new Zend_Service_Delicious_Exception('del.icio.us web service has returned something odd!');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Evaluates XML response
|
||||
*
|
||||
* @param DOMDocument $response
|
||||
* @return void
|
||||
* @throws Zend_Service_Delicious_Exception
|
||||
*/
|
||||
private static function _evalXmlResult(DOMDocument $response)
|
||||
{
|
||||
$rootNode = $response->documentElement;
|
||||
|
||||
if ($rootNode && $rootNode->nodeName == 'result') {
|
||||
|
||||
if ($rootNode->hasAttribute('code')) {
|
||||
$strResponse = $rootNode->getAttribute('code');
|
||||
} else {
|
||||
$strResponse = $rootNode->nodeValue;
|
||||
}
|
||||
|
||||
if ($strResponse != 'done' && $strResponse != 'ok') {
|
||||
/**
|
||||
* @see Zend_Service_Delicious_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Delicious/Exception.php';
|
||||
throw new Zend_Service_Delicious_Exception("del.icio.us web service: '{$strResponse}'");
|
||||
}
|
||||
} else {
|
||||
/**
|
||||
* @see Zend_Service_Delicious_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Delicious/Exception.php';
|
||||
throw new Zend_Service_Delicious_Exception('del.icio.us web service has returned something odd!');
|
||||
}
|
||||
}
|
||||
}
|
39
libs/Zend/Service/Delicious/Exception.php
Normal file
39
libs/Zend/Service/Delicious/Exception.php
Normal file
@ -0,0 +1,39 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Delicious
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: Exception.php 8064 2008-02-16 10:58:39Z thomas $
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @see Zend_Service_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Exception.php';
|
||||
|
||||
|
||||
/**
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Delicious
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Delicious_Exception extends Zend_Service_Exception
|
||||
{}
|
292
libs/Zend/Service/Delicious/Post.php
Normal file
292
libs/Zend/Service/Delicious/Post.php
Normal file
@ -0,0 +1,292 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Delicious
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: Post.php 8064 2008-02-16 10:58:39Z thomas $
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @see Zend_Date
|
||||
*/
|
||||
require_once 'Zend/Date.php';
|
||||
|
||||
/**
|
||||
* @see Zend_Service_Delicious_SimplePost
|
||||
*/
|
||||
require_once 'Zend/Service/Delicious/SimplePost.php';
|
||||
|
||||
|
||||
/**
|
||||
* Zend_Service_Delicious_Post represents a post of a user that can be edited
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Delicious
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Delicious_Post extends Zend_Service_Delicious_SimplePost
|
||||
{
|
||||
/**
|
||||
* Service that has downloaded the post
|
||||
*
|
||||
* @var Zend_Service_Delicious
|
||||
*/
|
||||
protected $_service;
|
||||
|
||||
/**
|
||||
* @var int Number of people that have the same post
|
||||
*/
|
||||
protected $_others;
|
||||
|
||||
/**
|
||||
* @var Zend_Date Post date
|
||||
*/
|
||||
protected $_date;
|
||||
|
||||
/**
|
||||
* @var bool Post share
|
||||
*/
|
||||
protected $_shared = true;
|
||||
|
||||
/**
|
||||
* @var string Post hash
|
||||
*/
|
||||
protected $_hash;
|
||||
|
||||
/**
|
||||
* Constructs a new del.icio.us post
|
||||
*
|
||||
* @param Zend_Service_Delicious $service Service that has downloaded the post
|
||||
* @param DOMElement|array $values Post content
|
||||
* @throws Zend_Service_Delicious_Exception
|
||||
* @return void
|
||||
*/
|
||||
public function __construct(Zend_Service_Delicious $service, $values)
|
||||
{
|
||||
$this->_service = $service;
|
||||
|
||||
if ($values instanceof DOMElement) {
|
||||
$values = self::_parsePostNode($values);
|
||||
}
|
||||
|
||||
if (!is_array($values) || !isset($values['url']) || !isset($values['title'])) {
|
||||
/**
|
||||
* @see Zend_Service_Delicious_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Delicious/Exception.php';
|
||||
throw new Zend_Service_Delicious_Exception("Second argument must be array with at least 2 keys ('url' and"
|
||||
. " 'title')");
|
||||
}
|
||||
|
||||
if (isset($values['date']) && ! $values['date'] instanceof Zend_Date) {
|
||||
/**
|
||||
* @see Zend_Service_Delicious_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Delicious/Exception.php';
|
||||
throw new Zend_Service_Delicious_Exception("Date has to be an instance of Zend_Date");
|
||||
}
|
||||
|
||||
foreach (array('url', 'title', 'notes', 'others', 'tags', 'date', 'shared', 'hash') as $key) {
|
||||
if (isset($values[$key])) {
|
||||
$this->{"_$key"} = $values[$key];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Setter for title
|
||||
*
|
||||
* @param string $newTitle
|
||||
* @return Zend_Service_Delicious_Post
|
||||
*/
|
||||
public function setTitle($newTitle)
|
||||
{
|
||||
$this->_title = (string) $newTitle;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Setter for notes
|
||||
*
|
||||
* @param string $newNotes
|
||||
* @return Zend_Service_Delicious_Post
|
||||
*/
|
||||
public function setNotes($newNotes)
|
||||
{
|
||||
$this->_notes = (string) $newNotes;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Setter for tags
|
||||
*
|
||||
* @param array $tags
|
||||
* @return Zend_Service_Delicious_Post
|
||||
*/
|
||||
public function setTags(array $tags)
|
||||
{
|
||||
$this->_tags = $tags;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a tag
|
||||
*
|
||||
* @param string $tag
|
||||
* @return Zend_Service_Delicious_Post
|
||||
*/
|
||||
public function addTag($tag)
|
||||
{
|
||||
$this->_tags[] = (string) $tag;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove a tag
|
||||
*
|
||||
* @param string $tag
|
||||
* @return Zend_Service_Delicious_Post
|
||||
*/
|
||||
public function removeTag($tag)
|
||||
{
|
||||
$this->_tags = array_diff($this->_tags, array((string) $tag));
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Getter for date
|
||||
*
|
||||
* @return Zend_Date
|
||||
*/
|
||||
public function getDate()
|
||||
{
|
||||
return $this->_date;
|
||||
}
|
||||
|
||||
/**
|
||||
* Getter for others
|
||||
*
|
||||
* This property is only populated when posts are retrieved
|
||||
* with getPosts() method. The getAllPosts() and getRecentPosts()
|
||||
* methods will not populate this property.
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function getOthers()
|
||||
{
|
||||
return $this->_others;
|
||||
}
|
||||
|
||||
/**
|
||||
* Getter for hash
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getHash()
|
||||
{
|
||||
return $this->_hash;
|
||||
}
|
||||
|
||||
/**
|
||||
* Getter for shared
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function getShared()
|
||||
{
|
||||
return $this->_shared;
|
||||
}
|
||||
|
||||
/**
|
||||
* Setter for shared
|
||||
*
|
||||
* @param bool $isShared
|
||||
* @return Zend_Service_Delicious_Post
|
||||
*/
|
||||
public function setShared($isShared)
|
||||
{
|
||||
$this->_shared = (bool) $isShared;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Deletes post
|
||||
*
|
||||
* @return Zend_Service_Delicious
|
||||
*/
|
||||
public function delete()
|
||||
{
|
||||
return $this->_service->deletePost($this->_url);
|
||||
}
|
||||
|
||||
/**
|
||||
* Saves post
|
||||
*
|
||||
* @return DOMDocument
|
||||
*/
|
||||
public function save()
|
||||
{
|
||||
$parms = array(
|
||||
'url' => $this->_url,
|
||||
'description'=> $this->_title,
|
||||
'extended' => $this->_notes,
|
||||
'shared' => ($this->_shared ? 'yes' : 'no'),
|
||||
'tags' => implode(' ', (array) $this->_tags),
|
||||
'replace' => 'yes'
|
||||
);
|
||||
/*
|
||||
if ($this->_date instanceof Zend_Date) {
|
||||
$parms['dt'] = $this->_date->get('Y-m-d\TH:i:s\Z');
|
||||
}
|
||||
*/
|
||||
|
||||
return $this->_service->makeRequest(Zend_Service_Delicious::PATH_POSTS_ADD, $parms);
|
||||
}
|
||||
|
||||
/**
|
||||
* Extracts content from the DOM element of a post
|
||||
*
|
||||
* @param DOMElement $node
|
||||
* @return array
|
||||
*/
|
||||
protected static function _parsePostNode(DOMElement $node)
|
||||
{
|
||||
return array(
|
||||
'url' => $node->getAttribute('href'),
|
||||
'title' => $node->getAttribute('description'),
|
||||
'notes' => $node->getAttribute('extended'),
|
||||
'others' => (int) $node->getAttribute('others'),
|
||||
'tags' => explode(' ', $node->getAttribute('tag')),
|
||||
/**
|
||||
* @todo replace strtotime() with Zend_Date equivalent
|
||||
*/
|
||||
'date' => new Zend_Date(strtotime($node->getAttribute('time'))),
|
||||
'shared' => ($node->getAttribute('shared') == 'no' ? false : true),
|
||||
'hash' => $node->getAttribute('hash')
|
||||
);
|
||||
}
|
||||
}
|
300
libs/Zend/Service/Delicious/PostList.php
Normal file
300
libs/Zend/Service/Delicious/PostList.php
Normal file
@ -0,0 +1,300 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Delicious
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: PostList.php 8064 2008-02-16 10:58:39Z thomas $
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* List of posts retrived from the del.icio.us web service
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Delicious
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Delicious_PostList implements Countable, Iterator, ArrayAccess
|
||||
{
|
||||
/**
|
||||
* @var array Array of Zend_Service_Delicious_Post
|
||||
*/
|
||||
protected $_posts = array();
|
||||
|
||||
/**
|
||||
* @var Zend_Service_Delicious Service that has downloaded the post list
|
||||
*/
|
||||
protected $_service;
|
||||
|
||||
/**
|
||||
* @var int Iterator key
|
||||
*/
|
||||
protected $_iteratorKey = 0;
|
||||
|
||||
/**
|
||||
* @param Zend_Service_Delicious $service Service that has downloaded the post
|
||||
* @param DOMNodeList|array $posts
|
||||
* @return void
|
||||
*/
|
||||
public function __construct(Zend_Service_Delicious $service, $posts = null)
|
||||
{
|
||||
$this->_service = $service;
|
||||
if ($posts instanceof DOMNodeList) {
|
||||
$this->_constructFromNodeList($posts);
|
||||
} else if (is_array($posts)) {
|
||||
$this->_constructFromArray($posts);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Transforms DOMNodeList to array of posts
|
||||
*
|
||||
* @param DOMNodeList $nodeList
|
||||
* @return void
|
||||
*/
|
||||
private function _constructFromNodeList(DOMNodeList $nodeList)
|
||||
{
|
||||
for ($i = 0; $i < $nodeList->length; $i++) {
|
||||
$curentNode = $nodeList->item($i);
|
||||
if($curentNode->nodeName == 'post') {
|
||||
$this->_addPost(new Zend_Service_Delicious_Post($this->_service, $curentNode));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Transforms the Array to array of posts
|
||||
*
|
||||
* @param array $postList
|
||||
* @return void
|
||||
*/
|
||||
private function _constructFromArray(array $postList)
|
||||
{
|
||||
foreach ($postList as $f_post) {
|
||||
$this->_addPost(new Zend_Service_Delicious_SimplePost($f_post));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a post
|
||||
*
|
||||
* @param Zend_Service_Delicious_SimplePost $post
|
||||
* @return Zend_Service_Delicious_PostList
|
||||
*/
|
||||
protected function _addPost(Zend_Service_Delicious_SimplePost $post)
|
||||
{
|
||||
$this->_posts[] = $post;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Filter list by list of tags
|
||||
*
|
||||
* @param array $tags
|
||||
* @return Zend_Service_Delicious_PostList
|
||||
*/
|
||||
public function withTags(array $tags)
|
||||
{
|
||||
$postList = new self($this->_service);
|
||||
|
||||
foreach ($this->_posts as $post) {
|
||||
if (count(array_diff($tags, $post->getTags())) == 0) {
|
||||
$postList->_addPost($post);
|
||||
}
|
||||
}
|
||||
|
||||
return $postList;
|
||||
}
|
||||
|
||||
/**
|
||||
* Filter list by tag
|
||||
*
|
||||
* @param string $tag
|
||||
* @return Zend_Service_Delicious_PostList
|
||||
*/
|
||||
public function withTag($tag)
|
||||
{
|
||||
return $this->withTags(func_get_args());
|
||||
}
|
||||
|
||||
/**
|
||||
* Filter list by urls matching a regular expression
|
||||
*
|
||||
* @param string $regexp
|
||||
* @return Zend_Service_Delicious_PostList
|
||||
*/
|
||||
public function withUrl($regexp)
|
||||
{
|
||||
$postList = new self($this->_service);
|
||||
|
||||
foreach ($this->_posts as $post) {
|
||||
if (preg_match($regexp, $post->getUrl())) {
|
||||
$postList->_addPost($post);
|
||||
}
|
||||
}
|
||||
|
||||
return $postList;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return number of posts
|
||||
*
|
||||
* Implement Countable::count()
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function count()
|
||||
{
|
||||
return count($this->_posts);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the current element
|
||||
*
|
||||
* Implement Iterator::current()
|
||||
*
|
||||
* @return Zend_Service_Delicious_SimplePost
|
||||
*/
|
||||
public function current()
|
||||
{
|
||||
return $this->_posts[$this->_iteratorKey];
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the key of the current element
|
||||
*
|
||||
* Implement Iterator::key()
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function key()
|
||||
{
|
||||
return $this->_iteratorKey;
|
||||
}
|
||||
|
||||
/**
|
||||
* Move forward to next element
|
||||
*
|
||||
* Implement Iterator::next()
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function next()
|
||||
{
|
||||
$this->_iteratorKey += 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Rewind the Iterator to the first element
|
||||
*
|
||||
* Implement Iterator::rewind()
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function rewind()
|
||||
{
|
||||
$this->_iteratorKey = 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if there is a current element after calls to rewind() or next()
|
||||
*
|
||||
* Implement Iterator::valid()
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function valid()
|
||||
{
|
||||
$numItems = $this->count();
|
||||
|
||||
if ($numItems > 0 && $this->_iteratorKey < $numItems) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Whether the offset exists
|
||||
*
|
||||
* Implement ArrayAccess::offsetExists()
|
||||
*
|
||||
* @param int $offset
|
||||
* @return bool
|
||||
*/
|
||||
public function offsetExists($offset)
|
||||
{
|
||||
return ($offset < $this->count());
|
||||
}
|
||||
|
||||
/**
|
||||
* Return value at given offset
|
||||
*
|
||||
* Implement ArrayAccess::offsetGet()
|
||||
*
|
||||
* @param int $offset
|
||||
* @throws OutOfBoundsException
|
||||
* @return Zend_Service_Delicious_SimplePost
|
||||
*/
|
||||
public function offsetGet($offset)
|
||||
{
|
||||
if ($this->offsetExists($offset)) {
|
||||
return $this->_posts[$offset];
|
||||
} else {
|
||||
throw new OutOfBoundsException('Illegal index');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Throws exception because all values are read-only
|
||||
*
|
||||
* Implement ArrayAccess::offsetSet()
|
||||
*
|
||||
* @param int $offset
|
||||
* @param string $value
|
||||
* @throws Zend_Service_Delicious_Exception
|
||||
*/
|
||||
public function offsetSet($offset, $value)
|
||||
{
|
||||
/**
|
||||
* @see Zend_Service_Delicious_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Delicious/Exception.php';
|
||||
throw new Zend_Service_Delicious_Exception('You are trying to set read-only property');
|
||||
}
|
||||
|
||||
/**
|
||||
* Throws exception because all values are read-only
|
||||
*
|
||||
* Implement ArrayAccess::offsetUnset()
|
||||
*
|
||||
* @param int $offset
|
||||
* @throws Zend_Service_Delicious_Exception
|
||||
*/
|
||||
public function offsetUnset($offset)
|
||||
{
|
||||
/**
|
||||
* @see Zend_Service_Delicious_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Delicious/Exception.php';
|
||||
throw new Zend_Service_Delicious_Exception('You are trying to unset read-only property');
|
||||
}
|
||||
}
|
123
libs/Zend/Service/Delicious/SimplePost.php
Normal file
123
libs/Zend/Service/Delicious/SimplePost.php
Normal file
@ -0,0 +1,123 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Delicious
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: SimplePost.php 8064 2008-02-16 10:58:39Z thomas $
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Represents a publicly available post
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Delicious
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Delicious_SimplePost
|
||||
{
|
||||
/**
|
||||
* @var string Post url
|
||||
*/
|
||||
protected $_url;
|
||||
|
||||
/**
|
||||
* @var string Post title
|
||||
*/
|
||||
protected $_title;
|
||||
|
||||
/**
|
||||
* @var string Post notes
|
||||
*/
|
||||
protected $_notes;
|
||||
|
||||
/**
|
||||
* @var array Post tags
|
||||
*/
|
||||
protected $_tags = array();
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param array $post Post data
|
||||
* @return void
|
||||
* @throws Zend_Service_Delicious_Exception
|
||||
*/
|
||||
public function __construct(array $post)
|
||||
{
|
||||
if (!isset($post['u']) || !isset($post['d'])) {
|
||||
/**
|
||||
* @see Zend_Service_Delicious_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Delicious/Exception.php';
|
||||
throw new Zend_Service_Delicious_Exception('Title and URL not set.');
|
||||
}
|
||||
|
||||
$this->_url = $post['u'];
|
||||
$this->_title = $post['d'];
|
||||
|
||||
if (isset($post['t'])) {
|
||||
$this->_tags = $post['t'];
|
||||
}
|
||||
if (isset($post['n'])) {
|
||||
$this->_notes = $post['n'];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Getter for URL
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getUrl()
|
||||
{
|
||||
return $this->_url;
|
||||
}
|
||||
|
||||
/**
|
||||
* Getter for title
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getTitle()
|
||||
{
|
||||
return $this->_title;
|
||||
}
|
||||
|
||||
/**
|
||||
* Getter for notes
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getNotes()
|
||||
{
|
||||
return $this->_notes;
|
||||
}
|
||||
|
||||
/**
|
||||
* Getter for tags
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getTags()
|
||||
{
|
||||
return $this->_tags;
|
||||
}
|
||||
}
|
37
libs/Zend/Service/Exception.php
Normal file
37
libs/Zend/Service/Exception.php
Normal file
@ -0,0 +1,37 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: Exception.php 8064 2008-02-16 10:58:39Z thomas $
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Zend_Exception
|
||||
*/
|
||||
require_once 'Zend/Exception.php';
|
||||
|
||||
|
||||
/**
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Exception extends Zend_Exception
|
||||
{}
|
||||
|
627
libs/Zend/Service/Flickr.php
Normal file
627
libs/Zend/Service/Flickr.php
Normal file
@ -0,0 +1,627 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Flickr
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: Flickr.php 8733 2008-03-10 15:56:48Z jokke $
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Flickr
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Flickr
|
||||
{
|
||||
/**
|
||||
* Base URI for the REST client
|
||||
*/
|
||||
const URI_BASE = 'http://www.flickr.com';
|
||||
|
||||
/**
|
||||
* Your Flickr API key
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $apiKey;
|
||||
|
||||
/**
|
||||
* Reference to REST client object
|
||||
*
|
||||
* @var Zend_Rest_Client
|
||||
*/
|
||||
protected $_restClient = null;
|
||||
|
||||
|
||||
/**
|
||||
* Performs object initializations
|
||||
*
|
||||
* # Sets up character encoding
|
||||
* # Saves the API key
|
||||
*
|
||||
* @param string $apiKey Your Flickr API key
|
||||
* @return void
|
||||
*/
|
||||
public function __construct($apiKey)
|
||||
{
|
||||
iconv_set_encoding('output_encoding', 'UTF-8');
|
||||
iconv_set_encoding('input_encoding', 'UTF-8');
|
||||
iconv_set_encoding('internal_encoding', 'UTF-8');
|
||||
|
||||
$this->apiKey = (string) $apiKey;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Find Flickr photos by tag.
|
||||
*
|
||||
* Query options include:
|
||||
*
|
||||
* # per_page: how many results to return per query
|
||||
* # page: the starting page offset. first result will be (page - 1) * per_page + 1
|
||||
* # tag_mode: Either 'any' for an OR combination of tags,
|
||||
* or 'all' for an AND combination. Default is 'any'.
|
||||
* # min_upload_date: Minimum upload date to search on. Date should be a unix timestamp.
|
||||
* # max_upload_date: Maximum upload date to search on. Date should be a unix timestamp.
|
||||
* # min_taken_date: Minimum upload date to search on. Date should be a MySQL datetime.
|
||||
* # max_taken_date: Maximum upload date to search on. Date should be a MySQL datetime.
|
||||
*
|
||||
* @param string|array $query A single tag or an array of tags.
|
||||
* @param array $options Additional parameters to refine your query.
|
||||
* @return Zend_Service_Flickr_ResultSet
|
||||
* @throws Zend_Service_Exception
|
||||
*/
|
||||
public function tagSearch($query, array $options = array())
|
||||
{
|
||||
static $method = 'flickr.photos.search';
|
||||
static $defaultOptions = array('per_page' => 10,
|
||||
'page' => 1,
|
||||
'tag_mode' => 'or',
|
||||
'extras' => 'license, date_upload, date_taken, owner_name, icon_server');
|
||||
|
||||
$options['tags'] = is_array($query) ? implode(',', $query) : $query;
|
||||
|
||||
$options = $this->_prepareOptions($method, $options, $defaultOptions);
|
||||
|
||||
$this->_validateTagSearch($options);
|
||||
|
||||
// now search for photos
|
||||
$restClient = $this->getRestClient();
|
||||
$restClient->getHttpClient()->resetParameters();
|
||||
$response = $restClient->restGet('/services/rest/', $options);
|
||||
|
||||
if ($response->isError()) {
|
||||
/**
|
||||
* @see Zend_Service_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Exception.php';
|
||||
throw new Zend_Service_Exception('An error occurred sending request. Status code: '
|
||||
. $response->getStatus());
|
||||
}
|
||||
|
||||
$dom = new DOMDocument();
|
||||
$dom->loadXML($response->getBody());
|
||||
|
||||
self::_checkErrors($dom);
|
||||
|
||||
/**
|
||||
* @see Zend_Service_Flickr_ResultSet
|
||||
*/
|
||||
require_once 'Zend/Service/Flickr/ResultSet.php';
|
||||
return new Zend_Service_Flickr_ResultSet($dom, $this);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Finds photos by a user's username or email.
|
||||
*
|
||||
* Additional query options include:
|
||||
*
|
||||
* # per_page: how many results to return per query
|
||||
* # page: the starting page offset. first result will be (page - 1) * per_page + 1
|
||||
* # min_upload_date: Minimum upload date to search on. Date should be a unix timestamp.
|
||||
* # max_upload_date: Maximum upload date to search on. Date should be a unix timestamp.
|
||||
* # min_taken_date: Minimum upload date to search on. Date should be a MySQL datetime.
|
||||
* # max_taken_date: Maximum upload date to search on. Date should be a MySQL datetime.
|
||||
*
|
||||
* @param string $query username or email
|
||||
* @param array $options Additional parameters to refine your query.
|
||||
* @return Zend_Service_Flickr_ResultSet
|
||||
* @throws Zend_Service_Exception
|
||||
*/
|
||||
public function userSearch($query, array $options = null)
|
||||
{
|
||||
static $method = 'flickr.people.getPublicPhotos';
|
||||
static $defaultOptions = array('per_page' => 10,
|
||||
'page' => 1,
|
||||
'extras' => 'license, date_upload, date_taken, owner_name, icon_server');
|
||||
|
||||
|
||||
// can't access by username, must get ID first
|
||||
if (strchr($query, '@')) {
|
||||
// optimistically hope this is an email
|
||||
$options['user_id'] = $this->getIdByEmail($query);
|
||||
} else {
|
||||
// we can safely ignore this exception here
|
||||
$options['user_id'] = $this->getIdByUsername($query);
|
||||
}
|
||||
|
||||
$options = $this->_prepareOptions($method, $options, $defaultOptions);
|
||||
$this->_validateUserSearch($options);
|
||||
|
||||
// now search for photos
|
||||
$restClient = $this->getRestClient();
|
||||
$restClient->getHttpClient()->resetParameters();
|
||||
$response = $restClient->restGet('/services/rest/', $options);
|
||||
|
||||
if ($response->isError()) {
|
||||
/**
|
||||
* @see Zend_Service_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Exception.php';
|
||||
throw new Zend_Service_Exception('An error occurred sending request. Status code: '
|
||||
. $response->getStatus());
|
||||
}
|
||||
|
||||
$dom = new DOMDocument();
|
||||
$dom->loadXML($response->getBody());
|
||||
|
||||
self::_checkErrors($dom);
|
||||
|
||||
/**
|
||||
* @see Zend_Service_Flickr_ResultSet
|
||||
*/
|
||||
require_once 'Zend/Service/Flickr/ResultSet.php';
|
||||
return new Zend_Service_Flickr_ResultSet($dom, $this);
|
||||
}
|
||||
|
||||
/**
|
||||
* Finds photos in a group's pool.
|
||||
*
|
||||
* @param string $query group id
|
||||
* @param array $options Additional parameters to refine your query.
|
||||
* @return Zend_Service_Flickr_ResultSet
|
||||
* @throws Zend_Service_Exception
|
||||
*/
|
||||
public function groupPoolGetPhotos($query, array $options = array())
|
||||
{
|
||||
static $method = 'flickr.groups.pools.getPhotos';
|
||||
static $defaultOptions = array('per_page' => 10,
|
||||
'page' => 1,
|
||||
'extras' => 'license, date_upload, date_taken, owner_name, icon_server');
|
||||
|
||||
if (empty($query) || !is_string($query)) {
|
||||
/**
|
||||
* @see Zend_Service_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Exception.php';
|
||||
throw new Zend_Service_Exception('You must supply a group id');
|
||||
}
|
||||
|
||||
$options['group_id'] = $query;
|
||||
|
||||
$options = $this->_prepareOptions($method, $options, $defaultOptions);
|
||||
|
||||
$this->_validateGroupPoolGetPhotos($options);
|
||||
|
||||
// now search for photos
|
||||
$restClient = $this->getRestClient();
|
||||
$restClient->getHttpClient()->resetParameters();
|
||||
$response = $restClient->restGet('/services/rest/', $options);
|
||||
|
||||
if ($response->isError()) {
|
||||
/**
|
||||
* @see Zend_Service_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Exception.php';
|
||||
throw new Zend_Service_Exception('An error occurred sending request. Status code: '
|
||||
. $response->getStatus());
|
||||
}
|
||||
|
||||
$dom = new DOMDocument();
|
||||
$dom->loadXML($response->getBody());
|
||||
|
||||
self::_checkErrors($dom);
|
||||
|
||||
/**
|
||||
* @see Zend_Service_Flickr_ResultSet
|
||||
*/
|
||||
require_once 'Zend/Service/Flickr/ResultSet.php';
|
||||
return new Zend_Service_Flickr_ResultSet($dom, $this);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Utility function to find Flickr User IDs for usernames.
|
||||
*
|
||||
* (You can only find a user's photo with their NSID.)
|
||||
*
|
||||
* @param string $username the username
|
||||
* @return string the NSID (userid)
|
||||
* @throws Zend_Service_Exception
|
||||
*/
|
||||
public function getIdByUsername($username)
|
||||
{
|
||||
static $method = 'flickr.people.findByUsername';
|
||||
|
||||
$options = array('api_key' => $this->apiKey, 'method' => $method, 'username' => (string) $username);
|
||||
|
||||
if (empty($username)) {
|
||||
/**
|
||||
* @see Zend_Service_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Exception.php';
|
||||
throw new Zend_Service_Exception('You must supply a username');
|
||||
}
|
||||
|
||||
$restClient = $this->getRestClient();
|
||||
$restClient->getHttpClient()->resetParameters();
|
||||
$response = $restClient->restGet('/services/rest/', $options);
|
||||
|
||||
if ($response->isError()) {
|
||||
/**
|
||||
* @see Zend_Service_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Exception.php';
|
||||
throw new Zend_Service_Exception('An error occurred sending request. Status code: '
|
||||
. $response->getStatus());
|
||||
}
|
||||
|
||||
$dom = new DOMDocument();
|
||||
$dom->loadXML($response->getBody());
|
||||
self::_checkErrors($dom);
|
||||
$xpath = new DOMXPath($dom);
|
||||
return (string) $xpath->query('//user')->item(0)->getAttribute('id');
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Utility function to find Flickr User IDs for emails.
|
||||
*
|
||||
* (You can only find a user's photo with their NSID.)
|
||||
*
|
||||
* @param string $email the email
|
||||
* @return string the NSID (userid)
|
||||
* @throws Zend_Service_Exception
|
||||
*/
|
||||
public function getIdByEmail($email)
|
||||
{
|
||||
static $method = 'flickr.people.findByEmail';
|
||||
|
||||
if (empty($email)) {
|
||||
/**
|
||||
* @see Zend_Service_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Exception.php';
|
||||
throw new Zend_Service_Exception('You must supply an e-mail address');
|
||||
}
|
||||
|
||||
$options = array('api_key' => $this->apiKey, 'method' => $method, 'find_email' => (string) $email);
|
||||
|
||||
$restClient = $this->getRestClient();
|
||||
$restClient->getHttpClient()->resetParameters();
|
||||
$response = $restClient->restGet('/services/rest/', $options);
|
||||
|
||||
if ($response->isError()) {
|
||||
/**
|
||||
* @see Zend_Service_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Exception.php';
|
||||
throw new Zend_Service_Exception('An error occurred sending request. Status code: '
|
||||
. $response->getStatus());
|
||||
}
|
||||
|
||||
$dom = new DOMDocument();
|
||||
$dom->loadXML($response->getBody());
|
||||
self::_checkErrors($dom);
|
||||
$xpath = new DOMXPath($dom);
|
||||
return (string) $xpath->query('//user')->item(0)->getAttribute('id');
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns Flickr photo details by for the given photo ID
|
||||
*
|
||||
* @param string $id the NSID
|
||||
* @return array of Zend_Service_Flickr_Image, details for the specified image
|
||||
* @throws Zend_Service_Exception
|
||||
*/
|
||||
public function getImageDetails($id)
|
||||
{
|
||||
static $method = 'flickr.photos.getSizes';
|
||||
|
||||
if (empty($id)) {
|
||||
/**
|
||||
* @see Zend_Service_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Exception.php';
|
||||
throw new Zend_Service_Exception('You must supply a photo ID');
|
||||
}
|
||||
|
||||
$options = array('api_key' => $this->apiKey, 'method' => $method, 'photo_id' => $id);
|
||||
|
||||
$restClient = $this->getRestClient();
|
||||
$restClient->getHttpClient()->resetParameters();
|
||||
$response = $restClient->restGet('/services/rest/', $options);
|
||||
|
||||
$dom = new DOMDocument();
|
||||
$dom->loadXML($response->getBody());
|
||||
$xpath = new DOMXPath($dom);
|
||||
self::_checkErrors($dom);
|
||||
$retval = array();
|
||||
/**
|
||||
* @see Zend_Service_Flickr_Image
|
||||
*/
|
||||
require_once 'Zend/Service/Flickr/Image.php';
|
||||
foreach ($xpath->query('//size') as $size) {
|
||||
$label = (string) $size->getAttribute('label');
|
||||
$retval[$label] = new Zend_Service_Flickr_Image($size);
|
||||
}
|
||||
|
||||
return $retval;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns a reference to the REST client, instantiating it if necessary
|
||||
*
|
||||
* @return Zend_Rest_Client
|
||||
*/
|
||||
public function getRestClient()
|
||||
{
|
||||
if (null === $this->_restClient) {
|
||||
/**
|
||||
* @see Zend_Rest_Client
|
||||
*/
|
||||
require_once 'Zend/Rest/Client.php';
|
||||
$this->_restClient = new Zend_Rest_Client(self::URI_BASE);
|
||||
}
|
||||
|
||||
return $this->_restClient;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Validate User Search Options
|
||||
*
|
||||
* @param array $options
|
||||
* @return void
|
||||
* @throws Zend_Service_Exception
|
||||
*/
|
||||
protected function _validateUserSearch(array $options)
|
||||
{
|
||||
$validOptions = array('api_key', 'method', 'user_id', 'per_page', 'page', 'extras', 'min_upload_date',
|
||||
'min_taken_date', 'max_upload_date', 'max_taken_date');
|
||||
|
||||
$this->_compareOptions($options, $validOptions);
|
||||
|
||||
/**
|
||||
* @see Zend_Validate_Between
|
||||
*/
|
||||
require_once 'Zend/Validate/Between.php';
|
||||
$between = new Zend_Validate_Between(1, 500, true);
|
||||
if (!$between->isValid($options['per_page'])) {
|
||||
/**
|
||||
* @see Zend_Service_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Exception.php';
|
||||
throw new Zend_Service_Exception($options['per_page'] . ' is not valid for the "per_page" option');
|
||||
}
|
||||
|
||||
/**
|
||||
* @see Zend_Validate_Int
|
||||
*/
|
||||
require_once 'Zend/Validate/Int.php';
|
||||
$int = new Zend_Validate_Int();
|
||||
if (!$int->isValid($options['page'])) {
|
||||
/**
|
||||
* @see Zend_Service_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Exception.php';
|
||||
throw new Zend_Service_Exception($options['page'] . ' is not valid for the "page" option');
|
||||
}
|
||||
|
||||
// validate extras, which are delivered in csv format
|
||||
if ($options['extras']) {
|
||||
$extras = explode(',', $options['extras']);
|
||||
$validExtras = array('license', 'date_upload', 'date_taken', 'owner_name', 'icon_server');
|
||||
foreach($extras as $extra) {
|
||||
/**
|
||||
* @todo The following does not do anything [yet], so it is commented out.
|
||||
*/
|
||||
//in_array(trim($extra), $validExtras);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Validate Tag Search Options
|
||||
*
|
||||
* @param array $options
|
||||
* @return void
|
||||
* @throws Zend_Service_Exception
|
||||
*/
|
||||
protected function _validateTagSearch(array $options)
|
||||
{
|
||||
$validOptions = array('method', 'api_key', 'user_id', 'tags', 'tag_mode', 'text', 'min_upload_date',
|
||||
'max_upload_date', 'min_taken_date', 'max_taken_date', 'license', 'sort',
|
||||
'privacy_filter', 'bbox', 'accuracy', 'machine_tags', 'machine_tag_mode', 'group_id',
|
||||
'extras', 'per_page', 'page');
|
||||
|
||||
$this->_compareOptions($options, $validOptions);
|
||||
|
||||
/**
|
||||
* @see Zend_Validate_Between
|
||||
*/
|
||||
require_once 'Zend/Validate/Between.php';
|
||||
$between = new Zend_Validate_Between(1, 500, true);
|
||||
if (!$between->isValid($options['per_page'])) {
|
||||
/**
|
||||
* @see Zend_Service_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Exception.php';
|
||||
throw new Zend_Service_Exception($options['per_page'] . ' is not valid for the "per_page" option');
|
||||
}
|
||||
|
||||
/**
|
||||
* @see Zend_Validate_Int
|
||||
*/
|
||||
require_once 'Zend/Validate/Int.php';
|
||||
$int = new Zend_Validate_Int();
|
||||
if (!$int->isValid($options['page'])) {
|
||||
/**
|
||||
* @see Zend_Service_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Exception.php';
|
||||
throw new Zend_Service_Exception($options['page'] . ' is not valid for the "page" option');
|
||||
}
|
||||
|
||||
// validate extras, which are delivered in csv format
|
||||
if ($options['extras']) {
|
||||
$extras = explode(',', $options['extras']);
|
||||
$validExtras = array('license', 'date_upload', 'date_taken', 'owner_name', 'icon_server');
|
||||
foreach($extras as $extra) {
|
||||
/**
|
||||
* @todo The following does not do anything [yet], so it is commented out.
|
||||
*/
|
||||
//in_array(trim($extra), $validExtras);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Validate Group Search Options
|
||||
*
|
||||
* @param array $options
|
||||
* @throws Zend_Service_Exception
|
||||
* @return void
|
||||
*/
|
||||
protected function _validateGroupPoolGetPhotos(array $options)
|
||||
{
|
||||
$validOptions = array('api_key', 'tags', 'method', 'group_id', 'per_page', 'page', 'extras', 'user_id');
|
||||
|
||||
$this->_compareOptions($options, $validOptions);
|
||||
|
||||
/**
|
||||
* @see Zend_Validate_Between
|
||||
*/
|
||||
require_once 'Zend/Validate/Between.php';
|
||||
$between = new Zend_Validate_Between(1, 500, true);
|
||||
if (!$between->isValid($options['per_page'])) {
|
||||
/**
|
||||
* @see Zend_Service_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Exception.php';
|
||||
throw new Zend_Service_Exception($options['per_page'] . ' is not valid for the "per_page" option');
|
||||
}
|
||||
|
||||
/**
|
||||
* @see Zend_Validate_Int
|
||||
*/
|
||||
require_once 'Zend/Validate/Int.php';
|
||||
$int = new Zend_Validate_Int();
|
||||
|
||||
if (!$int->isValid($options['page'])) {
|
||||
/**
|
||||
* @see Zend_Service_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Exception.php';
|
||||
throw new Zend_Service_Exception($options['page'] . ' is not valid for the "page" option');
|
||||
}
|
||||
|
||||
// validate extras, which are delivered in csv format
|
||||
if (isset($options['extras'])) {
|
||||
$extras = explode(',', $options['extras']);
|
||||
$validExtras = array('license', 'date_upload', 'date_taken', 'owner_name', 'icon_server');
|
||||
foreach($extras as $extra) {
|
||||
/**
|
||||
* @todo The following does not do anything [yet], so it is commented out.
|
||||
*/
|
||||
//in_array(trim($extra), $validExtras);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Throws an exception if and only if the response status indicates a failure
|
||||
*
|
||||
* @param DOMDocument $dom
|
||||
* @return void
|
||||
* @throws Zend_Service_Exception
|
||||
*/
|
||||
protected static function _checkErrors(DOMDocument $dom)
|
||||
{
|
||||
if ($dom->documentElement->getAttribute('stat') === 'fail') {
|
||||
$xpath = new DOMXPath($dom);
|
||||
$err = $xpath->query('//err')->item(0);
|
||||
/**
|
||||
* @see Zend_Service_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Exception.php';
|
||||
throw new Zend_Service_Exception('Search failed due to error: ' . $err->getAttribute('msg')
|
||||
. ' (error #' . $err->getAttribute('code') . ')');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Prepare options for the request
|
||||
*
|
||||
* @param string $method Flickr Method to call
|
||||
* @param array $options User Options
|
||||
* @param array $defaultOptions Default Options
|
||||
* @return array Merged array of user and default/required options
|
||||
*/
|
||||
protected function _prepareOptions($method, array $options, array $defaultOptions)
|
||||
{
|
||||
$options['method'] = (string) $method;
|
||||
$options['api_key'] = $this->apiKey;
|
||||
|
||||
return array_merge($defaultOptions, $options);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Throws an exception if and only if any user options are invalid
|
||||
*
|
||||
* @param array $options User options
|
||||
* @param array $validOptions Valid options
|
||||
* @return void
|
||||
* @throws Zend_Service_Exception
|
||||
*/
|
||||
protected function _compareOptions(array $options, array $validOptions)
|
||||
{
|
||||
$difference = array_diff(array_keys($options), $validOptions);
|
||||
if ($difference) {
|
||||
/**
|
||||
* @see Zend_Service_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Exception.php';
|
||||
throw new Zend_Service_Exception('The following parameters are invalid: ' . implode(',', $difference));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
76
libs/Zend/Service/Flickr/Image.php
Normal file
76
libs/Zend/Service/Flickr/Image.php
Normal file
@ -0,0 +1,76 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Flickr
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: Image.php 8064 2008-02-16 10:58:39Z thomas $
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Flickr
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Flickr_Image
|
||||
{
|
||||
/**
|
||||
* The URI of the image
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $uri;
|
||||
|
||||
/**
|
||||
* The URI for linking to the photo on Flickr
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $clickUri;
|
||||
|
||||
/**
|
||||
* The height of the image in pixels
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $height;
|
||||
|
||||
/**
|
||||
* The width of the image in pixels
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $width;
|
||||
|
||||
/**
|
||||
* Parse given Flickr Image element
|
||||
*
|
||||
* @param DOMElement $image
|
||||
* @return void
|
||||
*/
|
||||
public function __construct(DOMElement $image)
|
||||
{
|
||||
$this->uri = (string) $image->getAttribute('source');
|
||||
$this->clickUri = (string) $image->getAttribute('url');
|
||||
$this->height = (int) $image->getAttribute('height');
|
||||
$this->width = (int) $image->getAttribute('width');
|
||||
}
|
||||
}
|
||||
|
195
libs/Zend/Service/Flickr/Result.php
Normal file
195
libs/Zend/Service/Flickr/Result.php
Normal file
@ -0,0 +1,195 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Flickr
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: Result.php 8064 2008-02-16 10:58:39Z thomas $
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Flickr
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Flickr_Result
|
||||
{
|
||||
/**
|
||||
* The photo's Flickr ID.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $id;
|
||||
|
||||
/**
|
||||
* The photo owner's NSID.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $owner;
|
||||
|
||||
/**
|
||||
* A key used in URI construction.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $secret;
|
||||
|
||||
/**
|
||||
* The servername to use for URI construction.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $server;
|
||||
|
||||
/**
|
||||
* The photo's title.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $title;
|
||||
|
||||
/**
|
||||
* Whether the photo is public.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $ispublic;
|
||||
|
||||
/**
|
||||
* Whether the photo is visible to you because you are a friend of the owner.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $isfriend;
|
||||
|
||||
/**
|
||||
* Whether the photo is visible to you because you are family of the owner.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $isfamily;
|
||||
|
||||
/**
|
||||
* The license the photo is available under.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $license;
|
||||
|
||||
/**
|
||||
* The date the photo was uploaded.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $dateupload;
|
||||
|
||||
/**
|
||||
* The date the photo was taken.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $datetaken;
|
||||
|
||||
/**
|
||||
* The screenname of the owner.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $ownername;
|
||||
|
||||
/**
|
||||
* The server used in assembling icon URLs.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $iconserver;
|
||||
|
||||
/**
|
||||
* A 75x75 pixel square thumbnail of the image.
|
||||
*
|
||||
* @var Zend_Service_Flickr_Image
|
||||
*/
|
||||
public $Square;
|
||||
|
||||
/**
|
||||
* A 100 pixel thumbnail of the image.
|
||||
*
|
||||
* @var Zend_Service_Flickr_Image
|
||||
*/
|
||||
public $Thumbnail;
|
||||
|
||||
/**
|
||||
* A 240 pixel version of the image.
|
||||
*
|
||||
* @var Zend_Service_Flickr_Image
|
||||
*/
|
||||
public $Small;
|
||||
|
||||
/**
|
||||
* A 500 pixel version of the image.
|
||||
*
|
||||
* @var Zend_Service_Flickr_Image
|
||||
*/
|
||||
public $Medium;
|
||||
|
||||
/**
|
||||
* A 640 pixel version of the image.
|
||||
*
|
||||
* @var Zend_Service_Flickr_Image
|
||||
*/
|
||||
public $Large;
|
||||
|
||||
/**
|
||||
* The original image.
|
||||
*
|
||||
* @var Zend_Service_Flickr_Image
|
||||
*/
|
||||
public $Original;
|
||||
|
||||
/**
|
||||
* Original Zend_Service_Flickr object.
|
||||
*
|
||||
* @var Zend_Service_Flickr
|
||||
*/
|
||||
protected $_flickr;
|
||||
|
||||
/**
|
||||
* Parse the Flickr Result
|
||||
*
|
||||
* @param DOMElement $image
|
||||
* @param Zend_Service_Flickr $flickr Original Zend_Service_Flickr object with which the request was made
|
||||
* @return void
|
||||
*/
|
||||
public function __construct(DOMElement $image, Zend_Service_Flickr $flickr)
|
||||
{
|
||||
$xpath = new DOMXPath($image->ownerDocument);
|
||||
|
||||
foreach ($xpath->query('./@*', $image) as $property) {
|
||||
$this->{$property->name} = (string) $property->value;
|
||||
}
|
||||
|
||||
$this->_flickr = $flickr;
|
||||
|
||||
foreach ($this->_flickr->getImageDetails($this->id) as $k => $v) {
|
||||
$this->$k = $v;
|
||||
}
|
||||
}
|
||||
}
|
188
libs/Zend/Service/Flickr/ResultSet.php
Normal file
188
libs/Zend/Service/Flickr/ResultSet.php
Normal file
@ -0,0 +1,188 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Flickr
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: ResultSet.php 8064 2008-02-16 10:58:39Z thomas $
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @see Zend_Service_Flickr_Result
|
||||
*/
|
||||
require_once 'Zend/Service/Flickr/Result.php';
|
||||
|
||||
|
||||
/**
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Flickr
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Flickr_ResultSet implements SeekableIterator
|
||||
{
|
||||
/**
|
||||
* Total number of available results
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
public $totalResultsAvailable;
|
||||
|
||||
/**
|
||||
* Number of results in this result set
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
public $totalResultsReturned;
|
||||
|
||||
/**
|
||||
* The offset of this result set in the total set of available results
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
public $firstResultPosition;
|
||||
|
||||
/**
|
||||
* Results storage
|
||||
*
|
||||
* @var DOMNodeList
|
||||
*/
|
||||
protected $_results = null;
|
||||
|
||||
/**
|
||||
* Reference to Zend_Service_Flickr object with which the request was made
|
||||
*
|
||||
* @var Zend_Service_Flickr
|
||||
*/
|
||||
private $_flickr;
|
||||
|
||||
/**
|
||||
* Current index for the Iterator
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
private $_currentIndex = 0;
|
||||
|
||||
/**
|
||||
* Parse the Flickr Result Set
|
||||
*
|
||||
* @param DOMDocument $dom
|
||||
* @param Zend_Service_Flickr $flickr
|
||||
* @return void
|
||||
*/
|
||||
public function __construct(DOMDocument $dom, Zend_Service_Flickr $flickr)
|
||||
{
|
||||
$this->_flickr = $flickr;
|
||||
|
||||
$xpath = new DOMXPath($dom);
|
||||
|
||||
$photos = $xpath->query('//photos')->item(0);
|
||||
|
||||
$page = $photos->getAttribute('page');
|
||||
$pages = $photos->getAttribute('pages');
|
||||
$perPage = $photos->getAttribute('perpage');
|
||||
$total = $photos->getAttribute('total');
|
||||
|
||||
$this->totalResultsReturned = ($page == $pages) ? ($total - ($page - 1) * $perPage) : (int) $perPage;
|
||||
$this->firstResultPosition = ($page - 1) * $perPage + 1;
|
||||
$this->totalResultsAvailable = (int) $total;
|
||||
|
||||
if ($total > 0) {
|
||||
$this->_results = $xpath->query('//photo');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Total Number of results returned
|
||||
*
|
||||
* @return int Total number of results returned
|
||||
*/
|
||||
public function totalResults()
|
||||
{
|
||||
return $this->totalResultsReturned;
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements SeekableIterator::current()
|
||||
*
|
||||
* @return Zend_Service_Flickr_Result
|
||||
*/
|
||||
public function current()
|
||||
{
|
||||
return new Zend_Service_Flickr_Result($this->_results->item($this->_currentIndex), $this->_flickr);
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements SeekableIterator::key()
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function key()
|
||||
{
|
||||
return $this->_currentIndex;
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements SeekableIterator::next()
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function next()
|
||||
{
|
||||
$this->_currentIndex += 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements SeekableIterator::rewind()
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function rewind()
|
||||
{
|
||||
$this->_currentIndex = 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements SeekableIterator::seek()
|
||||
*
|
||||
* @param int $index
|
||||
* @throws OutOfBoundsException
|
||||
* @return void
|
||||
*/
|
||||
public function seek($index)
|
||||
{
|
||||
$indexInt = (int) $index;
|
||||
if ($indexInt >= 0 && (null === $this->_results || $indexInt < $this->_results->length)) {
|
||||
$this->_currentIndex = $indexInt;
|
||||
} else {
|
||||
throw new OutOfBoundsException("Illegal index '$index'");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements SeekableIterator::valid()
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
public function valid()
|
||||
{
|
||||
return null !== $this->_results && $this->_currentIndex < $this->_results->length;
|
||||
}
|
||||
}
|
||||
|
108
libs/Zend/Service/Nirvanix.php
Normal file
108
libs/Zend/Service/Nirvanix.php
Normal file
@ -0,0 +1,108 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Nirvanix
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
|
||||
/**
|
||||
* @see Zend_Loader
|
||||
*/
|
||||
require_once 'Zend/Loader.php';
|
||||
|
||||
/**
|
||||
* @see Zend_Http_Client
|
||||
*/
|
||||
require_once 'Zend/Http/Client.php';
|
||||
|
||||
/**
|
||||
* This class allows Nirvanix authentication credentials to be specified
|
||||
* in one place and provides a factory for returning convenience wrappers
|
||||
* around the Nirvanix web service namespaces.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Nirvanix
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Nirvanix
|
||||
{
|
||||
/**
|
||||
* Options to pass to namespace proxies
|
||||
* @param array
|
||||
*/
|
||||
protected $_options;
|
||||
|
||||
/**
|
||||
* Class constructor. Authenticates with Nirvanix to receive a
|
||||
* sessionToken, which is then passed to each future request.
|
||||
*
|
||||
* @param array $authParams Authentication POST parameters. This
|
||||
* should have keys "username", "password",
|
||||
* and "appKey".
|
||||
* @param array $options Options to pass to namespace proxies
|
||||
*/
|
||||
public function __construct($authParams, $options = array())
|
||||
{
|
||||
// merge options with default options
|
||||
$defaultOptions = array('defaults' => array(),
|
||||
'httpClient' => new Zend_Http_Client(),
|
||||
'host' => 'http://services.nirvanix.com');
|
||||
$this->_options = array_merge($defaultOptions, $options);
|
||||
|
||||
// login and save sessionToken to default POST params
|
||||
$resp = $this->getService('Authentication')->login($authParams);
|
||||
$this->_options['defaults']['sessionToken'] = (string)$resp->SessionToken;
|
||||
}
|
||||
|
||||
/**
|
||||
* Nirvanix divides its service into namespaces, with each namespace
|
||||
* providing different functionality. This is a factory method that
|
||||
* returns a preconfigured Zend_Service_Nirvanix_Namespace_Base proxy.
|
||||
*
|
||||
* @param string $namespace Name of the namespace
|
||||
* @return Zend_Service_Nirvanix_Namespace_Base
|
||||
*/
|
||||
public function getService($namespace, $options = array())
|
||||
{
|
||||
switch ($namespace) {
|
||||
case 'IMFS':
|
||||
$class = 'Zend_Service_Nirvanix_Namespace_Imfs';
|
||||
break;
|
||||
default:
|
||||
$class = 'Zend_Service_Nirvanix_Namespace_Base';
|
||||
}
|
||||
|
||||
$options['namespace'] = ucfirst($namespace);
|
||||
$options = array_merge($this->_options, $options);
|
||||
|
||||
Zend_Loader::loadClass($class);
|
||||
return new $class($options);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the configured options.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getOptions()
|
||||
{
|
||||
return $this->_options;
|
||||
}
|
||||
|
||||
}
|
35
libs/Zend/Service/Nirvanix/Exception.php
Normal file
35
libs/Zend/Service/Nirvanix/Exception.php
Normal file
@ -0,0 +1,35 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Nirvanix
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
|
||||
/**
|
||||
* @see Zend_Exception
|
||||
*/
|
||||
require_once 'Zend/Exception.php';
|
||||
|
||||
/**
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Nirvanix
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Nirvanix_Exception extends Zend_Exception
|
||||
{}
|
171
libs/Zend/Service/Nirvanix/Namespace/Base.php
Normal file
171
libs/Zend/Service/Nirvanix/Namespace/Base.php
Normal file
@ -0,0 +1,171 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Nirvanix
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
|
||||
/**
|
||||
* @see Zend_Http_Client
|
||||
*/
|
||||
require_once 'Zend/Http/Client.php';
|
||||
|
||||
/**
|
||||
* @see Zend_Service_Nirvanix_Response
|
||||
*/
|
||||
require_once 'Zend/Service/Nirvanix/Response.php';
|
||||
|
||||
/**
|
||||
* The Nirvanix web services are split into namespaces. This is a proxy class
|
||||
* representing one namespace. It allows calls to the namespace to be made by
|
||||
* PHP object calls rather than by having to construct HTTP client requests.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Nirvanix
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Nirvanix_Namespace_Base
|
||||
{
|
||||
/**
|
||||
* HTTP client instance that will be used to make calls to
|
||||
* the Nirvanix web services.
|
||||
* @var Zend_Http_Client
|
||||
*/
|
||||
protected $_httpClient;
|
||||
|
||||
/**
|
||||
* Host to use for calls to this Nirvanix namespace. It is possible
|
||||
* that the user will wish to use different hosts for different namespaces.
|
||||
* @var string
|
||||
*/
|
||||
protected $_host = 'http://services.nirvanix.com';
|
||||
|
||||
/**
|
||||
* Name of this namespace as used in the URL.
|
||||
* @var string
|
||||
*/
|
||||
protected $_namespace = '';
|
||||
|
||||
/**
|
||||
* Defaults for POST parameters. When a request to the service is to be
|
||||
* made, the POST parameters are merged into these. This is a convenience
|
||||
* feature so parameters that are repeatedly required like sessionToken
|
||||
* do not need to be supplied again and again by the user.
|
||||
*
|
||||
* @param array
|
||||
*/
|
||||
protected $_defaults = array();
|
||||
|
||||
/**
|
||||
* Class constructor.
|
||||
*
|
||||
* @param $options array Options and dependency injection
|
||||
*/
|
||||
public function __construct($options = array())
|
||||
{
|
||||
if (isset($options['baseUrl'])) {
|
||||
$this->_host = $options['baseUrl'];
|
||||
}
|
||||
|
||||
if (isset($options['namespace'])) {
|
||||
$this->_namespace = $options['namespace'];
|
||||
}
|
||||
|
||||
if (isset($options['defaults'])) {
|
||||
$this->_defaults = $options['defaults'];
|
||||
}
|
||||
|
||||
if (! isset($options['httpClient'])) {
|
||||
$options['httpClient'] = new Zend_Http_Client();
|
||||
}
|
||||
$this->_httpClient = $options['httpClient'];
|
||||
}
|
||||
|
||||
/**
|
||||
* When a method call is made against this proxy, convert it to
|
||||
* an HTTP request to make against the Nirvanix REST service.
|
||||
*
|
||||
* $imfs->DeleteFiles(array('filePath' => 'foo'));
|
||||
*
|
||||
* Assuming this object was proxying the IMFS namespace, the
|
||||
* method call above would call the DeleteFiles command. The
|
||||
* POST parameters would be filePath, merged with the
|
||||
* $this->_defaults (containing the sessionToken).
|
||||
*
|
||||
* @param string $methodName Name of the command to call
|
||||
* on this namespace.
|
||||
* @param array $args Only the first is used and it must be
|
||||
* an array. It contains the POST params.
|
||||
*
|
||||
* @return Zend_Service_Nirvanix_Response
|
||||
*/
|
||||
public function __call($methodName, $args)
|
||||
{
|
||||
$uri = $this->_makeUri($methodName);
|
||||
$this->_httpClient->setUri($uri);
|
||||
|
||||
if (!isset($args[0]) || !is_array($args[0])) {
|
||||
$args[0] = array();
|
||||
}
|
||||
|
||||
$params = array_merge($this->_defaults, $args[0]);
|
||||
$this->_httpClient->resetParameters();
|
||||
$this->_httpClient->setParameterPost($params);
|
||||
|
||||
$httpResponse = $this->_httpClient->request(Zend_Http_Client::POST);
|
||||
return $this->_wrapResponse($httpResponse);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the HTTP client used for this namespace. This is useful
|
||||
* for inspecting the last request or directly interacting with the
|
||||
* HTTP client.
|
||||
*
|
||||
* @return Zend_Http_Client
|
||||
*/
|
||||
public function getHttpClient()
|
||||
{
|
||||
return $this->_httpClient;
|
||||
}
|
||||
|
||||
/**
|
||||
* Make a complete URI from an RPC method name. All Nirvanix REST
|
||||
* service URIs use the same format.
|
||||
*
|
||||
* @param string $methodName RPC method name
|
||||
* @return string
|
||||
*/
|
||||
protected function _makeUri($methodName)
|
||||
{
|
||||
$methodName = ucfirst($methodName);
|
||||
return "{$this->_host}/ws/{$this->_namespace}/{$methodName}.ashx";
|
||||
}
|
||||
|
||||
/**
|
||||
* All Nirvanix REST service calls return an XML payload. This method
|
||||
* makes a Zend_Service_Nirvanix_Response from that XML payload.
|
||||
*
|
||||
* @param Zend_Http_Response $httpResponse Raw response from Nirvanix
|
||||
* @return Zend_Service_Nirvanix_Response Wrapped response
|
||||
*/
|
||||
protected function _wrapResponse($httpResponse)
|
||||
{
|
||||
return new Zend_Service_Nirvanix_Response($httpResponse->getBody());
|
||||
}
|
||||
}
|
104
libs/Zend/Service/Nirvanix/Namespace/Imfs.php
Normal file
104
libs/Zend/Service/Nirvanix/Namespace/Imfs.php
Normal file
@ -0,0 +1,104 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Nirvanix
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
|
||||
/**
|
||||
* @see Zend_Service_Nirvanix_Namespace_Base
|
||||
*/
|
||||
require_once 'Zend/Service/Nirvanix/Namespace/Base.php';
|
||||
|
||||
/**
|
||||
* Namespace proxy with additional convenience methods for the IMFS namespace.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Nirvanix
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Nirvanix_Namespace_Imfs extends Zend_Service_Nirvanix_Namespace_Base
|
||||
{
|
||||
/**
|
||||
* Convenience function to get the contents of a file on
|
||||
* the Nirvanix IMFS. Analog to PHP's file_get_contents().
|
||||
*
|
||||
* @param string $filePath Remote path and filename
|
||||
* @param integer $expiration Number of seconds that Nirvanix
|
||||
* make the file available for download.
|
||||
* @return string Contents of file
|
||||
*/
|
||||
public function getContents($filePath, $expiration = 3600)
|
||||
{
|
||||
// get url to download the file
|
||||
$params = array('filePath' => $filePath,
|
||||
'expiration' => $expiration);
|
||||
$resp = $this->getOptimalUrls($params);
|
||||
$url = (string)$resp->Download->DownloadURL;
|
||||
|
||||
// download the file
|
||||
$this->_httpClient->resetParameters();
|
||||
$this->_httpClient->setUri($url);
|
||||
$resp = $this->_httpClient->request(Zend_Http_Client::GET);
|
||||
|
||||
return $resp->getBody();
|
||||
}
|
||||
|
||||
/**
|
||||
* Convenience function to put the contents of a string into
|
||||
* the Nirvanix IMFS. Analog to PHP's file_put_contents().
|
||||
*
|
||||
* @param string $filePath Remote path and filename
|
||||
* @param integer $data Data to store in the file
|
||||
* @param string $mimeType Mime type of data
|
||||
* @return Zend_Service_Nirvanix_Response
|
||||
*/
|
||||
public function putContents($filePath, $data, $mimeType = null)
|
||||
{
|
||||
// get storage node for upload
|
||||
$params = array('sizeBytes' => strlen($data));
|
||||
$resp = $this->getStorageNode($params);
|
||||
$host = (string)$resp->GetStorageNode->UploadHost;
|
||||
$uploadToken = (string)$resp->GetStorageNode->UploadToken;
|
||||
|
||||
// http upload data into remote file
|
||||
$this->_httpClient->resetParameters();
|
||||
$this->_httpClient->setUri("http://{$host}/Upload.ashx");
|
||||
$this->_httpClient->setParameterPost('uploadToken', $uploadToken);
|
||||
$this->_httpClient->setParameterPost('destFolderPath', dirname($filePath));
|
||||
$this->_httpClient->setFileUpload(basename($filePath), 'uploadFile', $data, $mimeType);
|
||||
$response = $this->_httpClient->request(Zend_Http_Client::POST);
|
||||
|
||||
return new Zend_Service_Nirvanix_Response($response->getBody());
|
||||
}
|
||||
|
||||
/**
|
||||
* Convenience function to remove a file from the Nirvanix IMFS.
|
||||
* Analog to PHP's unlink().
|
||||
*
|
||||
* @param string $filePath Remove path and filename
|
||||
* @return Zend_Service_Nirvanix_Response
|
||||
*/
|
||||
public function unlink($filePath)
|
||||
{
|
||||
$params = array('filePath' => $filePath);
|
||||
return $this->deleteFiles($params);
|
||||
}
|
||||
|
||||
}
|
122
libs/Zend/Service/Nirvanix/Response.php
Normal file
122
libs/Zend/Service/Nirvanix/Response.php
Normal file
@ -0,0 +1,122 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Nirvanix
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
|
||||
/**
|
||||
* This class decorates a SimpleXMLElement parsed from a Nirvanix web service
|
||||
* response. It is primarily exists to provide a convenience feature that
|
||||
* throws an exception when <ResponseCode> contains an error.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Nirvanix
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Nirvanix_Response
|
||||
{
|
||||
/**
|
||||
* SimpleXMLElement parsed from Nirvanix web service response.
|
||||
*
|
||||
* @var SimpleXMLElement
|
||||
*/
|
||||
protected $_sxml;
|
||||
|
||||
/**
|
||||
* Class constructor. Parse the XML response from a Nirvanix method
|
||||
* call into a decorated SimpleXMLElement element.
|
||||
*
|
||||
* @param string $xml XML response string from Nirvanix
|
||||
* @throws Zend_Service_Nirvanix_Exception
|
||||
*/
|
||||
public function __construct($xml)
|
||||
{
|
||||
$this->_sxml = @simplexml_load_string($xml);
|
||||
|
||||
if (! $this->_sxml instanceof SimpleXMLElement) {
|
||||
$this->_throwException("XML could not be parsed from response: $xml");
|
||||
}
|
||||
|
||||
$name = $this->_sxml->getName();
|
||||
if ($name != 'Response') {
|
||||
$this->_throwException("Expected XML element Response, got $name");
|
||||
}
|
||||
|
||||
$code = (int)$this->_sxml->ResponseCode;
|
||||
if ($code != 0) {
|
||||
$msg = (string)$this->_sxml->ErrorMessage;
|
||||
$this->_throwException($msg, $code);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the SimpleXMLElement representing this response
|
||||
* for direct access.
|
||||
*
|
||||
* @return SimpleXMLElement
|
||||
*/
|
||||
public function getSxml()
|
||||
{
|
||||
return $this->_sxml;
|
||||
}
|
||||
|
||||
/**
|
||||
* Delegate undefined properties to the decorated SimpleXMLElement.
|
||||
*
|
||||
* @param string $offset Undefined property name
|
||||
* @return mixed
|
||||
*/
|
||||
public function __get($offset)
|
||||
{
|
||||
return $this->_sxml->$offset;
|
||||
}
|
||||
|
||||
/**
|
||||
* Delegate undefined methods to the decorated SimpleXMLElement.
|
||||
*
|
||||
* @param string $offset Underfined method name
|
||||
* @param array $args Method arguments
|
||||
* @return mixed
|
||||
*/
|
||||
public function __call($method, $args)
|
||||
{
|
||||
return call_user_func_array(array($this->_sxml, $method), $args);
|
||||
}
|
||||
|
||||
/**
|
||||
* Throw an exception. This method exists to only contain the
|
||||
* lazy-require() of the exception class.
|
||||
*
|
||||
* @param string $message Error message
|
||||
* @param integer $code Error code
|
||||
* @throws Zend_Service_Nirvanix_Exception
|
||||
* @return void
|
||||
*/
|
||||
protected function _throwException($message, $code = null)
|
||||
{
|
||||
/**
|
||||
* @see Zend_Service_Nirvanix_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Nirvanix/Exception.php';
|
||||
|
||||
throw new Zend_Service_Nirvanix_Exception($message, $code);
|
||||
}
|
||||
|
||||
}
|
506
libs/Zend/Service/ReCaptcha.php
Normal file
506
libs/Zend/Service/ReCaptcha.php
Normal file
@ -0,0 +1,506 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage ReCaptcha
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
|
||||
/** @see Zend_Service_Abstract */
|
||||
require_once 'Zend/Service/Abstract.php';
|
||||
|
||||
/** @see Zend_Json */
|
||||
require_once 'Zend/Json.php';
|
||||
|
||||
/** @see Zend_Service_ReCaptcha_Response */
|
||||
require_once 'Zend/Service/ReCaptcha/Response.php';
|
||||
|
||||
/**
|
||||
* Zend_Service_ReCaptcha
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage ReCaptcha
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id$
|
||||
*/
|
||||
class Zend_Service_ReCaptcha extends Zend_Service_Abstract
|
||||
{
|
||||
/**
|
||||
* URI to the regular API
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
const API_SERVER = 'http://api.recaptcha.net';
|
||||
|
||||
/**
|
||||
* URI to the secure API
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
const API_SECURE_SERVER = 'https://api-secure.recaptcha.net';
|
||||
|
||||
/**
|
||||
* URI to the verify server
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
const VERIFY_SERVER = 'http://api-verify.recaptcha.net/verify';
|
||||
|
||||
/**
|
||||
* Public key used when displaying the captcha
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $_publicKey = null;
|
||||
|
||||
/**
|
||||
* Private key used when verifying user input
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $_privateKey = null;
|
||||
|
||||
/**
|
||||
* Ip address used when verifying user input
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $_ip = null;
|
||||
|
||||
/**
|
||||
* Parameters for the object
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $_params = array(
|
||||
'ssl' => false, /* Use SSL or not when generating the recaptcha */
|
||||
'error' => null, /* The error message to display in the recaptcha */
|
||||
'xhtml' => false /* Enable XHTML output (this will not be XHTML Strict
|
||||
compliant since the IFRAME is necessary when
|
||||
Javascript is disabled) */
|
||||
);
|
||||
|
||||
/**
|
||||
* Options for tailoring reCaptcha
|
||||
*
|
||||
* See the different options on http://recaptcha.net/apidocs/captcha/client.html
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $_options = array(
|
||||
'theme' => 'red',
|
||||
'lang' => 'en',
|
||||
);
|
||||
|
||||
/**
|
||||
* Response from the verify server
|
||||
*
|
||||
* @var Zend_Service_ReCaptcha_Response
|
||||
*/
|
||||
protected $_response = null;
|
||||
|
||||
/**
|
||||
* Class constructor
|
||||
*
|
||||
* @param string $publicKey
|
||||
* @param string $privateKey
|
||||
* @param array $params
|
||||
* @param array $options
|
||||
* @param string $ip
|
||||
* @param array|Zend_Config $params
|
||||
*/
|
||||
public function __construct($publicKey = null, $privateKey = null,
|
||||
$params = null, $options = null, $ip = null)
|
||||
{
|
||||
if ($publicKey !== null) {
|
||||
$this->setPublicKey($publicKey);
|
||||
}
|
||||
|
||||
if ($privateKey !== null) {
|
||||
$this->setPrivateKey($privateKey);
|
||||
}
|
||||
|
||||
if ($ip !== null) {
|
||||
$this->setIp($ip);
|
||||
} else if (isset($_SERVER['REMOTE_ADDR'])) {
|
||||
$this->setIp($_SERVER['REMOTE_ADDR']);
|
||||
}
|
||||
|
||||
if ($params !== null) {
|
||||
$this->setParams($params);
|
||||
}
|
||||
|
||||
if ($options !== null) {
|
||||
$this->setOptions($options);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Serialize as string
|
||||
*
|
||||
* When the instance is used as a string it will display the recaptcha.
|
||||
* Since we can't throw exceptions within this method we will trigger
|
||||
* a user warning instead.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function __toString()
|
||||
{
|
||||
try {
|
||||
$return = $this->getHtml();
|
||||
} catch (Exception $e) {
|
||||
$return = '';
|
||||
trigger_error($e->getMessage(), E_USER_WARNING);
|
||||
}
|
||||
|
||||
return $return;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the ip property
|
||||
*
|
||||
* @param string $ip
|
||||
* @return Zend_Service_ReCaptcha
|
||||
*/
|
||||
public function setIp($ip)
|
||||
{
|
||||
$this->_ip = $ip;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the ip property
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getIp()
|
||||
{
|
||||
return $this->_ip;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set a single parameter
|
||||
*
|
||||
* @param string $key
|
||||
* @param string $value
|
||||
* @return Zend_Service_ReCaptcha
|
||||
*/
|
||||
public function setParam($key, $value)
|
||||
{
|
||||
$this->_params[$key] = $value;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set parameters
|
||||
*
|
||||
* @param array|Zend_Config $params
|
||||
* @return Zend_Service_ReCaptcha
|
||||
* @throws Zend_Service_ReCaptcha_Exception
|
||||
*/
|
||||
public function setParams($params)
|
||||
{
|
||||
if ($params instanceof Zend_Config) {
|
||||
$params = $params->toArray();
|
||||
}
|
||||
|
||||
if (is_array($params)) {
|
||||
foreach ($params as $k => $v) {
|
||||
$this->setParam($k, $v);
|
||||
}
|
||||
} else {
|
||||
/** @see Zend_Service_ReCaptcha_Exception */
|
||||
require_once 'Zend/Service/ReCaptcha/Exception.php';
|
||||
|
||||
throw new Zend_Service_ReCaptcha_Exception(
|
||||
'Expected array or Zend_Config object'
|
||||
);
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the parameter array
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getParams()
|
||||
{
|
||||
return $this->_params;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a single parameter
|
||||
*
|
||||
* @param string $key
|
||||
* @return mixed
|
||||
*/
|
||||
public function getParam($key)
|
||||
{
|
||||
return $this->_params[$key];
|
||||
}
|
||||
|
||||
/**
|
||||
* Set a single option
|
||||
*
|
||||
* @param string $key
|
||||
* @param string $value
|
||||
* @return Zend_Service_ReCaptcha
|
||||
*/
|
||||
public function setOption($key, $value)
|
||||
{
|
||||
$this->_options[$key] = $value;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set options
|
||||
*
|
||||
* @param array|Zend_Config $options
|
||||
* @return Zend_Service_ReCaptcha
|
||||
* @throws Zend_Service_ReCaptcha_Exception
|
||||
*/
|
||||
public function setOptions($options)
|
||||
{
|
||||
if ($options instanceof Zend_Config) {
|
||||
$options = $options->toArray();
|
||||
}
|
||||
|
||||
if (is_array($options)) {
|
||||
foreach ($options as $k => $v) {
|
||||
$this->setOption($k, $v);
|
||||
}
|
||||
} else {
|
||||
/** @see Zend_Service_ReCaptcha_Exception */
|
||||
require_once 'Zend/Service/ReCaptcha/Exception.php';
|
||||
|
||||
throw new Zend_Service_ReCaptcha_Exception(
|
||||
'Expected array or Zend_Config object'
|
||||
);
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the options array
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getOptions()
|
||||
{
|
||||
return $this->_options;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a single option
|
||||
*
|
||||
* @param string $key
|
||||
* @return mixed
|
||||
*/
|
||||
public function getOption($key)
|
||||
{
|
||||
return $this->_options[$key];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the public key
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getPublicKey()
|
||||
{
|
||||
return $this->_publicKey;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the public key
|
||||
*
|
||||
* @param string $publicKey
|
||||
* @return Zend_Service_ReCaptcha
|
||||
*/
|
||||
public function setPublicKey($publicKey)
|
||||
{
|
||||
$this->_publicKey = $publicKey;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the private key
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getPrivateKey()
|
||||
{
|
||||
return $this->_privateKey;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the private key
|
||||
*
|
||||
* @param string $privateKey
|
||||
* @return Zend_Service_ReCaptcha
|
||||
*/
|
||||
public function setPrivateKey($privateKey)
|
||||
{
|
||||
$this->_privateKey = $privateKey;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the HTML code for the captcha
|
||||
*
|
||||
* This method uses the public key to fetch a recaptcha form.
|
||||
*
|
||||
* @return string
|
||||
* @throws Zend_Service_ReCaptcha_Exception
|
||||
*/
|
||||
public function getHtml()
|
||||
{
|
||||
if ($this->_publicKey === null) {
|
||||
/** @see Zend_Service_ReCaptcha_Exception */
|
||||
require_once 'Zend/Service/ReCaptcha/Exception.php';
|
||||
|
||||
throw new Zend_Service_ReCaptcha_Exception('Missing public key');
|
||||
}
|
||||
|
||||
$host = self::API_SERVER;
|
||||
|
||||
if ($this->_params['ssl'] === true) {
|
||||
$host = self::API_SECURE_SERVER;
|
||||
}
|
||||
|
||||
$htmlBreak = '<br>';
|
||||
$htmlInputClosing = '>';
|
||||
|
||||
if ($this->_params['xhtml'] === true) {
|
||||
$htmlBreak = '<br />';
|
||||
$htmlInputClosing = '/>';
|
||||
}
|
||||
|
||||
$errorPart = '';
|
||||
|
||||
if (!empty($this->_params['error'])) {
|
||||
$errorPart = '&error=' . urlencode($this->_params['error']);
|
||||
}
|
||||
|
||||
$reCaptchaOptions = '';
|
||||
|
||||
if (!empty($this->_options)) {
|
||||
$encoded = Zend_Json::encode($this->_options);
|
||||
$reCaptchaOptions = <<<SCRIPT
|
||||
<script type="text/javascript">
|
||||
var RecaptchaOptions = {$encoded};
|
||||
</script>
|
||||
SCRIPT;
|
||||
}
|
||||
|
||||
$return = $reCaptchaOptions;
|
||||
$return .= <<<HTML
|
||||
<script type="text/javascript"
|
||||
src="{$host}/challenge?k={$this->_publicKey}{$errorPart}">
|
||||
</script>
|
||||
HTML;
|
||||
$return .= <<<HTML
|
||||
<noscript>
|
||||
<iframe src="{$host}/noscript?k={$this->_publicKey}{$errorPart}"
|
||||
height="300" width="500" frameborder="0"></iframe>{$htmlBreak}
|
||||
<textarea name="recaptcha_challenge_field" rows="3" cols="40">
|
||||
</textarea>
|
||||
<input type="hidden" name="recaptcha_response_field"
|
||||
value="manual_challenge"{$htmlInputClosing}
|
||||
</noscript>
|
||||
HTML;
|
||||
|
||||
return $return;
|
||||
}
|
||||
|
||||
/**
|
||||
* Post a solution to the verify server
|
||||
*
|
||||
* @param string $challengeField
|
||||
* @param string $responseField
|
||||
* @return Zend_Http_Response
|
||||
* @throws Zend_Service_ReCaptcha_Exception
|
||||
*/
|
||||
protected function _post($challengeField, $responseField)
|
||||
{
|
||||
if ($this->_privateKey === null) {
|
||||
/** @see Zend_Service_ReCaptcha_Exception */
|
||||
require_once 'Zend/Service/ReCaptcha/Exception.php';
|
||||
|
||||
throw new Zend_Service_ReCaptcha_Exception('Missing private key');
|
||||
}
|
||||
|
||||
if ($this->_ip === null) {
|
||||
/** @see Zend_Service_ReCaptcha_Exception */
|
||||
require_once 'Zend/Service/ReCaptcha/Exception.php';
|
||||
|
||||
throw new Zend_Service_ReCaptcha_Exception('Missing ip address');
|
||||
}
|
||||
|
||||
if (empty($challengeField)) {
|
||||
/** @see Zend_Service_ReCaptcha_Exception */
|
||||
require_once 'Zend/Service/ReCaptcha/Exception.php';
|
||||
throw new Zend_Service_ReCaptcha_Exception('Missing challenge field');
|
||||
}
|
||||
|
||||
if (empty($responseField)) {
|
||||
/** @see Zend_Service_ReCaptcha_Exception */
|
||||
require_once 'Zend/Service/ReCaptcha/Exception.php';
|
||||
|
||||
throw new Zend_Service_ReCaptcha_Exception('Missing response field');
|
||||
}
|
||||
|
||||
/* Fetch an instance of the http client */
|
||||
$httpClient = self::getHttpClient();
|
||||
|
||||
$postParams = array('privatekey' => $this->_privateKey,
|
||||
'remoteip' => $this->_ip,
|
||||
'challenge' => $challengeField,
|
||||
'response' => $responseField);
|
||||
|
||||
/* Make the POST and return the response */
|
||||
return $httpClient->setUri(self::VERIFY_SERVER)
|
||||
->setParameterPost($postParams)
|
||||
->request(Zend_Http_Client::POST);
|
||||
}
|
||||
|
||||
/**
|
||||
* Verify the user input
|
||||
*
|
||||
* This method calls up the post method and returns a
|
||||
* Zend_Service_ReCaptcha_Response object.
|
||||
*
|
||||
* @param string $challengeField
|
||||
* @param string $responseField
|
||||
* @return Zend_Service_ReCaptcha_Response
|
||||
*/
|
||||
public function verify($challengeField, $responseField)
|
||||
{
|
||||
$response = $this->_post($challengeField, $responseField);
|
||||
|
||||
return new Zend_Service_ReCaptcha_Response(null, null, $response);
|
||||
}
|
||||
}
|
36
libs/Zend/Service/ReCaptcha/Exception.php
Normal file
36
libs/Zend/Service/ReCaptcha/Exception.php
Normal file
@ -0,0 +1,36 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage ReCaptcha
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
|
||||
/** @see Zend_Exception */
|
||||
require_once 'Zend/Exception.php';
|
||||
|
||||
/**
|
||||
* Zend_Service_ReCaptcha_Exception
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage ReCaptcha
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id$
|
||||
*/
|
||||
class Zend_Service_ReCaptcha_Exception extends Zend_Exception
|
||||
{}
|
300
libs/Zend/Service/ReCaptcha/MailHide.php
Normal file
300
libs/Zend/Service/ReCaptcha/MailHide.php
Normal file
@ -0,0 +1,300 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage ReCaptcha
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
|
||||
/** @see Zend_Service_ReCaptcha */
|
||||
require_once 'Zend/Service/ReCaptcha.php';
|
||||
|
||||
/**
|
||||
* Zend_Service_ReCaptcha_MailHide
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage ReCaptcha
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id$
|
||||
*/
|
||||
class Zend_Service_ReCaptcha_MailHide extends Zend_Service_ReCaptcha
|
||||
{
|
||||
/**#@+
|
||||
* Encryption constants
|
||||
*/
|
||||
const ENCRYPTION_MODE = MCRYPT_MODE_CBC;
|
||||
const ENCRYPTION_CIPHER = MCRYPT_RIJNDAEL_128;
|
||||
const ENCRYPTION_BLOCK_SIZE = 16;
|
||||
const ENCRYPTION_IV = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";
|
||||
/**#@-*/
|
||||
|
||||
/**
|
||||
* Url to the mailhide server
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
const MAILHIDE_SERVER = 'http://mailhide.recaptcha.net/d';
|
||||
|
||||
/**
|
||||
* The email address to protect
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $_email = null;
|
||||
|
||||
/**
|
||||
* Binary representation of the private key
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $_privateKeyPacked = null;
|
||||
|
||||
/**
|
||||
* The local part of the email
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $_emailLocalPart = null;
|
||||
|
||||
/**
|
||||
* The domain part of the email
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $_emailDomainPart = null;
|
||||
|
||||
/**
|
||||
* Local constructor
|
||||
*
|
||||
* @param string $publicKey
|
||||
* @param string $privateKey
|
||||
* @param string $email
|
||||
* @param array|Zend_Config $options
|
||||
*/
|
||||
public function __construct($publicKey = null, $privateKey = null, $email = null, $options = null)
|
||||
{
|
||||
/* Require the mcrypt extension to be loaded */
|
||||
$this->_requireMcrypt();
|
||||
|
||||
/* If options is a Zend_Config object we want to convert it to an array so we can merge it with the default options */
|
||||
if ($options instanceof Zend_Config) {
|
||||
$options = $options->toArray();
|
||||
}
|
||||
|
||||
/* Merge if needed */
|
||||
if (is_array($options)) {
|
||||
$options = array_merge($this->getDefaultOptions(), $options);
|
||||
} else {
|
||||
$options = $this->getDefaultOptions();
|
||||
}
|
||||
|
||||
parent::__construct($publicKey, $privateKey, null, $options);
|
||||
|
||||
if ($email !== null) {
|
||||
$this->setEmail($email);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* See if the mcrypt extension is available
|
||||
*
|
||||
* @throws Zend_Service_ReCaptcha_MailHide_Exception
|
||||
*/
|
||||
protected function _requireMcrypt()
|
||||
{
|
||||
if (!extension_loaded('mcrypt')) {
|
||||
/** @see Zend_Service_ReCaptcha_MailHide_Exception */
|
||||
require_once 'Zend/Service/ReCaptcha/MailHide/Exception.php';
|
||||
|
||||
throw new Zend_Service_ReCaptcha_MailHide_Exception('Use of the Zend_Service_ReCaptcha_MailHide component requires the mcrypt extension to be enabled in PHP');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Serialize as string
|
||||
*
|
||||
* When the instance is used as a string it will display the email address. Since we can't
|
||||
* throw exceptions within this method we will trigger a user warning instead.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function __toString()
|
||||
{
|
||||
try {
|
||||
$return = $this->getHtml();
|
||||
} catch (Exception $e) {
|
||||
$return = '';
|
||||
trigger_error($e->getMessage(), E_USER_WARNING);
|
||||
}
|
||||
|
||||
return $return;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the default set of parameters
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getDefaultOptions()
|
||||
{
|
||||
return array(
|
||||
'linkTitle' => 'Reveal this e-mail address',
|
||||
'linkHiddenText' => '...',
|
||||
'popupWidth' => 500,
|
||||
'popupHeight' => 300,
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Override the setPrivateKey method
|
||||
*
|
||||
* Override the parent method to store a binary representation of the private key as well.
|
||||
*
|
||||
* @param string $privateKey
|
||||
* @return Zend_Service_ReCaptcha_MailHide
|
||||
*/
|
||||
public function setPrivateKey($privateKey)
|
||||
{
|
||||
parent::setPrivateKey($privateKey);
|
||||
|
||||
/* Pack the private key into a binary string */
|
||||
$this->_privateKeyPacked = pack('H*', $this->_privateKey);
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the email property
|
||||
*
|
||||
* This method will set the email property along with the local and domain parts
|
||||
*
|
||||
* @param string $email
|
||||
* @return Zend_Service_ReCaptcha_MailHide
|
||||
*/
|
||||
public function setEmail($email)
|
||||
{
|
||||
$this->_email = $email;
|
||||
|
||||
$emailParts = explode('@', $email, 2);
|
||||
|
||||
/* Decide on how much of the local part we want to reveal */
|
||||
if (strlen($emailParts[0]) <= 4) {
|
||||
$emailParts[0] = substr($emailParts[0], 0, 1);
|
||||
} else if (strlen($emailParts[0]) <= 6) {
|
||||
$emailParts[0] = substr($emailParts[0], 0, 3);
|
||||
} else {
|
||||
$emailParts[0] = substr($emailParts[0], 0, 4);
|
||||
}
|
||||
|
||||
$this->_emailLocalPart = $emailParts[0];
|
||||
$this->_emailDomainPart = $emailParts[1];
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the email property
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getEmail()
|
||||
{
|
||||
return $this->_email;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the local part of the email address
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getEmailLocalPart()
|
||||
{
|
||||
return $this->_emailLocalPart;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the domain part of the email address
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getEmailDomainPart()
|
||||
{
|
||||
return $this->_emailDomainPart;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the HTML code needed for the mail hide
|
||||
*
|
||||
* @param string $email
|
||||
* @return string
|
||||
* @throws Zend_Service_ReCaptcha_MailHide_Exception
|
||||
*/
|
||||
public function getHtml($email = null)
|
||||
{
|
||||
if ($email !== null) {
|
||||
$this->setEmail($email);
|
||||
} else if ($this->_email === null) {
|
||||
/** @see Zend_Service_ReCaptcha_MailHide_Exception */
|
||||
require_once 'Zend/Service/ReCaptcha/MailHide/Exception.php';
|
||||
|
||||
throw new Zend_Service_ReCaptcha_MailHide_Exception('Missing email address');
|
||||
}
|
||||
|
||||
if ($this->_publicKey === null) {
|
||||
/** @see Zend_Service_ReCaptcha_MailHide_Exception */
|
||||
require_once 'Zend/Service/ReCaptcha/MailHide/Exception.php';
|
||||
|
||||
throw new Zend_Service_ReCaptcha_MailHide_Exception('Missing public key');
|
||||
}
|
||||
|
||||
if ($this->_privateKey === null) {
|
||||
/** @see Zend_Service_ReCaptcha_MailHide_Exception */
|
||||
require_once 'Zend/Service/ReCaptcha/MailHide/Exception.php';
|
||||
|
||||
throw new Zend_Service_ReCaptcha_MailHide_Exception('Missing private key');
|
||||
}
|
||||
|
||||
/* Generate the url */
|
||||
$url = $this->_getUrl();
|
||||
|
||||
/* Genrate the HTML used to represent the email address */
|
||||
$html = htmlentities($this->_emailLocalPart) . '<a href="' . htmlentities($url) . '" onclick="window.open(\'' . htmlentities($url) . '\', \'\', \'toolbar=0,scrollbars=0,location=0,statusbar=0,menubar=0,resizable=0,width=' . $this->_options['popupWidth'] . ',height=' . $this->_options['popupHeight'] . '\'); return false;" title="' . $this->_options['linkTitle'] . '">' . $this->_options['linkHiddenText'] . '</a>@' . htmlentities($this->_emailDomainPart);
|
||||
|
||||
return $html;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the url used on the "hidden" part of the email address
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
protected function _getUrl()
|
||||
{
|
||||
/* Figure out how much we need to pad the email */
|
||||
$numPad = self::ENCRYPTION_BLOCK_SIZE - (strlen($this->_email) % self::ENCRYPTION_BLOCK_SIZE);
|
||||
|
||||
/* Pad the email */
|
||||
$emailPadded = str_pad($this->_email, strlen($this->_email) + $numPad, chr($numPad));
|
||||
|
||||
/* Encrypt the email */
|
||||
$emailEncrypted = mcrypt_encrypt(self::ENCRYPTION_CIPHER, $this->_privateKeyPacked, $emailPadded, self::ENCRYPTION_MODE, self::ENCRYPTION_IV);
|
||||
|
||||
/* Return the url */
|
||||
return self::MAILHIDE_SERVER . '?k=' . $this->_publicKey . '&c=' . strtr(base64_encode($emailEncrypted), '+/', '-_');
|
||||
}
|
||||
}
|
36
libs/Zend/Service/ReCaptcha/MailHide/Exception.php
Normal file
36
libs/Zend/Service/ReCaptcha/MailHide/Exception.php
Normal file
@ -0,0 +1,36 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage ReCaptcha
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
|
||||
/** @see Zend_Exception */
|
||||
require_once 'Zend/Exception.php';
|
||||
|
||||
/**
|
||||
* Zend_Service_ReCaptcha_MailHide_Exception
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage ReCaptcha
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id$
|
||||
*/
|
||||
class Zend_Service_ReCaptcha_MailHide_Exception extends Zend_Exception
|
||||
{}
|
159
libs/Zend/Service/ReCaptcha/Response.php
Normal file
159
libs/Zend/Service/ReCaptcha/Response.php
Normal file
@ -0,0 +1,159 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage ReCaptcha
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
|
||||
/**
|
||||
* Zend_Service_ReCaptcha_Response
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage ReCaptcha
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id$
|
||||
*/
|
||||
class Zend_Service_ReCaptcha_Response
|
||||
{
|
||||
/**
|
||||
* Status
|
||||
*
|
||||
* true if the response is valid or false otherwise
|
||||
*
|
||||
* @var boolean
|
||||
*/
|
||||
protected $_status = null;
|
||||
|
||||
/**
|
||||
* Error code
|
||||
*
|
||||
* The error code if the status is false. The different error codes can be found in the
|
||||
* recaptcha API docs.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $_errorCode = null;
|
||||
|
||||
/**
|
||||
* Class constructor used to construct a response
|
||||
*
|
||||
* @param string $status
|
||||
* @param string $errorCode
|
||||
* @param Zend_Http_Response $httpResponse If this is set the content will override $status and $errorCode
|
||||
*/
|
||||
public function __construct($status = null, $errorCode = null, Zend_Http_Response $httpResponse = null)
|
||||
{
|
||||
if ($status !== null) {
|
||||
$this->setStatus($status);
|
||||
}
|
||||
|
||||
if ($errorCode !== null) {
|
||||
$this->setErrorCode($errorCode);
|
||||
}
|
||||
|
||||
if ($httpResponse !== null) {
|
||||
$this->setFromHttpResponse($httpResponse);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the status
|
||||
*
|
||||
* @param string $status
|
||||
* @return Zend_Service_ReCaptcha_Response
|
||||
*/
|
||||
public function setStatus($status)
|
||||
{
|
||||
if ($status === 'true') {
|
||||
$this->_status = true;
|
||||
} else {
|
||||
$this->_status = false;
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the status
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
public function getStatus()
|
||||
{
|
||||
return $this->_status;
|
||||
}
|
||||
|
||||
/**
|
||||
* Alias for getStatus()
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
public function isValid()
|
||||
{
|
||||
return $this->getStatus();
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the error code
|
||||
*
|
||||
* @param string $errorCode
|
||||
* @return Zend_Service_ReCaptcha_Response
|
||||
*/
|
||||
public function setErrorCode($errorCode)
|
||||
{
|
||||
$this->_errorCode = $errorCode;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the error code
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getErrorCode()
|
||||
{
|
||||
return $this->_errorCode;
|
||||
}
|
||||
|
||||
/**
|
||||
* Populate this instance based on a Zend_Http_Response object
|
||||
*
|
||||
* @param Zend_Http_Response $response
|
||||
* @return Zend_Service_ReCaptcha_Response
|
||||
*/
|
||||
public function setFromHttpResponse(Zend_Http_Response $response)
|
||||
{
|
||||
$body = $response->getBody();
|
||||
|
||||
$parts = explode("\n", $body, 2);
|
||||
|
||||
if (count($parts) !== 2) {
|
||||
$status = 'false';
|
||||
$errorCode = '';
|
||||
} else {
|
||||
list($status, $errorCode) = $parts;
|
||||
}
|
||||
|
||||
$this->setStatus($status);
|
||||
$this->setErrorCode($errorCode);
|
||||
|
||||
return $this;
|
||||
}
|
||||
}
|
421
libs/Zend/Service/Simpy.php
Normal file
421
libs/Zend/Service/Simpy.php
Normal file
@ -0,0 +1,421 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Simpy
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: Simpy.php 10478 2008-07-26 17:29:07Z elazar $
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Simpy
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @link http://www.simpy.com/doc/api/rest/
|
||||
*/
|
||||
class Zend_Service_Simpy
|
||||
{
|
||||
/**
|
||||
* Base URI to which API methods and parameters will be appended
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $_baseUri = 'http://simpy.com';
|
||||
|
||||
/**
|
||||
* Zend_Service_Rest object
|
||||
*
|
||||
* @var Zend_Service_Rest
|
||||
*/
|
||||
protected $_rest;
|
||||
|
||||
/**
|
||||
* Constructs a new Simpy (free) REST API Client
|
||||
*
|
||||
* @param string $username Username for the Simpy user account
|
||||
* @param string $password Password for the Simpy user account
|
||||
* @return void
|
||||
*/
|
||||
public function __construct($username, $password)
|
||||
{
|
||||
/**
|
||||
* @see Zend_Service_Rest
|
||||
*/
|
||||
require_once 'Zend/Rest/Client.php';
|
||||
$this->_rest = new Zend_Rest_Client($this->_baseUri);
|
||||
$this->_rest->getHttpClient()
|
||||
->setAuth($username, $password);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sends a request to the REST API service and does initial processing
|
||||
* on the response.
|
||||
*
|
||||
* @param string $op Name of the operation for the request
|
||||
* @param string|array $query Query data for the request (optional)
|
||||
* @throws Zend_Service_Exception
|
||||
* @return DOMDocument Parsed XML response
|
||||
*/
|
||||
protected function _makeRequest($op, $query = null)
|
||||
{
|
||||
if ($query != null) {
|
||||
$query = array_diff($query, array_filter($query, 'is_null'));
|
||||
}
|
||||
|
||||
$response = $this->_rest->restGet('/simpy/api/rest/' . $op . '.do', $query);
|
||||
|
||||
if ($response->isSuccessful()) {
|
||||
$doc = new DOMDocument();
|
||||
$doc->loadXML($response->getBody());
|
||||
$xpath = new DOMXPath($doc);
|
||||
$list = $xpath->query('/status/code');
|
||||
|
||||
if ($list->length > 0) {
|
||||
$code = $list->item(0)->nodeValue;
|
||||
|
||||
if ($code != 0) {
|
||||
$list = $xpath->query('/status/message');
|
||||
$message = $list->item(0)->nodeValue;
|
||||
/**
|
||||
* @see Zend_Service_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Exception.php';
|
||||
throw new Zend_Service_Exception($message, $code);
|
||||
}
|
||||
}
|
||||
|
||||
return $doc;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see Zend_Service_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Exception.php';
|
||||
throw new Zend_Service_Exception('HTTP ' . $response->getStatus());
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a list of all tags and their counts, ordered by count in
|
||||
* decreasing order
|
||||
*
|
||||
* @param int $limit Limits the number of tags returned (optional)
|
||||
* @link http://www.simpy.com/doc/api/rest/GetTags
|
||||
* @throws Zend_Service_Exception
|
||||
* @return Zend_Service_Simpy_TagSet
|
||||
*/
|
||||
public function getTags($limit = null)
|
||||
{
|
||||
$query = array(
|
||||
'limit' => $limit
|
||||
);
|
||||
|
||||
$doc = $this->_makeRequest('GetTags', $query);
|
||||
|
||||
/**
|
||||
* @see Zend_Service_Simpy_TagSet
|
||||
*/
|
||||
require_once 'Zend/Service/Simpy/TagSet.php';
|
||||
return new Zend_Service_Simpy_TagSet($doc);
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes a tag.
|
||||
*
|
||||
* @param string $tag Tag to be removed
|
||||
* @link http://www.simpy.com/doc/api/rest/RemoveTag
|
||||
* @return Zend_Service_Simpy Provides a fluent interface
|
||||
*/
|
||||
public function removeTag($tag)
|
||||
{
|
||||
$query = array(
|
||||
'tag' => $tag
|
||||
);
|
||||
|
||||
$this->_makeRequest('RemoveTag', $query);
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Renames a tag.
|
||||
*
|
||||
* @param string $fromTag Tag to be renamed
|
||||
* @param string $toTag New tag name
|
||||
* @link http://www.simpy.com/doc/api/rest/RenameTag
|
||||
* @return Zend_Service_Simpy Provides a fluent interface
|
||||
*/
|
||||
public function renameTag($fromTag, $toTag)
|
||||
{
|
||||
$query = array(
|
||||
'fromTag' => $fromTag,
|
||||
'toTag' => $toTag
|
||||
);
|
||||
|
||||
$this->_makeRequest('RenameTag', $query);
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Merges two tags into a new tag.
|
||||
*
|
||||
* @param string $fromTag1 First tag to merge.
|
||||
* @param string $fromTag2 Second tag to merge.
|
||||
* @param string $toTag Tag to merge the two tags into.
|
||||
* @link http://www.simpy.com/doc/api/rest/MergeTags
|
||||
* @return Zend_Service_Simpy Provides a fluent interface
|
||||
*/
|
||||
public function mergeTags($fromTag1, $fromTag2, $toTag)
|
||||
{
|
||||
$query = array(
|
||||
'fromTag1' => $fromTag1,
|
||||
'fromTag2' => $fromTag2,
|
||||
'toTag' => $toTag
|
||||
);
|
||||
|
||||
$this->_makeRequest('MergeTags', $query);
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Splits a single tag into two separate tags.
|
||||
*
|
||||
* @param string $tag Tag to split
|
||||
* @param string $toTag1 First tag to split into
|
||||
* @param string $toTag2 Second tag to split into
|
||||
* @link http://www.simpy.com/doc/api/rest/SplitTag
|
||||
* @return Zend_Service_Simpy Provides a fluent interface
|
||||
*/
|
||||
public function splitTag($tag, $toTag1, $toTag2)
|
||||
{
|
||||
$query = array(
|
||||
'tag' => $tag,
|
||||
'toTag1' => $toTag1,
|
||||
'toTag2' => $toTag2
|
||||
);
|
||||
|
||||
$this->_makeRequest('SplitTag', $query);
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Performs a query on existing links and returns the results or returns all
|
||||
* links if no particular query is specified (which should be used sparingly
|
||||
* to prevent overloading Simpy servers)
|
||||
*
|
||||
* @param Zend_Service_Simpy_LinkQuery $q Query object to use (optional)
|
||||
* @return Zend_Service_Simpy_LinkSet
|
||||
*/
|
||||
public function getLinks(Zend_Service_Simpy_LinkQuery $q = null)
|
||||
{
|
||||
if ($q != null) {
|
||||
$query = array(
|
||||
'q' => $q->getQueryString(),
|
||||
'limit' => $q->getLimit(),
|
||||
'date' => $q->getDate(),
|
||||
'afterDate' => $q->getAfterDate(),
|
||||
'beforeDate' => $q->getBeforeDate()
|
||||
);
|
||||
|
||||
$doc = $this->_makeRequest('GetLinks', $query);
|
||||
} else {
|
||||
$doc = $this->_makeRequest('GetLinks');
|
||||
}
|
||||
|
||||
/**
|
||||
* @see Zend_Service_Simpy_LinkSet
|
||||
*/
|
||||
require_once 'Zend/Service/Simpy/LinkSet.php';
|
||||
return new Zend_Service_Simpy_LinkSet($doc);
|
||||
}
|
||||
|
||||
/**
|
||||
* Saves a given link.
|
||||
*
|
||||
* @param string $title Title of the page to save
|
||||
* @param string $href URL of the page to save
|
||||
* @param int $accessType ACCESSTYPE_PUBLIC or ACCESSTYPE_PRIVATE
|
||||
* @param mixed $tags String containing a comma-separated list of
|
||||
* tags or array of strings containing tags
|
||||
* (optional)
|
||||
* @param string $urlNickname Alternative custom title (optional)
|
||||
* @param string $note Free text note (optional)
|
||||
* @link Zend_Service_Simpy::ACCESSTYPE_PUBLIC
|
||||
* @link Zend_Service_Simpy::ACCESSTYPE_PRIVATE
|
||||
* @link http://www.simpy.com/doc/api/rest/SaveLink
|
||||
* @return Zend_Service_Simpy Provides a fluent interface
|
||||
*/
|
||||
public function saveLink($title, $href, $accessType, $tags = null, $urlNickname = null, $note = null)
|
||||
{
|
||||
if (is_array($tags)) {
|
||||
$tags = implode(',', $tags);
|
||||
}
|
||||
|
||||
$query = array(
|
||||
'title' => $title,
|
||||
'href' => $href,
|
||||
'accessType' => $accessType,
|
||||
'tags' => $tags,
|
||||
'urlNickname' => $urlNickname,
|
||||
'note' => $note
|
||||
);
|
||||
|
||||
$this->_makeRequest('SaveLink', $query);
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Deletes a given link.
|
||||
*
|
||||
* @param string $href URL of the bookmark to delete
|
||||
* @link http://www.simpy.com/doc/api/rest/DeleteLink
|
||||
* @return Zend_Service_Simpy Provides a fluent interface
|
||||
*/
|
||||
public function deleteLink($href)
|
||||
{
|
||||
$query = array(
|
||||
'href' => $href
|
||||
);
|
||||
|
||||
$this->_makeRequest('DeleteLink', $query);
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return a list of watchlists and their meta-data, including the number
|
||||
* of new links added to each watchlist since last login.
|
||||
*
|
||||
* @link http://www.simpy.com/doc/api/rest/GetWatchlists
|
||||
* @return Zend_Service_Simpy_WatchlistSet
|
||||
*/
|
||||
public function getWatchlists()
|
||||
{
|
||||
$doc = $this->_makeRequest('GetWatchlists');
|
||||
|
||||
/**
|
||||
* @see Zend_Service_Simpy_WatchlistSet
|
||||
*/
|
||||
require_once 'Zend/Service/Simpy/WatchlistSet.php';
|
||||
return new Zend_Service_Simpy_WatchlistSet($doc);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the meta-data for a given watchlist.
|
||||
*
|
||||
* @param int $watchlistId ID of the watchlist to retrieve
|
||||
* @link http://www.simpy.com/doc/api/rest/GetWatchlist
|
||||
* @return Zend_Service_Simpy_Watchlist
|
||||
*/
|
||||
public function getWatchlist($watchlistId)
|
||||
{
|
||||
$query = array(
|
||||
'watchlistId' => $watchlistId
|
||||
);
|
||||
|
||||
$doc = $this->_makeRequest('GetWatchlist', $query);
|
||||
|
||||
/**
|
||||
* @see Zend_Service_Simpy_Watchlist
|
||||
*/
|
||||
require_once 'Zend/Service/Simpy/Watchlist.php';
|
||||
return new Zend_Service_Simpy_Watchlist($doc->documentElement);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns all notes in reverse chronological order by add date or by
|
||||
* rank.
|
||||
*
|
||||
* @param string $q Query string formatted using Simpy search syntax
|
||||
* and search fields (optional)
|
||||
* @param int $limit Limits the number notes returned (optional)
|
||||
* @link http://www.simpy.com/doc/api/rest/GetNotes
|
||||
* @link http://www.simpy.com/simpy/FAQ.do#searchSyntax
|
||||
* @link http://www.simpy.com/simpy/FAQ.do#searchFieldsLinks
|
||||
* @return Zend_Service_Simpy_NoteSet
|
||||
*/
|
||||
public function getNotes($q = null, $limit = null)
|
||||
{
|
||||
$query = array(
|
||||
'q' => $q,
|
||||
'limit' => $limit
|
||||
);
|
||||
|
||||
$doc = $this->_makeRequest('GetNotes', $query);
|
||||
|
||||
/**
|
||||
* @see Zend_Service_Simpy_NoteSet
|
||||
*/
|
||||
require_once 'Zend/Service/Simpy/NoteSet.php';
|
||||
return new Zend_Service_Simpy_NoteSet($doc);
|
||||
}
|
||||
|
||||
/**
|
||||
* Saves a note.
|
||||
*
|
||||
* @param string $title Title of the note
|
||||
* @param mixed $tags String containing a comma-separated list of
|
||||
* tags or array of strings containing tags
|
||||
* (optional)
|
||||
* @param string $description Free-text note (optional)
|
||||
* @param int $noteId Unique identifier for an existing note to
|
||||
* update (optional)
|
||||
* @link http://www.simpy.com/doc/api/rest/SaveNote
|
||||
* @return Zend_Service_Simpy Provides a fluent interface
|
||||
*/
|
||||
public function saveNote($title, $tags = null, $description = null, $noteId = null)
|
||||
{
|
||||
if (is_array($tags)) {
|
||||
$tags = implode(',', $tags);
|
||||
}
|
||||
|
||||
$query = array(
|
||||
'title' => $title,
|
||||
'tags' => $tags,
|
||||
'description' => $description,
|
||||
'noteId' => $noteId
|
||||
);
|
||||
|
||||
$this->_makeRequest('SaveNote', $query);
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Deletes a given note.
|
||||
*
|
||||
* @param int $noteId ID of the note to delete
|
||||
* @link http://www.simpy.com/doc/api/rest/DeleteNote
|
||||
* @return Zend_Service_Simpy Provides a fluent interface
|
||||
*/
|
||||
public function deleteNote($noteId)
|
||||
{
|
||||
$query = array(
|
||||
'noteId' => $noteId
|
||||
);
|
||||
|
||||
$this->_makeRequest('DeleteNote', $query);
|
||||
|
||||
return $this;
|
||||
}
|
||||
}
|
215
libs/Zend/Service/Simpy/Link.php
Normal file
215
libs/Zend/Service/Simpy/Link.php
Normal file
@ -0,0 +1,215 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Simpy
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: Link.php 8064 2008-02-16 10:58:39Z thomas $
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Simpy
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Simpy_Link
|
||||
{
|
||||
/**
|
||||
* Private access type
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
const ACCESSTYPE_PRIVATE = '0';
|
||||
|
||||
/**
|
||||
* Public access type
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
const ACCESSTYPE_PUBLIC = '1';
|
||||
|
||||
/**
|
||||
* Access type assigned to the link
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $_accessType;
|
||||
|
||||
/**
|
||||
* URL of the link
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $_url;
|
||||
|
||||
/**
|
||||
* Date of the last modification made to the link
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $_modDate;
|
||||
|
||||
/**
|
||||
* Date the link was added
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $_addDate;
|
||||
|
||||
/**
|
||||
* Title assigned to the link
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $_title;
|
||||
|
||||
/**
|
||||
* Nickname assigned to the link
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $_nickname;
|
||||
|
||||
/**
|
||||
* Tags assigned to the link
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $_tags;
|
||||
|
||||
/**
|
||||
* Note assigned to the link
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $_note;
|
||||
|
||||
/**
|
||||
* Constructor to initialize the object with data
|
||||
*
|
||||
* @param DOMNode $node Individual <link> node from a parsed response from
|
||||
* a GetLinks operation
|
||||
* @return void
|
||||
*/
|
||||
public function __construct($node)
|
||||
{
|
||||
$this->_accessType = $node->attributes->getNamedItem('accessType')->nodeValue;
|
||||
|
||||
$doc = new DOMDocument();
|
||||
$doc->appendChild($doc->importNode($node, true));
|
||||
$xpath = new DOMXPath($doc);
|
||||
|
||||
$this->_url = $xpath->evaluate('/link/url')->item(0)->nodeValue;
|
||||
$this->_modDate = $xpath->evaluate('/link/modDate')->item(0)->nodeValue;
|
||||
$this->_addDate = $xpath->evaluate('/link/addDate')->item(0)->nodeValue;
|
||||
$this->_title = $xpath->evaluate('/link/title')->item(0)->nodeValue;
|
||||
$this->_nickname = $xpath->evaluate('/link/nickname')->item(0)->nodeValue;
|
||||
$this->_note = $xpath->evaluate('/link/note')->item(0)->nodeValue;
|
||||
|
||||
$list = $xpath->query('/link/tags/tag');
|
||||
$this->_tags = array();
|
||||
|
||||
for ($x = 0; $x < $list->length; $x++) {
|
||||
$this->_tags[$x] = $list->item($x)->nodeValue;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the access type assigned to the link
|
||||
*
|
||||
* @see ACCESSTYPE_PRIVATE
|
||||
* @see ACCESSTYPE_PUBLIC
|
||||
* @return string
|
||||
*/
|
||||
public function getAccessType()
|
||||
{
|
||||
return $this->_accessType;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the URL of the link
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getUrl()
|
||||
{
|
||||
return $this->_url;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the date of the last modification made to the link
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getModDate()
|
||||
{
|
||||
return $this->_modDate;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the date the link was added
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getAddDate()
|
||||
{
|
||||
return $this->_addDate;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the title assigned to the link
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getTitle()
|
||||
{
|
||||
return $this->_title;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the nickname assigned to the link
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getNickname()
|
||||
{
|
||||
return $this->_nickname;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the tags assigned to the link
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getTags()
|
||||
{
|
||||
return $this->_tags;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the note assigned to the link
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getNote()
|
||||
{
|
||||
return $this->_note;
|
||||
}
|
||||
}
|
200
libs/Zend/Service/Simpy/LinkQuery.php
Normal file
200
libs/Zend/Service/Simpy/LinkQuery.php
Normal file
@ -0,0 +1,200 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Simpy
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: LinkQuery.php 8064 2008-02-16 10:58:39Z thomas $
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Simpy
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Simpy_LinkQuery
|
||||
{
|
||||
/**
|
||||
* Query string for the query
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $_query = null;
|
||||
|
||||
/**
|
||||
* Maximum number of search results to return
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
protected $_limit = null;
|
||||
|
||||
/**
|
||||
* Date on which search results must have been added
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $_date = null;
|
||||
|
||||
/**
|
||||
* Date after which search results must have been added
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $_afterDate = null;
|
||||
|
||||
/**
|
||||
* Date before which search results must have been added
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $_beforeDate = null;
|
||||
|
||||
/**
|
||||
* Sets the query string for the query
|
||||
*
|
||||
* @param string $query Query string in valid Simpy syntax
|
||||
* @see http://www.simpy.com/faq#searchSyntax
|
||||
* @see http://www.simpy.com/faq#searchFieldsLinks
|
||||
* @return Zend_Service_Simpy_LinkQuery Provides a fluent interface
|
||||
*/
|
||||
public function setQueryString($query)
|
||||
{
|
||||
$this->_query = $query;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the query string set for this query
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getQueryString()
|
||||
{
|
||||
return $this->_query;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the maximum number of search results to return
|
||||
*
|
||||
* @param int $limit
|
||||
* @return Zend_Service_Simpy_LinkQuery Provides a fluent interface
|
||||
*/
|
||||
public function setLimit($limit)
|
||||
{
|
||||
$this->_limit = intval($limit);
|
||||
|
||||
if ($this->_limit == 0) {
|
||||
$this->_limit = null;
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the maximum number of search results to return
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function getLimit()
|
||||
{
|
||||
return $this->_limit;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the date on which search results must have been added, which will
|
||||
* override any existing values set using setAfterDate() and setBeforeDate()
|
||||
*
|
||||
* @param string $date
|
||||
* @see setAfterDate()
|
||||
* @see setBeforeDate()
|
||||
* @return Zend_Service_Simpy_LinkQuery Provides a fluent interface
|
||||
*/
|
||||
public function setDate($date)
|
||||
{
|
||||
$this->_date = $date;
|
||||
$this->_afterDate = null;
|
||||
$this->_beforeDate = null;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the date on which search results must have been added
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getDate()
|
||||
{
|
||||
return $this->_date;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the date after which search results must have been added, which will
|
||||
* override any existing values set using setDate()
|
||||
*
|
||||
* @param string $date
|
||||
* @see setDate()
|
||||
* @return Zend_Service_Simpy_LinkQuery Provides a fluent interface
|
||||
*/
|
||||
public function setAfterDate($date)
|
||||
{
|
||||
$this->_afterDate = $date;
|
||||
$this->_date = null;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the date after which search results must have been added
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getAfterDate()
|
||||
{
|
||||
return $this->_afterDate;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the date before which search results must have been added, which
|
||||
* will override any existing values set using setDate()
|
||||
*
|
||||
* @param string $date
|
||||
* @see setDate()
|
||||
* @return Zend_Service_Simpy_LinkQuery Provides a fluent interface
|
||||
*/
|
||||
public function setBeforeDate($date)
|
||||
{
|
||||
$this->_beforeDate = $date;
|
||||
$this->_date = null;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the date before which search results must have been added
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getBeforeDate()
|
||||
{
|
||||
return $this->_beforeDate;
|
||||
}
|
||||
}
|
83
libs/Zend/Service/Simpy/LinkSet.php
Normal file
83
libs/Zend/Service/Simpy/LinkSet.php
Normal file
@ -0,0 +1,83 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Simpy
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: LinkSet.php 8064 2008-02-16 10:58:39Z thomas $
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @see Zend_Service_Simpy_Link
|
||||
*/
|
||||
require_once 'Zend/Service/Simpy/Link.php';
|
||||
|
||||
|
||||
/**
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Simpy
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Simpy_LinkSet implements IteratorAggregate
|
||||
{
|
||||
/**
|
||||
* List of links
|
||||
*
|
||||
* @var array of Zend_Service_Simpy_Link objects
|
||||
*/
|
||||
protected $_links;
|
||||
|
||||
/**
|
||||
* Constructor to initialize the object with data
|
||||
*
|
||||
* @param DOMDocument $doc Parsed response from a GetLinks operation
|
||||
* @return void
|
||||
*/
|
||||
public function __construct(DOMDocument $doc)
|
||||
{
|
||||
$xpath = new DOMXPath($doc);
|
||||
$list = $xpath->query('//links/link');
|
||||
$this->_links = array();
|
||||
|
||||
for ($x = 0; $x < $list->length; $x++) {
|
||||
$this->_links[$x] = new Zend_Service_Simpy_Link($list->item($x));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an iterator for the link set
|
||||
*
|
||||
* @return ArrayIterator
|
||||
*/
|
||||
public function getIterator()
|
||||
{
|
||||
return new ArrayIterator($this->_links);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the number of links in the set
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function getLength()
|
||||
{
|
||||
return count($this->_links);
|
||||
}
|
||||
}
|
215
libs/Zend/Service/Simpy/Note.php
Normal file
215
libs/Zend/Service/Simpy/Note.php
Normal file
@ -0,0 +1,215 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Simpy
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: Note.php 8064 2008-02-16 10:58:39Z thomas $
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Simpy
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Simpy_Note
|
||||
{
|
||||
/**
|
||||
* Private access type
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
const ACCESSTYPE_PRIVATE = 'private';
|
||||
|
||||
/**
|
||||
* Public access type
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
const ACCESSTYPE_PUBLIC = 'public';
|
||||
|
||||
/**
|
||||
* Access type assigned to the note
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $_accessType;
|
||||
|
||||
/**
|
||||
* ID of the note
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
protected $_id;
|
||||
|
||||
/**
|
||||
* URI of the note
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $_uri;
|
||||
|
||||
/**
|
||||
* Date of the last modification made to the note
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $_modDate;
|
||||
|
||||
/**
|
||||
* Date the note was added
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $_addDate;
|
||||
|
||||
/**
|
||||
* Title of to the note
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $_title;
|
||||
|
||||
/**
|
||||
* Tags assigned to the note
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $_tags;
|
||||
|
||||
/**
|
||||
* Description of the note
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $_description;
|
||||
|
||||
/**
|
||||
* Constructor to initialize the object with data
|
||||
*
|
||||
* @param DOMNode $node Individual <link> node from a parsed response from
|
||||
* a GetLinks operation
|
||||
* @return void
|
||||
*/
|
||||
public function __construct($node)
|
||||
{
|
||||
$this->_accessType = $node->attributes->getNamedItem('accessType')->nodeValue;
|
||||
|
||||
$doc = new DOMDocument();
|
||||
$doc->appendChild($doc->importNode($node, true));
|
||||
$xpath = new DOMXPath($doc);
|
||||
|
||||
$this->_uri = $xpath->evaluate('/note/uri')->item(0)->nodeValue;
|
||||
$this->_id = substr($this->_uri, strrpos($this->_uri, '=') + 1);
|
||||
$this->_modDate = trim($xpath->evaluate('/note/modDate')->item(0)->nodeValue);
|
||||
$this->_addDate = trim($xpath->evaluate('/note/addDate')->item(0)->nodeValue);
|
||||
$this->_title = $xpath->evaluate('/note/title')->item(0)->nodeValue;
|
||||
$this->_description = $xpath->evaluate('/note/description')->item(0)->nodeValue;
|
||||
|
||||
$list = $xpath->query('/note/tags/tag');
|
||||
$this->_tags = array();
|
||||
|
||||
for ($x = 0; $x < $list->length; $x++) {
|
||||
$this->_tags[$x] = $list->item($x)->nodeValue;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the access type assigned to the note
|
||||
*
|
||||
* @see ACCESSTYPE_PRIVATE
|
||||
* @see ACCESSTYPE_PUBLIC
|
||||
* @return string
|
||||
*/
|
||||
public function getAccessType()
|
||||
{
|
||||
return $this->_accessType;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the ID of the note
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function getId()
|
||||
{
|
||||
return $this->_id;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the URI of the note
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getUri()
|
||||
{
|
||||
return $this->_uri;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the date of the last modification made to the note
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getModDate()
|
||||
{
|
||||
return $this->_modDate;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the date the note was added
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getAddDate()
|
||||
{
|
||||
return $this->_addDate;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the title assigned to the note
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getTitle()
|
||||
{
|
||||
return $this->_title;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the tags assigned to the note
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getTags()
|
||||
{
|
||||
return $this->_tags;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the description assigned to the note
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getDescription()
|
||||
{
|
||||
return $this->_description;
|
||||
}
|
||||
}
|
83
libs/Zend/Service/Simpy/NoteSet.php
Normal file
83
libs/Zend/Service/Simpy/NoteSet.php
Normal file
@ -0,0 +1,83 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Simpy
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: NoteSet.php 8064 2008-02-16 10:58:39Z thomas $
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @see Zend_Service_Simpy_Note
|
||||
*/
|
||||
require_once 'Zend/Service/Simpy/Note.php';
|
||||
|
||||
|
||||
/**
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Simpy
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Simpy_NoteSet implements IteratorAggregate
|
||||
{
|
||||
/**
|
||||
* List of notes
|
||||
*
|
||||
* @var array of Zend_Service_Simpy_Note objects
|
||||
*/
|
||||
protected $_notes;
|
||||
|
||||
/**
|
||||
* Constructor to initialize the object with data
|
||||
*
|
||||
* @param DOMDocument $doc Parsed response from a GetNotes operation
|
||||
* @return void
|
||||
*/
|
||||
public function __construct(DOMDocument $doc)
|
||||
{
|
||||
$xpath = new DOMXPath($doc);
|
||||
$list = $xpath->query('//notes/note');
|
||||
$this->_notes = array();
|
||||
|
||||
for ($x = 0; $x < $list->length; $x++) {
|
||||
$this->_notes[$x] = new Zend_Service_Simpy_Note($list->item($x));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an iterator for the note set
|
||||
*
|
||||
* @return ArrayIterator
|
||||
*/
|
||||
public function getIterator()
|
||||
{
|
||||
return new ArrayIterator($this->_notes);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the number of notes in the set
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function getLength()
|
||||
{
|
||||
return count($this->_notes);
|
||||
}
|
||||
}
|
81
libs/Zend/Service/Simpy/Tag.php
Normal file
81
libs/Zend/Service/Simpy/Tag.php
Normal file
@ -0,0 +1,81 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Simpy
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: Tag.php 8064 2008-02-16 10:58:39Z thomas $
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Simpy
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Simpy_Tag
|
||||
{
|
||||
/**
|
||||
* Name of the tag
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $_tag;
|
||||
|
||||
/**
|
||||
* Number of links with the tag
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
protected $_count;
|
||||
|
||||
/**
|
||||
* Constructor to initialize the object with data
|
||||
*
|
||||
* @param DOMNode $node Individual <tag> node from a parsed response from
|
||||
* a GetTags operation
|
||||
* @return void
|
||||
*/
|
||||
public function __construct($node)
|
||||
{
|
||||
$map =& $node->attributes;
|
||||
$this->_tag = $map->getNamedItem('name')->nodeValue;
|
||||
$this->_count = $map->getNamedItem('count')->nodeValue;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the name of the tag
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getTag()
|
||||
{
|
||||
return $this->_tag;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the number of links with the tag
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function getCount()
|
||||
{
|
||||
return $this->_count;
|
||||
}
|
||||
}
|
83
libs/Zend/Service/Simpy/TagSet.php
Normal file
83
libs/Zend/Service/Simpy/TagSet.php
Normal file
@ -0,0 +1,83 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Simpy
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: TagSet.php 8064 2008-02-16 10:58:39Z thomas $
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @see Zend_Service_Simpy_Tag
|
||||
*/
|
||||
require_once 'Zend/Service/Simpy/Tag.php';
|
||||
|
||||
|
||||
/**
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Simpy
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Simpy_TagSet implements IteratorAggregate
|
||||
{
|
||||
/**
|
||||
* List of tags
|
||||
*
|
||||
* @var array of Zend_Service_Simpy_Tag objects
|
||||
*/
|
||||
protected $_tags;
|
||||
|
||||
/**
|
||||
* Constructor to initialize the object with data
|
||||
*
|
||||
* @param DOMDocument $doc Parsed response from a GetTags operation
|
||||
* @return void
|
||||
*/
|
||||
public function __construct(DOMDocument $doc)
|
||||
{
|
||||
$xpath = new DOMXPath($doc);
|
||||
$list = $xpath->query('//tags/tag');
|
||||
$this->_tags = array();
|
||||
|
||||
for ($x = 0; $x < $list->length; $x++) {
|
||||
$this->_tags[$x] = new Zend_Service_Simpy_Tag($list->item($x));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an iterator for the tag set
|
||||
*
|
||||
* @return ArrayIterator
|
||||
*/
|
||||
public function getIterator()
|
||||
{
|
||||
return new ArrayIterator($this->_tags);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the number of tags in the set
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function getLength()
|
||||
{
|
||||
return count($this->_tags);
|
||||
}
|
||||
}
|
191
libs/Zend/Service/Simpy/Watchlist.php
Normal file
191
libs/Zend/Service/Simpy/Watchlist.php
Normal file
@ -0,0 +1,191 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Simpy
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: Watchlist.php 8064 2008-02-16 10:58:39Z thomas $
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @see Zend_Service_Simpy_WatchlistFilterSet
|
||||
*/
|
||||
require_once 'Zend/Service/Simpy/WatchlistFilterSet.php';
|
||||
|
||||
|
||||
/**
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Simpy
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Simpy_Watchlist
|
||||
{
|
||||
/**
|
||||
* Identifier for the watchlist
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
protected $_id;
|
||||
|
||||
/**
|
||||
* Name of the watchlist
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $_name;
|
||||
|
||||
/**
|
||||
* Description of the watchlist
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $_description;
|
||||
|
||||
/**
|
||||
* Timestamp for when the watchlist was added
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $_addDate;
|
||||
|
||||
/**
|
||||
* Number of new links in the watchlist
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
protected $_newLinks;
|
||||
|
||||
/**
|
||||
* List of usernames for users included in the watchlist
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $_users;
|
||||
|
||||
/**
|
||||
* List of filters included in the watchlist
|
||||
*
|
||||
* @var Zend_Service_Simpy_WatchlistFilterSet
|
||||
*/
|
||||
protected $_filters;
|
||||
|
||||
/**
|
||||
* Constructor to initialize the object with data
|
||||
*
|
||||
* @param DOMNode $node Individual <watchlist> node from a parsed
|
||||
* response from a GetWatchlists or GetWatchlist
|
||||
* operation
|
||||
* @return void
|
||||
*/
|
||||
public function __construct($node)
|
||||
{
|
||||
$map =& $node->attributes;
|
||||
|
||||
$this->_id = $map->getNamedItem('id')->nodeValue;
|
||||
$this->_name = $map->getNamedItem('name')->nodeValue;
|
||||
$this->_description = $map->getNamedItem('description')->nodeValue;
|
||||
$this->_addDate = $map->getNamedItem('addDate')->nodeValue;
|
||||
$this->_newLinks = $map->getNamedItem('newLinks')->nodeValue;
|
||||
|
||||
$this->_users = array();
|
||||
$this->_filters = new Zend_Service_Simpy_WatchlistFilterSet();
|
||||
|
||||
$childNode = $node->firstChild;
|
||||
while (is_null($childNode) == false) {
|
||||
if ($childNode->nodeName == 'user') {
|
||||
$this->_users[] = $childNode->attributes->getNamedItem('username')->nodeValue;
|
||||
} elseif ($childNode->nodeName == 'filter') {
|
||||
$filter = new Zend_Service_Simpy_WatchlistFilter($childNode);
|
||||
$this->_filters->add($filter);
|
||||
}
|
||||
$childNode = $childNode->nextSibling;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the identifier for the watchlist
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function getId()
|
||||
{
|
||||
return $this->_id;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the name of the watchlist
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getName()
|
||||
{
|
||||
return $this->_name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the description of the watchlist
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getDescription()
|
||||
{
|
||||
return $this->_description;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a timestamp for when the watchlist was added
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getAddDate()
|
||||
{
|
||||
return $this->_addDate;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the number of new links in the watchlist
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function getNewLinks()
|
||||
{
|
||||
return $this->_newLinks;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a list of usernames for users included in the watchlist
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getUsers()
|
||||
{
|
||||
return $this->_users;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a list of filters included in the watchlist
|
||||
*
|
||||
* @return Zend_Service_Simpy_WatchlistFilterSet
|
||||
*/
|
||||
public function getFilters()
|
||||
{
|
||||
return $this->_filters;
|
||||
}
|
||||
}
|
81
libs/Zend/Service/Simpy/WatchlistFilter.php
Normal file
81
libs/Zend/Service/Simpy/WatchlistFilter.php
Normal file
@ -0,0 +1,81 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Simpy
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: WatchlistFilter.php 8064 2008-02-16 10:58:39Z thomas $
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Simpy
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Simpy_WatchlistFilter
|
||||
{
|
||||
/**
|
||||
* Name of the filter
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $_name;
|
||||
|
||||
/**
|
||||
* Query for the filter
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $_query;
|
||||
|
||||
/**
|
||||
* Constructor to initialize the object with data
|
||||
*
|
||||
* @param DOMNode $node Individual <filter> node from a parsed response from
|
||||
* a GetWatchlists or GetWatchlist operation
|
||||
* @return void
|
||||
*/
|
||||
public function __construct($node)
|
||||
{
|
||||
$map =& $node->attributes;
|
||||
$this->_name = $map->getNamedItem('name')->nodeValue;
|
||||
$this->_query = $map->getNamedItem('query')->nodeValue;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the name of the filter
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getName()
|
||||
{
|
||||
return $this->_name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the query for the filter
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getQuery()
|
||||
{
|
||||
return $this->_query;
|
||||
}
|
||||
}
|
77
libs/Zend/Service/Simpy/WatchlistFilterSet.php
Normal file
77
libs/Zend/Service/Simpy/WatchlistFilterSet.php
Normal file
@ -0,0 +1,77 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Simpy
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: WatchlistFilterSet.php 8064 2008-02-16 10:58:39Z thomas $
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @see Zend_Service_Simpy_WatchlistFilter
|
||||
*/
|
||||
require_once 'Zend/Service/Simpy/WatchlistFilter.php';
|
||||
|
||||
|
||||
/**
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Simpy
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Simpy_WatchlistFilterSet implements IteratorAggregate
|
||||
{
|
||||
/**
|
||||
* List of filters in the set
|
||||
*
|
||||
* @var array of Zend_Service_Simpy_WatchlistFilter objects
|
||||
*/
|
||||
protected $_filters = array();
|
||||
|
||||
/**
|
||||
* Adds a filter to the set
|
||||
*
|
||||
* @param Zend_Service_Simpy_WatchlistFilter $filter Filter to be added
|
||||
* @return void
|
||||
*/
|
||||
public function add(Zend_Service_Simpy_WatchlistFilter $filter)
|
||||
{
|
||||
$this->_filters[] = $filter;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an iterator for the watchlist filter set
|
||||
*
|
||||
* @return ArrayIterator
|
||||
*/
|
||||
public function getIterator()
|
||||
{
|
||||
return new ArrayIterator($this->_filters);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the number of filters in the set
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function getLength()
|
||||
{
|
||||
return count($this->_filters);
|
||||
}
|
||||
}
|
82
libs/Zend/Service/Simpy/WatchlistSet.php
Normal file
82
libs/Zend/Service/Simpy/WatchlistSet.php
Normal file
@ -0,0 +1,82 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Simpy
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: WatchlistSet.php 8064 2008-02-16 10:58:39Z thomas $
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @see Zend_Service_Simpy_Watchlist
|
||||
*/
|
||||
require_once 'Zend/Service/Simpy/Watchlist.php';
|
||||
|
||||
|
||||
/**
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Simpy
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Simpy_WatchlistSet implements IteratorAggregate
|
||||
{
|
||||
/**
|
||||
* List of watchlists
|
||||
*
|
||||
* @var array of Zend_Service_Simpy_Watchlist objects
|
||||
*/
|
||||
protected $_watchlists = array();
|
||||
|
||||
/**
|
||||
* Constructor to initialize the object with data
|
||||
*
|
||||
* @param DOMDocument $doc Parsed response from a GetWatchlists operation
|
||||
* @return void
|
||||
*/
|
||||
public function __construct(DOMDocument $doc)
|
||||
{
|
||||
$xpath = new DOMXPath($doc);
|
||||
$list = $xpath->query('//watchlists/watchlist');
|
||||
|
||||
for ($x = 0; $x < $list->length; $x++) {
|
||||
$this->_watchlists[$x] = new Zend_Service_Simpy_Watchlist($list->item($x));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an iterator for the watchlist set
|
||||
*
|
||||
* @return ArrayIterator
|
||||
*/
|
||||
public function getIterator()
|
||||
{
|
||||
return new ArrayIterator($this->_watchlists);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the number of watchlists in the set
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function getLength()
|
||||
{
|
||||
return count($this->_watchlists);
|
||||
}
|
||||
}
|
609
libs/Zend/Service/SlideShare.php
Normal file
609
libs/Zend/Service/SlideShare.php
Normal file
@ -0,0 +1,609 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage SlideShare
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: SlideShare.php 9094 2008-03-30 18:36:55Z thomas $
|
||||
*/
|
||||
|
||||
/**
|
||||
* Zend_Http_Client
|
||||
*/
|
||||
require_once 'Zend/Http/Client.php';
|
||||
|
||||
/**
|
||||
* Zend_Cache
|
||||
*/
|
||||
require_once 'Zend/Cache.php';
|
||||
|
||||
/**
|
||||
* Zend_Service_SlideShare_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/SlideShare/Exception.php';
|
||||
|
||||
/**
|
||||
* Zend_Service_SlideShare_SlideShow
|
||||
*/
|
||||
require_once 'Zend/Service/SlideShare/SlideShow.php';
|
||||
|
||||
/**
|
||||
* The Zend_Service_SlideShare component is used to interface with the
|
||||
* slideshare.net web server to retrieve slide shows hosted on the web site for
|
||||
* display or other processing.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage SlideShare
|
||||
* @throws Zend_Service_SlideShare_Exception
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_SlideShare
|
||||
{
|
||||
|
||||
/**
|
||||
* Web service result code mapping
|
||||
*/
|
||||
const SERVICE_ERROR_BAD_APIKEY = 1;
|
||||
const SERVICE_ERROR_BAD_AUTH = 2;
|
||||
const SERVICE_ERROR_MISSING_TITLE = 3;
|
||||
const SERVICE_ERROR_MISSING_FILE = 4;
|
||||
const SERVICE_ERROR_EMPTY_TITLE = 5;
|
||||
const SERVICE_ERROR_NOT_SOURCEOBJ = 6;
|
||||
const SERVICE_ERROR_INVALID_EXT = 7;
|
||||
const SERVICE_ERROR_FILE_TOO_BIG = 8;
|
||||
const SERVICE_ERROR_SHOW_NOT_FOUND = 9;
|
||||
const SERVICE_ERROR_USER_NOT_FOUND = 10;
|
||||
const SERVICE_ERROR_GROUP_NOT_FOUND = 11;
|
||||
const SERVICE_ERROR_MISSING_TAG = 12;
|
||||
const SERVICE_ERROR_DAILY_LIMIT = 99;
|
||||
const SERVICE_ERROR_ACCOUNT_BLOCKED = 100;
|
||||
|
||||
/**
|
||||
* Slide share Web service communication URIs
|
||||
*/
|
||||
const SERVICE_UPLOAD_URI = 'http://www.slideshare.net/api/1/upload_slideshow';
|
||||
const SERVICE_GET_SHOW_URI = 'http://www.slideshare.net/api/1/get_slideshow';
|
||||
const SERVICE_GET_SHOW_BY_USER_URI = 'http://www.slideshare.net/api/1/get_slideshow_by_user';
|
||||
const SERVICE_GET_SHOW_BY_TAG_URI = 'http://www.slideshare.net/api/1/get_slideshow_by_tag';
|
||||
const SERVICE_GET_SHOW_BY_GROUP_URI = 'http://www.slideshare.net/api/1/get_slideshows_from_group';
|
||||
|
||||
/**
|
||||
* The MIME type of Slideshow files
|
||||
*
|
||||
*/
|
||||
const POWERPOINT_MIME_TYPE = "application/vnd.ms-powerpoint";
|
||||
|
||||
/**
|
||||
* The API key to use in requests
|
||||
*
|
||||
* @var string The API key
|
||||
*/
|
||||
protected $_apiKey;
|
||||
|
||||
/**
|
||||
* The shared secret to use in requests
|
||||
*
|
||||
* @var string the Shared secret
|
||||
*/
|
||||
protected $_sharedSecret;
|
||||
|
||||
/**
|
||||
* The username to use in requests
|
||||
*
|
||||
* @var string the username
|
||||
*/
|
||||
protected $_username;
|
||||
|
||||
/**
|
||||
* The password to use in requests
|
||||
*
|
||||
* @var string the password
|
||||
*/
|
||||
protected $_password;
|
||||
|
||||
/**
|
||||
* The HTTP Client object to use to perform requests
|
||||
*
|
||||
* @var Zend_Http_Client
|
||||
*/
|
||||
protected $_httpclient;
|
||||
|
||||
/**
|
||||
* The Cache object to use to perform caching
|
||||
*
|
||||
* @var Zend_Cache_Core
|
||||
*/
|
||||
protected $_cacheobject;
|
||||
|
||||
/**
|
||||
* Sets the Zend_Http_Client object to use in requests. If not provided a default will
|
||||
* be used.
|
||||
*
|
||||
* @param Zend_Http_Client $client The HTTP client instance to use
|
||||
* @return Zend_Service_SlideShare
|
||||
*/
|
||||
public function setHttpClient(Zend_Http_Client $client)
|
||||
{
|
||||
$this->_httpclient = $client;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the instance of the Zend_Http_Client which will be used. Creates an instance
|
||||
* of Zend_Http_Client if no previous client was set.
|
||||
*
|
||||
* @return Zend_Http_Client The HTTP client which will be used
|
||||
*/
|
||||
public function getHttpClient()
|
||||
{
|
||||
|
||||
if(!($this->_httpclient instanceof Zend_Http_Client)) {
|
||||
$client = new Zend_Http_Client();
|
||||
$client->setConfig(array('maxredirects' => 2,
|
||||
'timeout' => 5));
|
||||
|
||||
$this->setHttpClient($client);
|
||||
}
|
||||
|
||||
$this->_httpclient->resetParameters();
|
||||
return $this->_httpclient;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the Zend_Cache object to use to cache the results of API queries
|
||||
*
|
||||
* @param Zend_Cache_Core $cacheobject The Zend_Cache object used
|
||||
* @return Zend_Service_SlideShare
|
||||
*/
|
||||
public function setCacheObject(Zend_Cache_Core $cacheobject)
|
||||
{
|
||||
$this->_cacheobject = $cacheobject;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the Zend_Cache object which will be used to cache API queries. If no cache object
|
||||
* was previously set the the default will be used (Filesystem caching in /tmp with a life
|
||||
* time of 43200 seconds)
|
||||
*
|
||||
* @return Zend_Cache_Core The object used in caching
|
||||
*/
|
||||
public function getCacheObject()
|
||||
{
|
||||
|
||||
if(!($this->_cacheobject instanceof Zend_Cache_Core)) {
|
||||
$cache = Zend_Cache::factory('Core', 'File', array('lifetime' => 43200,
|
||||
'automatic_serialization' => true),
|
||||
array('cache_dir' => '/tmp'));
|
||||
|
||||
$this->setCacheObject($cache);
|
||||
}
|
||||
|
||||
return $this->_cacheobject;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the user name used for API calls
|
||||
*
|
||||
* @return string The username
|
||||
*/
|
||||
public function getUserName()
|
||||
{
|
||||
return $this->_username;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the user name to use for API calls
|
||||
*
|
||||
* @param string $un The username to use
|
||||
* @return Zend_Service_SlideShare
|
||||
*/
|
||||
public function setUserName($un)
|
||||
{
|
||||
$this->_username = $un;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the password to use in API calls
|
||||
*
|
||||
* @return string the password to use in API calls
|
||||
*/
|
||||
public function getPassword()
|
||||
{
|
||||
return $this->_password;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the password to use in API calls
|
||||
*
|
||||
* @param string $pw The password to use
|
||||
* @return Zend_Service_SlideShare
|
||||
*/
|
||||
public function setPassword($pw)
|
||||
{
|
||||
$this->_password = (string)$pw;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the API key to be used in making API calls
|
||||
*
|
||||
* @return string the API Key
|
||||
*/
|
||||
public function getApiKey()
|
||||
{
|
||||
return $this->_apiKey;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the API key to be used in making API calls
|
||||
*
|
||||
* @param string $key The API key to use
|
||||
* @return Zend_Service_SlideShare
|
||||
*/
|
||||
public function setApiKey($key)
|
||||
{
|
||||
$this->_apiKey = (string)$key;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the shared secret used in making API calls
|
||||
*
|
||||
* @return string the Shared secret
|
||||
*/
|
||||
public function getSharedSecret()
|
||||
{
|
||||
return $this->_sharedSecret;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the shared secret used in making API calls
|
||||
*
|
||||
* @param string $secret the shared secret
|
||||
* @return Zend_Service_SlideShare
|
||||
*/
|
||||
public function setSharedSecret($secret)
|
||||
{
|
||||
$this->_sharedSecret = (string)$secret;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* The Constructor
|
||||
*
|
||||
* @param string $apikey The API key
|
||||
* @param string $sharedSecret The shared secret
|
||||
* @param string $username The username
|
||||
* @param string $password The password
|
||||
*/
|
||||
public function __construct($apikey, $sharedSecret, $username = null, $password = null)
|
||||
{
|
||||
$this->setApiKey($apikey)
|
||||
->setSharedSecret($sharedSecret)
|
||||
->setUserName($username)
|
||||
->setPassword($password);
|
||||
|
||||
$this->_httpclient = new Zend_Http_Client();
|
||||
}
|
||||
|
||||
/**
|
||||
* Uploads the specified Slide show the the server
|
||||
*
|
||||
* @param Zend_Service_SlideShare_SlideShow $ss The slide show object representing the slide show to upload
|
||||
* @param boolean $make_src_public Determines if the the slide show's source file is public or not upon upload
|
||||
* @return Zend_Service_SlideShare_SlideShow The passed Slide show object, with the new assigned ID provided
|
||||
*/
|
||||
public function uploadSlideShow(Zend_Service_SlideShare_SlideShow $ss, $make_src_public = true)
|
||||
{
|
||||
|
||||
$timestamp = time();
|
||||
|
||||
$params = array('api_key' => $this->getApiKey(),
|
||||
'ts' => $timestamp,
|
||||
'hash' => sha1($this->getSharedSecret().$timestamp),
|
||||
'username' => $this->getUserName(),
|
||||
'password' => $this->getPassword(),
|
||||
'slideshow_title' => $ss->getTitle());
|
||||
|
||||
$description = $ss->getDescription();
|
||||
$tags = $ss->getTags();
|
||||
|
||||
$filename = $ss->getFilename();
|
||||
|
||||
if(!file_exists($filename) || !is_readable($filename)) {
|
||||
throw new Zend_Service_SlideShare_Exception("Specified Slideshow for upload not found or unreadable");
|
||||
}
|
||||
|
||||
if(!empty($description)) {
|
||||
$params['slideshow_description'] = $description;
|
||||
} else {
|
||||
$params['slideshow_description'] = "";
|
||||
}
|
||||
|
||||
if(!empty($tags)) {
|
||||
$tmp = array();
|
||||
foreach($tags as $tag) {
|
||||
$tmp[] = "\"$tag\"";
|
||||
}
|
||||
$params['slideshow_tags'] = implode(' ', $tmp);
|
||||
} else {
|
||||
$params['slideshow_tags'] = "";
|
||||
}
|
||||
|
||||
|
||||
$client = $this->getHttpClient();
|
||||
$client->setUri(self::SERVICE_UPLOAD_URI);
|
||||
$client->setParameterPost($params);
|
||||
$client->setFileUpload($filename, "slideshow_srcfile");
|
||||
|
||||
try {
|
||||
$response = $client->request('POST');
|
||||
} catch(Zend_Http_Client_Exception $e) {
|
||||
throw new Zend_Service_SlideShare_Exception("Service Request Failed: {$e->getMessage()}");
|
||||
}
|
||||
|
||||
$sxe = simplexml_load_string($response->getBody());
|
||||
|
||||
if($sxe->getName() == "SlideShareServiceError") {
|
||||
$message = (string)$sxe->Message[0];
|
||||
list($code, $error_str) = explode(':', $message);
|
||||
throw new Zend_Service_SlideShare_Exception(trim($error_str), $code);
|
||||
}
|
||||
|
||||
if(!$sxe->getName() == "SlideShowUploaded") {
|
||||
throw new Zend_Service_SlideShare_Exception("Unknown XML Respons Received");
|
||||
}
|
||||
|
||||
$ss->setId((int)(string)$sxe->SlideShowID);
|
||||
|
||||
return $ss;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves a slide show's information based on slide show ID
|
||||
*
|
||||
* @param int $ss_id The slide show ID
|
||||
* @return Zend_Service_SlideShare_SlideShow the Slideshow object
|
||||
*/
|
||||
public function getSlideShow($ss_id)
|
||||
{
|
||||
$timestamp = time();
|
||||
|
||||
$params = array('api_key' => $this->getApiKey(),
|
||||
'ts' => $timestamp,
|
||||
'hash' => sha1($this->getSharedSecret().$timestamp),
|
||||
'slideshow_id' => $ss_id);
|
||||
|
||||
$cache = $this->getCacheObject();
|
||||
|
||||
$cache_key = md5("__zendslideshare_cache_$ss_id");
|
||||
|
||||
if(!$retval = $cache->load($cache_key)) {
|
||||
$client = $this->getHttpClient();
|
||||
|
||||
$client->setUri(self::SERVICE_GET_SHOW_URI);
|
||||
$client->setParameterPost($params);
|
||||
|
||||
try {
|
||||
$response = $client->request('POST');
|
||||
} catch(Zend_Http_Client_Exception $e) {
|
||||
throw new Zend_Service_SlideShare_Exception("Service Request Failed: {$e->getMessage()}");
|
||||
}
|
||||
|
||||
$sxe = simplexml_load_string($response->getBody());
|
||||
|
||||
if($sxe->getName() == "SlideShareServiceError") {
|
||||
$message = (string)$sxe->Message[0];
|
||||
list($code, $error_str) = explode(':', $message);
|
||||
throw new Zend_Service_SlideShare_Exception(trim($error_str), $code);
|
||||
}
|
||||
|
||||
if(!$sxe->getName() == 'Slideshows') {
|
||||
throw new Zend_Service_SlideShare_Exception('Unknown XML Repsonse Received');
|
||||
}
|
||||
|
||||
$retval = $this->_slideShowNodeToObject(clone $sxe->Slideshow[0]);
|
||||
|
||||
$cache->save($retval, $cache_key);
|
||||
}
|
||||
|
||||
return $retval;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves an array of slide shows for a given username
|
||||
*
|
||||
* @param string $username The username to retrieve slide shows from
|
||||
* @param int $offset The offset of the list to start retrieving from
|
||||
* @param int $limit The maximum number of slide shows to retrieve
|
||||
* @return array An array of Zend_Service_SlideShare_SlideShow objects
|
||||
*/
|
||||
public function getSlideShowsByUsername($username, $offset = null, $limit = null)
|
||||
{
|
||||
return $this->_getSlideShowsByType('username_for', $username, $offset, $limit);
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves an array of slide shows based on tag
|
||||
*
|
||||
* @param string $tag The tag to retrieve slide shows with
|
||||
* @param int $offset The offset of the list to start retrieving from
|
||||
* @param int $limit The maximum number of slide shows to retrieve
|
||||
* @return array An array of Zend_Service_SlideShare_SlideShow objects
|
||||
*/
|
||||
public function getSlideShowsByTag($tag, $offset = null, $limit = null)
|
||||
{
|
||||
|
||||
if(is_array($tag)) {
|
||||
$tmp = array();
|
||||
foreach($tag as $t) {
|
||||
$tmp[] = "\"$t\"";
|
||||
}
|
||||
|
||||
$tag = implode(" ", $tmp);
|
||||
}
|
||||
|
||||
return $this->_getSlideShowsByType('tag', $tag, $offset, $limit);
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves an array of slide shows based on group name
|
||||
*
|
||||
* @param string $group The group name to retrieve slide shows for
|
||||
* @param int $offset The offset of the list to start retrieving from
|
||||
* @param int $limit The maximum number of slide shows to retrieve
|
||||
* @return array An array of Zend_Service_SlideShare_SlideShow objects
|
||||
*/
|
||||
public function getSlideShowsByGroup($group, $offset = null, $limit = null)
|
||||
{
|
||||
return $this->_getSlideShowsByType('group_name', $group, $offset, $limit);
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves Zend_Service_SlideShare_SlideShow object arrays based on the type of
|
||||
* list desired
|
||||
*
|
||||
* @param string $key The type of slide show object to retrieve
|
||||
* @param string $value The specific search query for the slide show type to look up
|
||||
* @param int $offset The offset of the list to start retrieving from
|
||||
* @param int $limit The maximum number of slide shows to retrieve
|
||||
* @return array An array of Zend_Service_SlideShare_SlideShow objects
|
||||
*/
|
||||
protected function _getSlideShowsByType($key, $value, $offset = null, $limit = null)
|
||||
{
|
||||
|
||||
$key = strtolower($key);
|
||||
|
||||
switch($key) {
|
||||
case 'username_for':
|
||||
$responseTag = 'User';
|
||||
$queryUri = self::SERVICE_GET_SHOW_BY_USER_URI;
|
||||
break;
|
||||
case 'group_name':
|
||||
$responseTag = 'Group';
|
||||
$queryUri = self::SERVICE_GET_SHOW_BY_GROUP_URI;
|
||||
break;
|
||||
case 'tag':
|
||||
$responseTag = 'Tag';
|
||||
$queryUri = self::SERVICE_GET_SHOW_BY_TAG_URI;
|
||||
break;
|
||||
default:
|
||||
throw new Zend_Service_SlideShare_Exception("Invalid SlideShare Query");
|
||||
}
|
||||
|
||||
$timestamp = time();
|
||||
|
||||
$params = array('api_key' => $this->getApiKey(),
|
||||
'ts' => $timestamp,
|
||||
'hash' => sha1($this->getSharedSecret().$timestamp),
|
||||
$key => $value);
|
||||
|
||||
if(!is_null($offset)) {
|
||||
$params['offset'] = (int)$offset;
|
||||
}
|
||||
|
||||
if(!is_null($limit)) {
|
||||
$params['limit'] = (int)$limit;
|
||||
}
|
||||
|
||||
$cache = $this->getCacheObject();
|
||||
|
||||
$cache_key = md5($key.$value.$offset.$limit);
|
||||
|
||||
if(!$retval = $cache->load($cache_key)) {
|
||||
|
||||
$client = $this->getHttpClient();
|
||||
|
||||
$client->setUri($queryUri);
|
||||
$client->setParameterPost($params);
|
||||
|
||||
try {
|
||||
$response = $client->request('POST');
|
||||
} catch(Zend_Http_Client_Exception $e) {
|
||||
throw new Zend_Service_SlideShare_Exception("Service Request Failed: {$e->getMessage()}");
|
||||
}
|
||||
|
||||
$sxe = simplexml_load_string($response->getBody());
|
||||
|
||||
if($sxe->getName() == "SlideShareServiceError") {
|
||||
$message = (string)$sxe->Message[0];
|
||||
list($code, $error_str) = explode(':', $message);
|
||||
throw new Zend_Service_SlideShare_Exception(trim($error_str), $code);
|
||||
}
|
||||
|
||||
if(!$sxe->getName() == $responseTag) {
|
||||
throw new Zend_Service_SlideShare_Exception('Unknown or Invalid XML Repsonse Received');
|
||||
}
|
||||
|
||||
$retval = array();
|
||||
|
||||
foreach($sxe->children() as $node) {
|
||||
if($node->getName() == 'Slideshow') {
|
||||
$retval[] = $this->_slideShowNodeToObject($node);
|
||||
}
|
||||
}
|
||||
|
||||
$cache->save($retval, $cache_key);
|
||||
}
|
||||
|
||||
return $retval;
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts a SimpleXMLElement object representing a response from the service
|
||||
* into a Zend_Service_SlideShare_SlideShow object
|
||||
*
|
||||
* @param SimpleXMLElement $node The input XML from the slideshare.net service
|
||||
* @return Zend_Service_SlideShare_SlideShow The resulting object
|
||||
*/
|
||||
protected function _slideShowNodeToObject(SimpleXMLElement $node)
|
||||
{
|
||||
|
||||
if($node->getName() == 'Slideshow') {
|
||||
|
||||
$ss = new Zend_Service_SlideShare_SlideShow();
|
||||
|
||||
$ss->setId((string)$node->ID);
|
||||
$ss->setDescription((string)$node->Description);
|
||||
$ss->setEmbedCode((string)$node->EmbedCode);
|
||||
$ss->setNumViews((string)$node->Views);
|
||||
$ss->setPermaLink((string)$node->Permalink);
|
||||
$ss->setStatus((string)$node->Status);
|
||||
$ss->setStatusDescription((string)$node->StatusDescription);
|
||||
|
||||
foreach(explode(",", (string)$node->Tags) as $tag) {
|
||||
|
||||
if(!in_array($tag, $ss->getTags())) {
|
||||
$ss->addTag($tag);
|
||||
}
|
||||
}
|
||||
|
||||
$ss->setThumbnailUrl((string)$node->Thumbnail);
|
||||
$ss->setTitle((string)$node->Title);
|
||||
$ss->setLocation((string)$node->Location);
|
||||
$ss->setTranscript((string)$node->Transcript);
|
||||
|
||||
return $ss;
|
||||
|
||||
}
|
||||
|
||||
throw new Zend_Service_SlideShare_Exception("Was not provided the expected XML Node for processing");
|
||||
}
|
||||
}
|
38
libs/Zend/Service/SlideShare/Exception.php
Normal file
38
libs/Zend/Service/SlideShare/Exception.php
Normal file
@ -0,0 +1,38 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage SlideShare
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: Exception.php 9094 2008-03-30 18:36:55Z thomas $
|
||||
*/
|
||||
|
||||
/**
|
||||
* @see Zend_Exception
|
||||
*/
|
||||
require_once 'Zend/Exception.php';
|
||||
|
||||
/**
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage SlideShare
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_SlideShare_Exception extends Zend_Exception
|
||||
{
|
||||
}
|
437
libs/Zend/Service/SlideShare/SlideShow.php
Normal file
437
libs/Zend/Service/SlideShare/SlideShow.php
Normal file
@ -0,0 +1,437 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage SlideShare
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: SlideShow.php 9094 2008-03-30 18:36:55Z thomas $
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* The Zend_Service_SlideShare_SlideShow class represents a slide show on the
|
||||
* slideshare.net servers.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage SlideShare
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_SlideShare_SlideShow
|
||||
{
|
||||
|
||||
/**
|
||||
* Status constant mapping for web service
|
||||
*
|
||||
*/
|
||||
const STATUS_QUEUED = 0;
|
||||
const STATUS_PROCESSING = 1;
|
||||
const STATUS_READY = 2;
|
||||
const STATUS_FAILED = 3;
|
||||
|
||||
/**
|
||||
* The HTML code to embed the slide show in a web page
|
||||
*
|
||||
* @var string the HTML to embed the slide show
|
||||
*/
|
||||
protected $_embedCode;
|
||||
|
||||
/**
|
||||
* The URI for the thumbnail representation of the slide show
|
||||
*
|
||||
* @var string The URI of a thumbnail image
|
||||
*/
|
||||
protected $_thumbnailUrl;
|
||||
|
||||
/**
|
||||
* The title of the slide show
|
||||
*
|
||||
* @var string The slide show title
|
||||
*/
|
||||
protected $_title;
|
||||
|
||||
/**
|
||||
* The Description of the slide show
|
||||
*
|
||||
* @var string The slide show description
|
||||
*/
|
||||
protected $_description;
|
||||
|
||||
/**
|
||||
* The status of the silde show on the server
|
||||
*
|
||||
* @var int The Slide show status code
|
||||
*/
|
||||
protected $_status;
|
||||
|
||||
/**
|
||||
* The Description of the slide show status code
|
||||
*
|
||||
* @var string The status description
|
||||
*/
|
||||
protected $_statusDescription;
|
||||
|
||||
/**
|
||||
* The Permanent link for the slide show
|
||||
*
|
||||
* @var string the Permalink for the slide show
|
||||
*/
|
||||
protected $_permalink;
|
||||
|
||||
/**
|
||||
* The number of views this slide show has received
|
||||
*
|
||||
* @var int the number of views
|
||||
*/
|
||||
protected $_numViews;
|
||||
|
||||
/**
|
||||
* The ID of the slide show on the server
|
||||
*
|
||||
* @var int the Slide show ID number on the server
|
||||
*/
|
||||
protected $_slideShowId;
|
||||
|
||||
/**
|
||||
* A slide show filename on the local filesystem (when uploading)
|
||||
*
|
||||
* @var string the local filesystem path & file of the slide show to upload
|
||||
*/
|
||||
protected $_slideShowFilename;
|
||||
|
||||
/**
|
||||
* An array of tags associated with the slide show
|
||||
*
|
||||
* @var array An array of tags associated with the slide show
|
||||
*/
|
||||
protected $_tags = array();
|
||||
|
||||
/**
|
||||
* The location of the slide show
|
||||
*
|
||||
* @var string the Location
|
||||
*/
|
||||
protected $_location;
|
||||
|
||||
/**
|
||||
* The transcript associated with the slide show
|
||||
*
|
||||
* @var string the Transscript
|
||||
*/
|
||||
protected $_transcript;
|
||||
|
||||
|
||||
/**
|
||||
* Retrieves the location of the slide show
|
||||
*
|
||||
* @return string the Location
|
||||
*/
|
||||
public function getLocation()
|
||||
{
|
||||
return $this->_location;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the location of the slide show
|
||||
*
|
||||
* @param string $loc The location to use
|
||||
* @return Zend_Service_SlideShare_SlideShow
|
||||
*/
|
||||
public function setLocation($loc)
|
||||
{
|
||||
$this->_location = (string)$loc;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the transcript for this slide show
|
||||
*
|
||||
* @return string the Transcript
|
||||
*/
|
||||
public function getTranscript()
|
||||
{
|
||||
return $this->_transcript;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the transcript for this slide show
|
||||
*
|
||||
* @param string $t The transcript
|
||||
* @return Zend_Service_SlideShare_SlideShow
|
||||
*/
|
||||
public function setTranscript($t)
|
||||
{
|
||||
$this->_transcript = (string)$t;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a tag to the slide show
|
||||
*
|
||||
* @param string $tag The tag to add
|
||||
* @return Zend_Service_SlideShare_SlideShow
|
||||
*/
|
||||
public function addTag($tag)
|
||||
{
|
||||
$this->_tags[] = (string)$tag;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the tags for the slide show
|
||||
*
|
||||
* @param array $tags An array of tags to set
|
||||
* @return Zend_Service_SlideShare_SlideShow
|
||||
*/
|
||||
public function setTags(Array $tags)
|
||||
{
|
||||
$this->_tags = $tags;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets all of the tags associated with the slide show
|
||||
*
|
||||
* @return array An array of tags for the slide show
|
||||
*/
|
||||
public function getTags()
|
||||
{
|
||||
return $this->_tags;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the filename on the local filesystem of the slide show
|
||||
* (for uploading a new slide show)
|
||||
*
|
||||
* @param string $file The full path & filename to the slide show
|
||||
* @return Zend_Service_SlideShare_SlideShow
|
||||
*/
|
||||
public function setFilename($file)
|
||||
{
|
||||
$this->_slideShowFilename = (string)$file;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the filename on the local filesystem of the slide show
|
||||
* which will be uploaded
|
||||
*
|
||||
* @return string The full path & filename to the slide show
|
||||
*/
|
||||
public function getFilename()
|
||||
{
|
||||
return $this->_slideShowFilename;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the ID for the slide show
|
||||
*
|
||||
* @param int $id The slide show ID
|
||||
* @return Zend_Service_SlideShare_SlideShow
|
||||
*/
|
||||
public function setId($id)
|
||||
{
|
||||
$this->_slideShowId = (string)$id;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the ID for the slide show
|
||||
*
|
||||
* @return int The slide show ID
|
||||
*/
|
||||
public function getId()
|
||||
{
|
||||
return $this->_slideShowId;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the HTML embed code for the slide show
|
||||
*
|
||||
* @param string $code The HTML embed code
|
||||
* @return Zend_Service_SlideShare_SlideShow
|
||||
*/
|
||||
public function setEmbedCode($code)
|
||||
{
|
||||
$this->_embedCode = (string)$code;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the HTML embed code for the slide show
|
||||
*
|
||||
* @return string the HTML embed code
|
||||
*/
|
||||
public function getEmbedCode()
|
||||
{
|
||||
return $this->_embedCode;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the Thumbnail URI for the slide show
|
||||
*
|
||||
* @param string $url The URI for the thumbnail image
|
||||
* @return Zend_Service_SlideShare_SlideShow
|
||||
*/
|
||||
public function setThumbnailUrl($url)
|
||||
{
|
||||
$this->_thumbnailUrl = (string) $url;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the Thumbnail URi for the slide show
|
||||
*
|
||||
* @return string The URI for the thumbnail image
|
||||
*/
|
||||
public function getThumbnailUrl()
|
||||
{
|
||||
return $this->_thumbnailUrl;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the title for the Slide show
|
||||
*
|
||||
* @param string $title The slide show title
|
||||
* @return Zend_Service_SlideShare_SlideShow
|
||||
*/
|
||||
public function setTitle($title)
|
||||
{
|
||||
$this->_title = (string)$title;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the Slide show title
|
||||
*
|
||||
* @return string the Slide show title
|
||||
*/
|
||||
public function getTitle()
|
||||
{
|
||||
return $this->_title;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the description for the Slide show
|
||||
*
|
||||
* @param strign $desc The description of the slide show
|
||||
* @return Zend_Service_SlideShare_SlideShow
|
||||
*/
|
||||
public function setDescription($desc)
|
||||
{
|
||||
$this->_description = (string)$desc;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the description of the slide show
|
||||
*
|
||||
* @return string The slide show description
|
||||
*/
|
||||
public function getDescription()
|
||||
{
|
||||
return $this->_description;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the numeric status of the slide show on the server
|
||||
*
|
||||
* @param int $status The numeric status on the server
|
||||
* @return Zend_Service_SlideShare_SlideShow
|
||||
*/
|
||||
public function setStatus($status)
|
||||
{
|
||||
$this->_status = (int)$status;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the numeric status of the slide show on the server
|
||||
*
|
||||
* @return int A Zend_Service_SlideShare_SlideShow Status constant
|
||||
*/
|
||||
public function getStatus()
|
||||
{
|
||||
return $this->_status;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the textual description of the status of the slide show on the server
|
||||
*
|
||||
* @param string $desc The textual description of the status of the slide show
|
||||
* @return Zend_Service_SlideShare_SlideShow
|
||||
*/
|
||||
public function setStatusDescription($desc)
|
||||
{
|
||||
$this->_statusDescription = (string)$desc;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the textual description of the status of the slide show on the server
|
||||
*
|
||||
* @return string the textual description of the service
|
||||
*/
|
||||
public function getStatusDescription()
|
||||
{
|
||||
return $this->_statusDescription;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the permanent link of the slide show
|
||||
*
|
||||
* @param string $url The permanent URL for the slide show
|
||||
* @return Zend_Service_SlideShare_SlideShow
|
||||
*/
|
||||
public function setPermaLink($url)
|
||||
{
|
||||
$this->_permalink = (string)$url;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the permanent link of the slide show
|
||||
*
|
||||
* @return string the permanent URL for the slide show
|
||||
*/
|
||||
public function getPermaLink()
|
||||
{
|
||||
return $this->_permalink;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the number of views the slide show has received
|
||||
*
|
||||
* @param int $views The number of views
|
||||
* @return Zend_Service_SlideShare_SlideShow
|
||||
*/
|
||||
public function setNumViews($views)
|
||||
{
|
||||
$this->_numViews = (int)$views;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the number of views the slide show has received
|
||||
*
|
||||
* @return int The number of views
|
||||
*/
|
||||
public function getNumViews()
|
||||
{
|
||||
return $this->_numViews;
|
||||
}
|
||||
}
|
95
libs/Zend/Service/StrikeIron.php
Normal file
95
libs/Zend/Service/StrikeIron.php
Normal file
@ -0,0 +1,95 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage StrikeIron
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: StrikeIron.php 8539 2008-03-04 20:29:55Z darby $
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @see Zend_Loader
|
||||
*/
|
||||
require_once 'Zend/Loader.php';
|
||||
|
||||
|
||||
/**
|
||||
* This class allows StrikeIron authentication credentials to be specified
|
||||
* in one place and provides a factory for returning instances of different
|
||||
* StrikeIron service classes.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage StrikeIron
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_StrikeIron
|
||||
{
|
||||
/**
|
||||
* Options to pass to Zend_Service_StrikeIron_Base constructor
|
||||
* @param array
|
||||
*/
|
||||
protected $_options;
|
||||
|
||||
/**
|
||||
* Class constructor
|
||||
*
|
||||
* @param array $options Options to pass to Zend_Service_StrikeIron_Base constructor
|
||||
*/
|
||||
public function __construct($options = array())
|
||||
{
|
||||
$this->_options = $options;
|
||||
}
|
||||
|
||||
/**
|
||||
* Factory method to return a preconfigured Zend_Service_StrikeIron_*
|
||||
* instance.
|
||||
*
|
||||
* @param null|string $options Service options
|
||||
* @return object Zend_Service_StrikeIron_* instance
|
||||
* @throws Zend_Service_StrikeIron_Exception
|
||||
*/
|
||||
public function getService($options = array())
|
||||
{
|
||||
$class = isset($options['class']) ? $options['class'] : 'Base';
|
||||
unset($options['class']);
|
||||
|
||||
if (strpos($class, '_') === false) {
|
||||
$class = "Zend_Service_StrikeIron_{$class}";
|
||||
}
|
||||
|
||||
try {
|
||||
@Zend_Loader::loadClass($class);
|
||||
if (!class_exists($class, false)) {
|
||||
throw new Exception('Class file not found');
|
||||
}
|
||||
} catch (Exception $e) {
|
||||
$msg = "Service '$class' could not be loaded: " . $e->getMessage();
|
||||
/**
|
||||
* @see Zend_Service_StrikeIron_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/StrikeIron/Exception.php';
|
||||
throw new Zend_Service_StrikeIron_Exception($msg, $e->getCode());
|
||||
}
|
||||
|
||||
// instantiate and return the service
|
||||
$service = new $class(array_merge($this->_options, $options));
|
||||
return $service;
|
||||
}
|
||||
|
||||
}
|
274
libs/Zend/Service/StrikeIron/Base.php
Normal file
274
libs/Zend/Service/StrikeIron/Base.php
Normal file
@ -0,0 +1,274 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage StrikeIron
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: Base.php 8064 2008-02-16 10:58:39Z thomas $
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @see Zend_Service_StrikeIron_Decorator
|
||||
*/
|
||||
require_once 'Zend/Service/StrikeIron/Decorator.php';
|
||||
|
||||
|
||||
/**
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage StrikeIron
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_StrikeIron_Base
|
||||
{
|
||||
/**
|
||||
* Configuration options
|
||||
* @param array
|
||||
*/
|
||||
protected $_options = array('username' => null,
|
||||
'password' => null,
|
||||
'client' => null,
|
||||
'options' => null,
|
||||
'headers' => null,
|
||||
'wsdl' => null);
|
||||
|
||||
/**
|
||||
* Output headers returned by the last call to SOAPClient->__soapCall()
|
||||
* @param array
|
||||
*/
|
||||
protected $_outputHeaders = array();
|
||||
|
||||
/**
|
||||
* Class constructor
|
||||
*
|
||||
* @param array $options Key/value pair options
|
||||
* @throws Zend_Service_StrikeIron_Exception
|
||||
*/
|
||||
public function __construct($options = array())
|
||||
{
|
||||
if (!extension_loaded('soap')) {
|
||||
/**
|
||||
* @see Zend_Service_StrikeIron_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/StrikeIron/Exception.php';
|
||||
throw new Zend_Service_StrikeIron_Exception('SOAP extension is not enabled');
|
||||
}
|
||||
|
||||
$this->_options = array_merge($this->_options, $options);
|
||||
|
||||
$this->_initSoapHeaders();
|
||||
$this->_initSoapClient();
|
||||
}
|
||||
|
||||
/**
|
||||
* Proxy method calls to the SOAPClient instance, transforming method
|
||||
* calls and responses for convenience.
|
||||
*
|
||||
* @param string $method Method name
|
||||
* @param array $params Parameters for method
|
||||
* @return mixed Result
|
||||
* @throws Zend_Service_StrikeIron_Exception
|
||||
*/
|
||||
public function __call($method, $params)
|
||||
{
|
||||
// prepare method name and parameters for soap call
|
||||
list($method, $params) = $this->_transformCall($method, $params);
|
||||
$params = isset($params[0]) ? array($params[0]) : array();
|
||||
|
||||
// make soap call, capturing the result and output headers
|
||||
try {
|
||||
$result = $this->_options['client']->__soapCall($method,
|
||||
$params,
|
||||
$this->_options['options'],
|
||||
$this->_options['headers'],
|
||||
$this->_outputHeaders);
|
||||
} catch (Exception $e) {
|
||||
$message = get_class($e) . ': ' . $e->getMessage();
|
||||
/**
|
||||
* @see Zend_Service_StrikeIron_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/StrikeIron/Exception.php';
|
||||
throw new Zend_Service_StrikeIron_Exception($message, $e->getCode());
|
||||
}
|
||||
|
||||
// transform/decorate the result and return it
|
||||
$result = $this->_transformResult($result, $method, $params);
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize the SOAPClient instance
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
protected function _initSoapClient()
|
||||
{
|
||||
if (! isset($this->_options['options'])) {
|
||||
$this->_options['options'] = array();
|
||||
}
|
||||
|
||||
if (! isset($this->_options['client'])) {
|
||||
$this->_options['client'] = new SoapClient($this->_options['wsdl'],
|
||||
$this->_options['options']);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize the headers to pass to SOAPClient->__soapCall()
|
||||
*
|
||||
* @return void
|
||||
* @throws Zend_Service_StrikeIron_Exception
|
||||
*/
|
||||
protected function _initSoapHeaders()
|
||||
{
|
||||
// validate headers and check if LicenseInfo was given
|
||||
$foundLicenseInfo = false;
|
||||
if (isset($this->_options['headers'])) {
|
||||
if (! is_array($this->_options['headers'])) {
|
||||
$this->_options['headers'] = array($this->_options['headers']);
|
||||
}
|
||||
|
||||
foreach ($this->_options['headers'] as $header) {
|
||||
if (! $header instanceof SoapHeader) {
|
||||
/**
|
||||
* @see Zend_Service_StrikeIron_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/StrikeIron/Exception.php';
|
||||
throw new Zend_Service_StrikeIron_Exception('Header must be instance of SoapHeader');
|
||||
} else if ($header->name == 'LicenseInfo') {
|
||||
$foundLicenseInfo = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$this->_options['headers'] = array();
|
||||
}
|
||||
|
||||
// add default LicenseInfo header if a custom one was not supplied
|
||||
if (! $foundLicenseInfo) {
|
||||
$this->_options['headers'][] = new SoapHeader('http://ws.strikeiron.com',
|
||||
'LicenseInfo',
|
||||
array('RegisteredUser' => array('UserID' => $this->_options['username'],
|
||||
'Password' => $this->_options['password'])));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Transform a method name or method parameters before sending them
|
||||
* to the remote service. This can be useful for inflection or other
|
||||
* transforms to give the method call a more PHP-like interface.
|
||||
*
|
||||
* @see __call()
|
||||
* @param string $method Method name called from PHP
|
||||
* @param mixed $param Parameters passed from PHP
|
||||
* @return array [$method, $params] for SOAPClient->__soapCall()
|
||||
*/
|
||||
protected function _transformCall($method, $params)
|
||||
{
|
||||
return array(ucfirst($method), $params);
|
||||
}
|
||||
|
||||
/**
|
||||
* Transform the result returned from a method before returning
|
||||
* it to the PHP caller. This can be useful for transforming
|
||||
* the SOAPClient returned result to be more PHP-like.
|
||||
*
|
||||
* The $method name and $params passed to the method are provided to
|
||||
* allow decisions to be made about how to transform the result based
|
||||
* on what was originally called.
|
||||
*
|
||||
* @see __call()
|
||||
* @param $result Raw result returned from SOAPClient_>__soapCall()
|
||||
* @param $method Method name that was passed to SOAPClient->__soapCall()
|
||||
* @param $params Method parameters that were passed to SOAPClient->__soapCall()
|
||||
* @return mixed Transformed result
|
||||
*/
|
||||
protected function _transformResult($result, $method, $params)
|
||||
{
|
||||
$resultObjectName = "{$method}Result";
|
||||
if (isset($result->$resultObjectName)) {
|
||||
$result = $result->$resultObjectName;
|
||||
}
|
||||
if (is_object($result)) {
|
||||
$result = new Zend_Service_StrikeIron_Decorator($result, $resultObjectName);
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the WSDL URL for this service.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getWsdl()
|
||||
{
|
||||
return $this->_options['wsdl'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the SOAP Client instance for this service.
|
||||
*/
|
||||
public function getSoapClient()
|
||||
{
|
||||
return $this->_options['client'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the StrikeIron output headers returned with the last method response.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getLastOutputHeaders()
|
||||
{
|
||||
return $this->_outputHeaders;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the StrikeIron subscription information for this service.
|
||||
* If any service method was recently called, the subscription info
|
||||
* should have been returned in the SOAP headers so it is cached
|
||||
* and returned from the cache. Otherwise, the getRemainingHits()
|
||||
* method is called as a dummy to get the subscription info headers.
|
||||
*
|
||||
* @param boolean $now Force a call to getRemainingHits instead of cache?
|
||||
* @param string $queryMethod Method that will cause SubscriptionInfo header to be sent
|
||||
* @return Zend_Service_StrikeIron_Decorator Decorated subscription info
|
||||
* @throws Zend_Service_StrikeIron_Exception
|
||||
*/
|
||||
public function getSubscriptionInfo($now = false, $queryMethod = 'GetRemainingHits')
|
||||
{
|
||||
if ($now || empty($this->_outputHeaders['SubscriptionInfo'])) {
|
||||
$this->$queryMethod();
|
||||
}
|
||||
|
||||
// capture subscription info if returned in output headers
|
||||
if (isset($this->_outputHeaders['SubscriptionInfo'])) {
|
||||
$info = (object)$this->_outputHeaders['SubscriptionInfo'];
|
||||
$subscriptionInfo = new Zend_Service_StrikeIron_Decorator($info, 'SubscriptionInfo');
|
||||
} else {
|
||||
$msg = 'No SubscriptionInfo header found in last output headers';
|
||||
/**
|
||||
* @see Zend_Service_StrikeIron_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/StrikeIron/Exception.php';
|
||||
throw new Zend_Service_StrikeIron_Exception($msg);
|
||||
}
|
||||
|
||||
return $subscriptionInfo;
|
||||
}
|
||||
}
|
143
libs/Zend/Service/StrikeIron/Decorator.php
Normal file
143
libs/Zend/Service/StrikeIron/Decorator.php
Normal file
@ -0,0 +1,143 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage StrikeIron
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: Decorator.php 8064 2008-02-16 10:58:39Z thomas $
|
||||
*/
|
||||
|
||||
/**
|
||||
* Decorates a StrikeIron response object returned by the SOAP extension
|
||||
* to provide more a PHP-like interface.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage StrikeIron
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_StrikeIron_Decorator
|
||||
{
|
||||
/**
|
||||
* Name of the decorated object
|
||||
* @var null|string
|
||||
*/
|
||||
protected $_name = null;
|
||||
|
||||
/**
|
||||
* Object to decorate
|
||||
* @var object
|
||||
*/
|
||||
protected $_object = null;
|
||||
|
||||
/**
|
||||
* Class constructor
|
||||
*
|
||||
* @param object $object Object to decorate
|
||||
* @param null|string $name Name of the object
|
||||
*/
|
||||
public function __construct($object, $name = null)
|
||||
{
|
||||
$this->_object = $object;
|
||||
$this->_name = $name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Proxy property access to the decorated object, inflecting
|
||||
* the property name and decorating any child objects returned.
|
||||
* If the property is not found in the decorated object, return
|
||||
* NULL as a convenience feature to avoid notices.
|
||||
*
|
||||
* @param string $property Property name to retrieve
|
||||
* @return mixed Value of property or NULL
|
||||
*/
|
||||
public function __get($property)
|
||||
{
|
||||
$result = null;
|
||||
|
||||
if (! isset($this->_object->$property)) {
|
||||
$property = $this->_inflect($property);
|
||||
}
|
||||
|
||||
if (isset($this->_object->$property)) {
|
||||
$result = $this->_object->$property;
|
||||
$result = $this->_decorate($result);
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Proxy method calls to the decorated object. This will only
|
||||
* be used when the SOAPClient returns a custom PHP object via
|
||||
* its classmap option so no inflection is done.
|
||||
*
|
||||
* @param string $method Name of method called
|
||||
* @param array $args Arguments for method
|
||||
*/
|
||||
public function __call($method, $args)
|
||||
{
|
||||
return call_user_func_array(array($this->_object, $method), $args);
|
||||
}
|
||||
|
||||
/**
|
||||
* Inflect a property name from PHP-style to the result object's
|
||||
* style. The default implementation here only inflects the case
|
||||
* of the first letter, e.g. from "fooBar" to "FooBar".
|
||||
*
|
||||
* @param string $property Property name to inflect
|
||||
* @return string Inflected property name
|
||||
*/
|
||||
protected function _inflect($property)
|
||||
{
|
||||
return ucfirst($property);
|
||||
}
|
||||
|
||||
/**
|
||||
* Decorate a value returned by the result object. The default
|
||||
* implementation here only decorates child objects.
|
||||
*
|
||||
* @param mixed $result Value to decorate
|
||||
* @return mixed Decorated result
|
||||
*/
|
||||
protected function _decorate($result)
|
||||
{
|
||||
if (is_object($result)) {
|
||||
$result = new self($result);
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the object being decorated
|
||||
*
|
||||
* @return object
|
||||
*/
|
||||
public function getDecoratedObject()
|
||||
{
|
||||
return $this->_object;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the name of the object being decorated
|
||||
*
|
||||
* @return null|string
|
||||
*/
|
||||
public function getDecoratedObjectName()
|
||||
{
|
||||
return $this->_name;
|
||||
}
|
||||
}
|
34
libs/Zend/Service/StrikeIron/Exception.php
Normal file
34
libs/Zend/Service/StrikeIron/Exception.php
Normal file
@ -0,0 +1,34 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage StrikeIron
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: Exception.php 8064 2008-02-16 10:58:39Z thomas $
|
||||
*/
|
||||
|
||||
/** Zend_Exception */
|
||||
require_once 'Zend/Exception.php';
|
||||
|
||||
/**
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage StrikeIron
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_StrikeIron_Exception extends Zend_Exception
|
||||
{}
|
45
libs/Zend/Service/StrikeIron/SalesUseTaxBasic.php
Normal file
45
libs/Zend/Service/StrikeIron/SalesUseTaxBasic.php
Normal file
@ -0,0 +1,45 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage StrikeIron
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: SalesUseTaxBasic.php 8064 2008-02-16 10:58:39Z thomas $
|
||||
*/
|
||||
|
||||
/** Zend_Service_StrikeIron_Base */
|
||||
require_once 'Zend/Service/StrikeIron/Base.php';
|
||||
|
||||
/**
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage StrikeIron
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_StrikeIron_SalesUseTaxBasic extends Zend_Service_StrikeIron_Base
|
||||
{
|
||||
/**
|
||||
* Configuration options
|
||||
* @param array
|
||||
*/
|
||||
protected $_options = array('username' => null,
|
||||
'password' => null,
|
||||
'client' => null,
|
||||
'options' => null,
|
||||
'headers' => null,
|
||||
'wsdl' => 'http://ws.strikeiron.com/zf1.StrikeIron/taxdatabasic4?WSDL');
|
||||
}
|
45
libs/Zend/Service/StrikeIron/USAddressVerification.php
Normal file
45
libs/Zend/Service/StrikeIron/USAddressVerification.php
Normal file
@ -0,0 +1,45 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage StrikeIron
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: USAddressVerification.php 8064 2008-02-16 10:58:39Z thomas $
|
||||
*/
|
||||
|
||||
/** Zend_Service_StrikeIron_Base */
|
||||
require_once 'Zend/Service/StrikeIron/Base.php';
|
||||
|
||||
/**
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage StrikeIron
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_StrikeIron_USAddressVerification extends Zend_Service_StrikeIron_Base
|
||||
{
|
||||
/**
|
||||
* Configuration options
|
||||
* @param array
|
||||
*/
|
||||
protected $_options = array('username' => null,
|
||||
'password' => null,
|
||||
'client' => null,
|
||||
'options' => null,
|
||||
'headers' => null,
|
||||
'wsdl' => 'http://ws.strikeiron.com/zf1.StrikeIron/USAddressVerification4_0?WSDL');
|
||||
}
|
45
libs/Zend/Service/StrikeIron/ZipCodeInfo.php
Normal file
45
libs/Zend/Service/StrikeIron/ZipCodeInfo.php
Normal file
@ -0,0 +1,45 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage StrikeIron
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: ZipCodeInfo.php 8064 2008-02-16 10:58:39Z thomas $
|
||||
*/
|
||||
|
||||
/** Zend_Service_StrikeIron_Base */
|
||||
require_once 'Zend/Service/StrikeIron/Base.php';
|
||||
|
||||
/**
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage StrikeIron
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_StrikeIron_ZipCodeInfo extends Zend_Service_StrikeIron_Base
|
||||
{
|
||||
/**
|
||||
* Configuration options
|
||||
* @param array
|
||||
*/
|
||||
protected $_options = array('username' => null,
|
||||
'password' => null,
|
||||
'client' => null,
|
||||
'options' => null,
|
||||
'headers' => null,
|
||||
'wsdl' => 'http://sdpws.strikeiron.com/zf1.StrikeIron/sdpZIPCodeInfo?WSDL');
|
||||
}
|
1028
libs/Zend/Service/Technorati.php
Normal file
1028
libs/Zend/Service/Technorati.php
Normal file
File diff suppressed because it is too large
Load Diff
242
libs/Zend/Service/Technorati/Author.php
Normal file
242
libs/Zend/Service/Technorati/Author.php
Normal file
@ -0,0 +1,242 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Technorati
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: Author.php 8064 2008-02-16 10:58:39Z thomas $
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @see Zend_Service_Technorati_Utils
|
||||
*/
|
||||
require_once 'Zend/Service/Technorati/Utils.php';
|
||||
|
||||
|
||||
/**
|
||||
* Represents a weblog Author object. It usually belongs to a Technorati account.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Technorati
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Technorati_Author
|
||||
{
|
||||
/**
|
||||
* Author first name
|
||||
*
|
||||
* @var string
|
||||
* @access protected
|
||||
*/
|
||||
protected $_firstName;
|
||||
|
||||
/**
|
||||
* Author last name
|
||||
*
|
||||
* @var string
|
||||
* @access protected
|
||||
*/
|
||||
protected $_lastName;
|
||||
|
||||
/**
|
||||
* Technorati account username
|
||||
*
|
||||
* @var string
|
||||
* @access protected
|
||||
*/
|
||||
protected $_username;
|
||||
|
||||
/**
|
||||
* Technorati account description
|
||||
*
|
||||
* @var string
|
||||
* @access protected
|
||||
*/
|
||||
protected $_description;
|
||||
|
||||
/**
|
||||
* Technorati account biography
|
||||
*
|
||||
* @var string
|
||||
* @access protected
|
||||
*/
|
||||
protected $_bio;
|
||||
|
||||
/**
|
||||
* Technorati account thumbnail picture URL, if any
|
||||
*
|
||||
* @var null|Zend_Uri_Http
|
||||
* @access protected
|
||||
*/
|
||||
protected $_thumbnailPicture;
|
||||
|
||||
|
||||
/**
|
||||
* Constructs a new object from DOM Element.
|
||||
*
|
||||
* @param DomElement $dom the ReST fragment for this object
|
||||
*/
|
||||
public function __construct(DomElement $dom)
|
||||
{
|
||||
$xpath = new DOMXPath($dom->ownerDocument);
|
||||
|
||||
$result = $xpath->query('./firstname/text()', $dom);
|
||||
if ($result->length == 1) $this->setFirstName($result->item(0)->data);
|
||||
|
||||
$result = $xpath->query('./lastname/text()', $dom);
|
||||
if ($result->length == 1) $this->setLastName($result->item(0)->data);
|
||||
|
||||
$result = $xpath->query('./username/text()', $dom);
|
||||
if ($result->length == 1) $this->setUsername($result->item(0)->data);
|
||||
|
||||
$result = $xpath->query('./description/text()', $dom);
|
||||
if ($result->length == 1) $this->setDescription($result->item(0)->data);
|
||||
|
||||
$result = $xpath->query('./bio/text()', $dom);
|
||||
if ($result->length == 1) $this->setBio($result->item(0)->data);
|
||||
|
||||
$result = $xpath->query('./thumbnailpicture/text()', $dom);
|
||||
if ($result->length == 1) $this->setThumbnailPicture($result->item(0)->data);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns Author first name.
|
||||
*
|
||||
* @return string Author first name
|
||||
*/
|
||||
public function getFirstName() {
|
||||
return $this->_firstName;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns Author last name.
|
||||
*
|
||||
* @return string Author last name
|
||||
*/
|
||||
public function getLastName() {
|
||||
return $this->_lastName;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns Technorati account username.
|
||||
*
|
||||
* @return string Technorati account username
|
||||
*/
|
||||
public function getUsername() {
|
||||
return $this->_username;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns Technorati account description.
|
||||
*
|
||||
* @return string Technorati account description
|
||||
*/
|
||||
public function getDescription() {
|
||||
return $this->_description;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns Technorati account biography.
|
||||
*
|
||||
* @return string Technorati account biography
|
||||
*/
|
||||
public function getBio() {
|
||||
return $this->_bio;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns Technorati account thumbnail picture.
|
||||
*
|
||||
* @return null|Zend_Uri_Http Technorati account thumbnail picture
|
||||
*/
|
||||
public function getThumbnailPicture() {
|
||||
return $this->_thumbnailPicture;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Sets author first name.
|
||||
*
|
||||
* @param string $input first Name input value
|
||||
* @return Zend_Service_Technorati_Author $this instance
|
||||
*/
|
||||
public function setFirstName($input) {
|
||||
$this->_firstName = (string) $input;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets author last name.
|
||||
*
|
||||
* @param string $input last Name input value
|
||||
* @return Zend_Service_Technorati_Author $this instance
|
||||
*/
|
||||
public function setLastName($input) {
|
||||
$this->_lastName = (string) $input;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets Technorati account username.
|
||||
*
|
||||
* @param string $input username input value
|
||||
* @return Zend_Service_Technorati_Author $this instance
|
||||
*/
|
||||
public function setUsername($input) {
|
||||
$this->_username = (string) $input;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets Technorati account biography.
|
||||
*
|
||||
* @param string $input biography input value
|
||||
* @return Zend_Service_Technorati_Author $this instance
|
||||
*/
|
||||
public function setBio($input) {
|
||||
$this->_bio = (string) $input;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets Technorati account description.
|
||||
*
|
||||
* @param string $input description input value
|
||||
* @return Zend_Service_Technorati_Author $this instance
|
||||
*/
|
||||
public function setDescription($input) {
|
||||
$this->_description = (string) $input;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets Technorati account thumbnail picture.
|
||||
*
|
||||
* @param string|Zend_Uri_Http $input thumbnail picture URI
|
||||
* @return Zend_Service_Technorati_Author $this instance
|
||||
* @throws Zend_Service_Technorati_Exception if $input is an invalid URI
|
||||
* (via Zend_Service_Technorati_Utils::normalizeUriHttp)
|
||||
*/
|
||||
public function setThumbnailPicture($input) {
|
||||
$this->_thumbnailPicture = Zend_Service_Technorati_Utils::normalizeUriHttp($input);
|
||||
return $this;
|
||||
}
|
||||
|
||||
}
|
161
libs/Zend/Service/Technorati/BlogInfoResult.php
Normal file
161
libs/Zend/Service/Technorati/BlogInfoResult.php
Normal file
@ -0,0 +1,161 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Technorati
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: BlogInfoResult.php 8064 2008-02-16 10:58:39Z thomas $
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @see Zend_Service_Technorati_Utils
|
||||
*/
|
||||
require_once 'Zend/Service/Technorati/Utils.php';
|
||||
|
||||
|
||||
/**
|
||||
* Represents a single Technorati BlogInfo query result object.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Technorati
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Technorati_BlogInfoResult
|
||||
{
|
||||
/**
|
||||
* Technorati weblog url, if queried URL is a valid weblog.
|
||||
*
|
||||
* @var Zend_Uri_Http
|
||||
* @access protected
|
||||
*/
|
||||
protected $_url;
|
||||
|
||||
/**
|
||||
* Technorati weblog, if queried URL is a valid weblog.
|
||||
*
|
||||
* @var Zend_Service_Technorati_Weblog
|
||||
* @access protected
|
||||
*/
|
||||
protected $_weblog;
|
||||
|
||||
/**
|
||||
* Number of unique blogs linking this blog
|
||||
*
|
||||
* @var integer
|
||||
* @access protected
|
||||
*/
|
||||
protected $_inboundBlogs;
|
||||
|
||||
/**
|
||||
* Number of incoming links to this blog
|
||||
*
|
||||
* @var integer
|
||||
* @access protected
|
||||
*/
|
||||
protected $_inboundLinks;
|
||||
|
||||
|
||||
/**
|
||||
* Constructs a new object object from DOM Document.
|
||||
*
|
||||
* @param DomDocument $dom the ReST fragment for this object
|
||||
*/
|
||||
public function __construct(DomDocument $dom)
|
||||
{
|
||||
$xpath = new DOMXPath($dom);
|
||||
/**
|
||||
* @see Zend_Service_Technorati_Weblog
|
||||
*/
|
||||
require_once 'Zend/Service/Technorati/Weblog.php';
|
||||
|
||||
$result = $xpath->query('//result/weblog');
|
||||
if ($result->length == 1) {
|
||||
$this->_weblog = new Zend_Service_Technorati_Weblog($result->item(0));
|
||||
} else {
|
||||
// follow the same behavior of blogPostTags
|
||||
// and raise an Exception if the URL is not a valid weblog
|
||||
/**
|
||||
* @see Zend_Service_Technorati_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Technorati/Exception.php';
|
||||
throw new Zend_Service_Technorati_Exception(
|
||||
"Your URL is not a recognized Technorati weblog");
|
||||
}
|
||||
|
||||
$result = $xpath->query('//result/url/text()');
|
||||
if ($result->length == 1) {
|
||||
try {
|
||||
// fetched URL often doens't include schema
|
||||
// and this issue causes the following line to fail
|
||||
$this->_url = Zend_Service_Technorati_Utils::normalizeUriHttp($result->item(0)->data);
|
||||
} catch(Zend_Service_Technorati_Exception $e) {
|
||||
if ($this->getWeblog() instanceof Zend_Service_Technorati_Weblog) {
|
||||
$this->_url = $this->getWeblog()->getUrl();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$result = $xpath->query('//result/inboundblogs/text()');
|
||||
if ($result->length == 1) $this->_inboundBlogs = (int) $result->item(0)->data;
|
||||
|
||||
$result = $xpath->query('//result/inboundlinks/text()');
|
||||
if ($result->length == 1) $this->_inboundLinks = (int) $result->item(0)->data;
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns the weblog URL.
|
||||
*
|
||||
* @return Zend_Uri_Http
|
||||
*/
|
||||
public function getUrl() {
|
||||
return $this->_url;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the weblog.
|
||||
*
|
||||
* @return Zend_Service_Technorati_Weblog
|
||||
*/
|
||||
public function getWeblog() {
|
||||
return $this->_weblog;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns number of unique blogs linking this blog.
|
||||
*
|
||||
* @return integer the number of inbound blogs
|
||||
*/
|
||||
public function getInboundBlogs()
|
||||
{
|
||||
return (int) $this->_inboundBlogs;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns number of incoming links to this blog.
|
||||
*
|
||||
* @return integer the number of inbound links
|
||||
*/
|
||||
public function getInboundLinks()
|
||||
{
|
||||
return (int) $this->_inboundLinks;
|
||||
}
|
||||
|
||||
}
|
152
libs/Zend/Service/Technorati/CosmosResult.php
Normal file
152
libs/Zend/Service/Technorati/CosmosResult.php
Normal file
@ -0,0 +1,152 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Technorati
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: CosmosResult.php 8064 2008-02-16 10:58:39Z thomas $
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @see Zend_Service_Technorati_Result
|
||||
*/
|
||||
require_once 'Zend/Service/Technorati/Result.php';
|
||||
|
||||
|
||||
/**
|
||||
* Represents a single Technorati Cosmos query result object.
|
||||
* It is never returned as a standalone object,
|
||||
* but it always belongs to a valid Zend_Service_Technorati_CosmosResultSet object.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Technorati
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Technorati_CosmosResult extends Zend_Service_Technorati_Result
|
||||
{
|
||||
/**
|
||||
* Technorati weblog object that links queried URL.
|
||||
*
|
||||
* @var Zend_Service_Technorati_Weblog
|
||||
* @access protected
|
||||
*/
|
||||
protected $_weblog;
|
||||
|
||||
/**
|
||||
* The nearest permalink tracked for queried URL.
|
||||
*
|
||||
* @var Zend_Uri_Http
|
||||
* @access protected
|
||||
*/
|
||||
protected $_nearestPermalink;
|
||||
|
||||
/**
|
||||
* The excerpt of the blog/page linking queried URL.
|
||||
*
|
||||
* @var string
|
||||
* @access protected
|
||||
*/
|
||||
protected $_excerpt;
|
||||
|
||||
/**
|
||||
* The the datetime the link was created.
|
||||
*
|
||||
* @var Zend_Date
|
||||
* @access protected
|
||||
*/
|
||||
protected $_linkCreated;
|
||||
|
||||
/**
|
||||
* The URL of the specific link target page
|
||||
*
|
||||
* @var Zend_Uri_Http
|
||||
* @access protected
|
||||
*/
|
||||
protected $_linkUrl;
|
||||
|
||||
|
||||
/**
|
||||
* Constructs a new object object from DOM Element.
|
||||
*
|
||||
* @param DomElement $dom the ReST fragment for this object
|
||||
*/
|
||||
public function __construct(DomElement $dom)
|
||||
{
|
||||
$this->_fields = array( '_nearestPermalink' => 'nearestpermalink',
|
||||
'_excerpt' => 'excerpt',
|
||||
'_linkCreated' => 'linkcreated',
|
||||
'_linkUrl' => 'linkurl');
|
||||
parent::__construct($dom);
|
||||
|
||||
// weblog object field
|
||||
$this->_parseWeblog();
|
||||
|
||||
// filter fields
|
||||
$this->_nearestPermalink = Zend_Service_Technorati_Utils::normalizeUriHttp($this->_nearestPermalink);
|
||||
$this->_linkUrl = Zend_Service_Technorati_Utils::normalizeUriHttp($this->_linkUrl);
|
||||
$this->_linkCreated = Zend_Service_Technorati_Utils::normalizeDate($this->_linkCreated);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the weblog object that links queried URL.
|
||||
*
|
||||
* @return Zend_Service_Technorati_Weblog
|
||||
*/
|
||||
public function getWeblog() {
|
||||
return $this->_weblog;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the nearest permalink tracked for queried URL.
|
||||
*
|
||||
* @return Zend_Uri_Http
|
||||
*/
|
||||
public function getNearestPermalink() {
|
||||
return $this->_nearestPermalink;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the excerpt of the blog/page linking queried URL.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getExcerpt() {
|
||||
return $this->_excerpt;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the datetime the link was created.
|
||||
*
|
||||
* @return Zend_Date
|
||||
*/
|
||||
public function getLinkCreated() {
|
||||
return $this->_linkCreated;
|
||||
}
|
||||
|
||||
/**
|
||||
* If queried URL is a valid blog,
|
||||
* returns the URL of the specific link target page.
|
||||
*
|
||||
* @return Zend_Uri_Http
|
||||
*/
|
||||
public function getLinkUrl() {
|
||||
return $this->_linkUrl;
|
||||
}
|
||||
|
||||
}
|
176
libs/Zend/Service/Technorati/CosmosResultSet.php
Normal file
176
libs/Zend/Service/Technorati/CosmosResultSet.php
Normal file
@ -0,0 +1,176 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Technorati
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: CosmosResultSet.php 8064 2008-02-16 10:58:39Z thomas $
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @see Zend_Service_Technorati_ResultSet
|
||||
*/
|
||||
require_once 'Zend/Service/Technorati/ResultSet.php';
|
||||
|
||||
|
||||
/**
|
||||
* Represents a Technorati Cosmos query result set.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Technorati
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Technorati_CosmosResultSet extends Zend_Service_Technorati_ResultSet
|
||||
{
|
||||
/**
|
||||
* Technorati weblog url, if queried URL is a valid weblog.
|
||||
*
|
||||
* @var Zend_Uri_Http
|
||||
* @access protected
|
||||
*/
|
||||
protected $_url;
|
||||
|
||||
/**
|
||||
* Technorati weblog, if queried URL is a valid weblog.
|
||||
*
|
||||
* @var Zend_Service_Technorati_Weblog
|
||||
* @access protected
|
||||
*/
|
||||
protected $_weblog;
|
||||
|
||||
/**
|
||||
* Number of unique blogs linking this blog
|
||||
*
|
||||
* @var integer
|
||||
* @access protected
|
||||
*/
|
||||
protected $_inboundBlogs;
|
||||
|
||||
/**
|
||||
* Number of incoming links to this blog
|
||||
*
|
||||
* @var integer
|
||||
* @access protected
|
||||
*/
|
||||
protected $_inboundLinks;
|
||||
|
||||
/**
|
||||
* Parses the search response and retrieve the results for iteration.
|
||||
*
|
||||
* @param DomDocument $dom the ReST fragment for this object
|
||||
* @param array $options query options as associative array
|
||||
*/
|
||||
public function __construct(DomDocument $dom, $options = array())
|
||||
{
|
||||
parent::__construct($dom, $options);
|
||||
|
||||
$result = $this->_xpath->query('/tapi/document/result/inboundlinks/text()');
|
||||
if ($result->length == 1) $this->_inboundLinks = (int) $result->item(0)->data;
|
||||
|
||||
$result = $this->_xpath->query('/tapi/document/result/inboundblogs/text()');
|
||||
if ($result->length == 1) $this->_inboundBlogs = (int) $result->item(0)->data;
|
||||
|
||||
$result = $this->_xpath->query('/tapi/document/result/weblog');
|
||||
if ($result->length == 1) {
|
||||
/**
|
||||
* @see Zend_Service_Technorati_Weblog
|
||||
*/
|
||||
require_once 'Zend/Service/Technorati/Weblog.php';
|
||||
$this->_weblog = new Zend_Service_Technorati_Weblog($result->item(0));
|
||||
}
|
||||
|
||||
$result = $this->_xpath->query('/tapi/document/result/url/text()');
|
||||
if ($result->length == 1) {
|
||||
try {
|
||||
// fetched URL often doens't include schema
|
||||
// and this issue causes the following line to fail
|
||||
$this->_url = Zend_Service_Technorati_Utils::normalizeUriHttp($result->item(0)->data);
|
||||
} catch(Zend_Service_Technorati_Exception $e) {
|
||||
if ($this->getWeblog() instanceof Zend_Service_Technorati_Weblog) {
|
||||
$this->_url = $this->getWeblog()->getUrl();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$this->_totalResultsReturned = (int) $this->_xpath->evaluate("count(/tapi/document/item)");
|
||||
|
||||
// total number of results depends on query type
|
||||
// for now check only getInboundLinks() and getInboundBlogs() value
|
||||
if ((int) $this->getInboundLinks() > 0) {
|
||||
$this->_totalResultsAvailable = $this->getInboundLinks();
|
||||
} elseif ((int) $this->getInboundBlogs() > 0) {
|
||||
$this->_totalResultsAvailable = $this->getInboundBlogs();
|
||||
} else {
|
||||
$this->_totalResultsAvailable = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns the weblog URL.
|
||||
*
|
||||
* @return Zend_Uri_Http
|
||||
*/
|
||||
public function getUrl() {
|
||||
return $this->_url;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the weblog.
|
||||
*
|
||||
* @return Zend_Service_Technorati_Weblog
|
||||
*/
|
||||
public function getWeblog() {
|
||||
return $this->_weblog;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns number of unique blogs linking this blog.
|
||||
*
|
||||
* @return integer the number of inbound blogs
|
||||
*/
|
||||
public function getInboundBlogs()
|
||||
{
|
||||
return $this->_inboundBlogs;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns number of incoming links to this blog.
|
||||
*
|
||||
* @return integer the number of inbound links
|
||||
*/
|
||||
public function getInboundLinks()
|
||||
{
|
||||
return $this->_inboundLinks;
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements Zend_Service_Technorati_ResultSet::current().
|
||||
*
|
||||
* @return Zend_Service_Technorati_CosmosResult current result
|
||||
*/
|
||||
public function current()
|
||||
{
|
||||
/**
|
||||
* @see Zend_Service_Technorati_CosmosResult
|
||||
*/
|
||||
require_once 'Zend/Service/Technorati/CosmosResult.php';
|
||||
return new Zend_Service_Technorati_CosmosResult($this->_results->item($this->_currentIndex));
|
||||
}
|
||||
}
|
93
libs/Zend/Service/Technorati/DailyCountsResult.php
Normal file
93
libs/Zend/Service/Technorati/DailyCountsResult.php
Normal file
@ -0,0 +1,93 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Technorati
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: DailyCountsResult.php 8064 2008-02-16 10:58:39Z thomas $
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @see Zend_Service_Technorati_Result
|
||||
*/
|
||||
require_once 'Zend/Service/Technorati/Result.php';
|
||||
|
||||
|
||||
/**
|
||||
* Represents a single Technorati DailyCounts query result object.
|
||||
* It is never returned as a standalone object,
|
||||
* but it always belongs to a valid Zend_Service_Technorati_DailyCountsResultSet object.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Technorati
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Technorati_DailyCountsResult extends Zend_Service_Technorati_Result
|
||||
{
|
||||
/**
|
||||
* Date of count.
|
||||
*
|
||||
* @var Zend_Date
|
||||
* @access protected
|
||||
*/
|
||||
protected $_date;
|
||||
|
||||
/**
|
||||
* Number of posts containing query on given date.
|
||||
*
|
||||
* @var int
|
||||
* @access protected
|
||||
*/
|
||||
protected $_count;
|
||||
|
||||
|
||||
/**
|
||||
* Constructs a new object object from DOM Document.
|
||||
*
|
||||
* @param DomElement $dom the ReST fragment for this object
|
||||
*/
|
||||
public function __construct(DomElement $dom)
|
||||
{
|
||||
$this->_fields = array( '_date' => 'date',
|
||||
'_count' => 'count');
|
||||
parent::__construct($dom);
|
||||
|
||||
// filter fields
|
||||
$this->_date = new Zend_Date(strtotime($this->_date));
|
||||
$this->_count = (int) $this->_count;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the date of count.
|
||||
*
|
||||
* @return Zend_Date
|
||||
*/
|
||||
public function getDate() {
|
||||
return $this->_date;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the number of posts containing query on given date.
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function getCount() {
|
||||
return $this->_count;
|
||||
}
|
||||
}
|
125
libs/Zend/Service/Technorati/DailyCountsResultSet.php
Normal file
125
libs/Zend/Service/Technorati/DailyCountsResultSet.php
Normal file
@ -0,0 +1,125 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Technorati
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: DailyCountsResultSet.php 8064 2008-02-16 10:58:39Z thomas $
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @see Zend_Date
|
||||
*/
|
||||
require_once 'Zend/Date.php';
|
||||
|
||||
/**
|
||||
* @see Zend_Service_Technorati_ResultSet
|
||||
*/
|
||||
require_once 'Zend/Service/Technorati/ResultSet.php';
|
||||
|
||||
/**
|
||||
* @see Zend_Service_Technorati_Utils
|
||||
*/
|
||||
require_once 'Zend/Service/Technorati/Utils.php';
|
||||
|
||||
|
||||
/**
|
||||
* Represents a Technorati Tag query result set.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Technorati
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Technorati_DailyCountsResultSet extends Zend_Service_Technorati_ResultSet
|
||||
{
|
||||
/**
|
||||
* Technorati search URL for given query.
|
||||
*
|
||||
* @var Zend_Uri_Http
|
||||
* @access protected
|
||||
*/
|
||||
protected $_searchUrl;
|
||||
|
||||
/**
|
||||
* Number of days for which counts provided.
|
||||
*
|
||||
* @var Zend_Service_Technorati_Weblog
|
||||
* @access protected
|
||||
*/
|
||||
protected $_days;
|
||||
|
||||
/**
|
||||
* Parses the search response and retrieve the results for iteration.
|
||||
*
|
||||
* @param DomDocument $dom the ReST fragment for this object
|
||||
* @param array $options query options as associative array
|
||||
*/
|
||||
public function __construct(DomDocument $dom, $options = array())
|
||||
{
|
||||
parent::__construct($dom, $options);
|
||||
|
||||
// default locale prevent Zend_Date to fail
|
||||
// when script is executed via shell
|
||||
// Zend_Locale::setDefault('en');
|
||||
|
||||
$result = $this->_xpath->query('/tapi/document/result/days/text()');
|
||||
if ($result->length == 1) $this->_days = (int) $result->item(0)->data;
|
||||
|
||||
$result = $this->_xpath->query('/tapi/document/result/searchurl/text()');
|
||||
if ($result->length == 1) {
|
||||
$this->_searchUrl = Zend_Service_Technorati_Utils::normalizeUriHttp($result->item(0)->data);
|
||||
}
|
||||
|
||||
$this->_totalResultsReturned = (int) $this->_xpath->evaluate("count(/tapi/document/items/item)");
|
||||
$this->_totalResultsAvailable = (int) $this->getDays();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns the search URL for given query.
|
||||
*
|
||||
* @return Zend_Uri_Http
|
||||
*/
|
||||
public function getSearchUrl() {
|
||||
return $this->_searchUrl;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the number of days for which counts provided.
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function getDays() {
|
||||
return $this->_days;
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements Zend_Service_Technorati_ResultSet::current().
|
||||
*
|
||||
* @return Zend_Service_Technorati_DailyCountsResult current result
|
||||
*/
|
||||
public function current()
|
||||
{
|
||||
/**
|
||||
* @see Zend_Service_Technorati_DailyCountsResult
|
||||
*/
|
||||
require_once 'Zend/Service/Technorati/DailyCountsResult.php';
|
||||
return new Zend_Service_Technorati_DailyCountsResult($this->_results->item($this->_currentIndex));
|
||||
}
|
||||
}
|
39
libs/Zend/Service/Technorati/Exception.php
Normal file
39
libs/Zend/Service/Technorati/Exception.php
Normal file
@ -0,0 +1,39 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Technorati
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: Exception.php 8064 2008-02-16 10:58:39Z thomas $
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @see Zend_Service_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Exception.php';
|
||||
|
||||
|
||||
/**
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Technorati
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Technorati_Exception extends Zend_Service_Exception
|
||||
{}
|
||||
|
103
libs/Zend/Service/Technorati/GetInfoResult.php
Normal file
103
libs/Zend/Service/Technorati/GetInfoResult.php
Normal file
@ -0,0 +1,103 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Technorati
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: GetInfoResult.php 8064 2008-02-16 10:58:39Z thomas $
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Represents a single Technorati GetInfo query result object.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Technorati
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Technorati_GetInfoResult
|
||||
{
|
||||
/**
|
||||
* Technorati author
|
||||
*
|
||||
* @var Zend_Service_Technorati_Author
|
||||
* @access protected
|
||||
*/
|
||||
protected $_author;
|
||||
|
||||
/**
|
||||
* A list of weblogs claimed by this author
|
||||
*
|
||||
* @var array
|
||||
* @access protected
|
||||
*/
|
||||
protected $_weblogs = array();
|
||||
|
||||
|
||||
/**
|
||||
* Constructs a new object object from DOM Document.
|
||||
*
|
||||
* @param DomDocument $dom the ReST fragment for this object
|
||||
*/
|
||||
public function __construct(DomDocument $dom)
|
||||
{
|
||||
$xpath = new DOMXPath($dom);
|
||||
|
||||
/**
|
||||
* @see Zend_Service_Technorati_Author
|
||||
*/
|
||||
require_once 'Zend/Service/Technorati/Author.php';
|
||||
|
||||
$result = $xpath->query('//result');
|
||||
if ($result->length == 1) {
|
||||
$this->_author = new Zend_Service_Technorati_Author($result->item(0));
|
||||
}
|
||||
|
||||
/**
|
||||
* @see Zend_Service_Technorati_Weblog
|
||||
*/
|
||||
require_once 'Zend/Service/Technorati/Weblog.php';
|
||||
|
||||
$result = $xpath->query('//item/weblog');
|
||||
if ($result->length >= 1) {
|
||||
foreach ($result as $weblog) {
|
||||
$this->_weblogs[] = new Zend_Service_Technorati_Weblog($weblog);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns the author associated with queried username.
|
||||
*
|
||||
* @return Zend_Service_Technorati_Author
|
||||
*/
|
||||
public function getAuthor() {
|
||||
return $this->_author;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the collection of weblogs authored by queried username.
|
||||
*
|
||||
* @return array of Zend_Service_Technorati_Weblog
|
||||
*/
|
||||
public function getWeblogs() {
|
||||
return $this->_weblogs;
|
||||
}
|
||||
|
||||
}
|
118
libs/Zend/Service/Technorati/KeyInfoResult.php
Normal file
118
libs/Zend/Service/Technorati/KeyInfoResult.php
Normal file
@ -0,0 +1,118 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Technorati
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: KeyInfoResult.php 8064 2008-02-16 10:58:39Z thomas $
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Represents a single Technorati KeyInfo query result object.
|
||||
* It provides information about your Technorati API Key daily usage.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Technorati
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Technorati_KeyInfoResult
|
||||
{
|
||||
/**
|
||||
* Technorati API key
|
||||
*
|
||||
* @var string
|
||||
* @access protected
|
||||
*/
|
||||
protected $_apiKey;
|
||||
|
||||
/**
|
||||
* Number of queries used today
|
||||
*
|
||||
* @var int
|
||||
* @access protected
|
||||
*/
|
||||
protected $_apiQueries;
|
||||
|
||||
/**
|
||||
* Total number of available queries per day
|
||||
*
|
||||
* @var int
|
||||
* @access protected
|
||||
*/
|
||||
protected $_maxQueries;
|
||||
|
||||
|
||||
/**
|
||||
* Constructs a new object from DOM Element.
|
||||
* Parses given Key element from $dom and sets API key string.
|
||||
*
|
||||
* @param DomElement $dom the ReST fragment for this object
|
||||
* @param string $apiKey the API Key string
|
||||
*/
|
||||
public function __construct(DomDocument $dom, $apiKey = null)
|
||||
{
|
||||
// $this->_dom = $dom;
|
||||
// $this->_xpath = new DOMXPath($dom);
|
||||
$xpath = new DOMXPath($dom);
|
||||
|
||||
$this->_apiQueries = (int) $xpath->query('/tapi/document/result/apiqueries/text()')->item(0)->data;
|
||||
$this->_maxQueries = (int) $xpath->query('/tapi/document/result/maxqueries/text()')->item(0)->data;
|
||||
$this->setApiKey($apiKey);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns API Key string.
|
||||
*
|
||||
* @return string API Key string
|
||||
*/
|
||||
public function getApiKey() {
|
||||
return $this->_apiKey;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the number of queries sent today.
|
||||
*
|
||||
* @return int number of queries sent today
|
||||
*/
|
||||
public function getApiQueries() {
|
||||
return $this->_apiQueries;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns Key's daily query limit.
|
||||
*
|
||||
* @return int maximum number of available queries per day
|
||||
*/
|
||||
public function getMaxQueries() {
|
||||
return $this->_maxQueries;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Sets API Key string.
|
||||
*
|
||||
* @param string $apiKey the API Key
|
||||
* @return Zend_Service_Technorati_KeyInfoResult $this instance
|
||||
*/
|
||||
public function setApiKey($apiKey) {
|
||||
$this->_apiKey = $apiKey;
|
||||
return $this;
|
||||
}
|
||||
}
|
121
libs/Zend/Service/Technorati/Result.php
Normal file
121
libs/Zend/Service/Technorati/Result.php
Normal file
@ -0,0 +1,121 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Technorati
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: Result.php 8064 2008-02-16 10:58:39Z thomas $
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Represents a single Technorati Search query result object.
|
||||
* It is never returned as a standalone object,
|
||||
* but it always belongs to a valid Zend_Service_Technorati_SearchResultSet object.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Technorati
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @abstract
|
||||
*/
|
||||
abstract class Zend_Service_Technorati_Result
|
||||
{
|
||||
/**
|
||||
* An associative array of 'fieldName' => 'xmlfieldtag'
|
||||
*
|
||||
* @var array
|
||||
* @access protected
|
||||
*/
|
||||
protected $_fields;
|
||||
|
||||
/**
|
||||
* The ReST fragment for this result object
|
||||
*
|
||||
* @var DomElement
|
||||
* @access protected
|
||||
*/
|
||||
protected $_dom;
|
||||
|
||||
/**
|
||||
* Object for $this->_dom
|
||||
*
|
||||
* @var DOMXpath
|
||||
* @access protected
|
||||
*/
|
||||
protected $_xpath;
|
||||
|
||||
|
||||
/**
|
||||
* Constructs a new object from DOM Element.
|
||||
* Properties are automatically fetched from XML
|
||||
* according to array of $_fields to be read.
|
||||
*
|
||||
* @param DomElement $result the ReST fragment for this object
|
||||
*/
|
||||
public function __construct(DomElement $dom)
|
||||
{
|
||||
$this->_xpath = new DOMXPath($dom->ownerDocument);
|
||||
$this->_dom = $dom;
|
||||
|
||||
// default fields for all search results
|
||||
$fields = array();
|
||||
|
||||
// merge with child's object fields
|
||||
$this->_fields = array_merge($this->_fields, $fields);
|
||||
|
||||
// add results to appropriate fields
|
||||
foreach($this->_fields as $phpName => $xmlName) {
|
||||
$query = "./$xmlName/text()";
|
||||
$node = $this->_xpath->query($query, $this->_dom);
|
||||
if ($node->length == 1) {
|
||||
$this->{$phpName} = (string) $node->item(0)->data;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Parses weblog node and sets weblog object.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
protected function _parseWeblog()
|
||||
{
|
||||
// weblog object field
|
||||
$result = $this->_xpath->query('./weblog', $this->_dom);
|
||||
if ($result->length == 1) {
|
||||
/**
|
||||
* @see Zend_Service_Technorati_Weblog
|
||||
*/
|
||||
require_once 'Zend/Service/Technorati/Weblog.php';
|
||||
$this->_weblog = new Zend_Service_Technorati_Weblog($result->item(0));
|
||||
} else {
|
||||
$this->_weblog = null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the document fragment for this object as XML string.
|
||||
*
|
||||
* @return string the document fragment for this object
|
||||
* converted into XML format
|
||||
*/
|
||||
public function getXml()
|
||||
{
|
||||
return $this->_dom->ownerDocument->saveXML($this->_dom);
|
||||
}
|
||||
}
|
290
libs/Zend/Service/Technorati/ResultSet.php
Normal file
290
libs/Zend/Service/Technorati/ResultSet.php
Normal file
@ -0,0 +1,290 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Technorati
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: ResultSet.php 8064 2008-02-16 10:58:39Z thomas $
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @see Zend_Service_Technorati_Result
|
||||
*/
|
||||
require_once 'Zend/Service/Technorati/Result.php';
|
||||
|
||||
|
||||
/**
|
||||
* This is the most essential result set.
|
||||
* The scope of this class is to be extended by a query-specific child result set class,
|
||||
* and it should never be used to initialize a standalone object.
|
||||
*
|
||||
* Each of the specific result sets represents a collection of query-specific
|
||||
* Zend_Service_Technorati_Result objects.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Technorati
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @abstract
|
||||
*/
|
||||
abstract class Zend_Service_Technorati_ResultSet implements SeekableIterator
|
||||
{
|
||||
/**
|
||||
* The total number of results available
|
||||
*
|
||||
* @var int
|
||||
* @access protected
|
||||
*/
|
||||
protected $_totalResultsAvailable;
|
||||
|
||||
/**
|
||||
* The number of results in this result set
|
||||
*
|
||||
* @var int
|
||||
* @access protected
|
||||
*/
|
||||
protected $_totalResultsReturned;
|
||||
|
||||
/**
|
||||
* The offset in the total result set of this search set
|
||||
*
|
||||
* @var int
|
||||
* @todo
|
||||
*/
|
||||
// public $firstResultPosition;
|
||||
|
||||
|
||||
/**
|
||||
* A DomNodeList of results
|
||||
*
|
||||
* @var DomNodeList
|
||||
* @access protected
|
||||
*/
|
||||
protected $_results;
|
||||
|
||||
/**
|
||||
* Technorati API response document
|
||||
*
|
||||
* @var DomDocument
|
||||
* @access protected
|
||||
*/
|
||||
protected $_dom;
|
||||
|
||||
/**
|
||||
* Object for $this->_dom
|
||||
*
|
||||
* @var DOMXpath
|
||||
* @access protected
|
||||
*/
|
||||
protected $_xpath;
|
||||
|
||||
/**
|
||||
* XML string representation for $this->_dom
|
||||
*
|
||||
* @var string
|
||||
* @access protected
|
||||
*/
|
||||
protected $_xml;
|
||||
|
||||
/**
|
||||
* Current Item
|
||||
*
|
||||
* @var int
|
||||
* @access protected
|
||||
*/
|
||||
protected $_currentIndex = 0;
|
||||
|
||||
|
||||
/**
|
||||
* Parses the search response and retrieves the results for iteration.
|
||||
*
|
||||
* @param DomDocument $dom the ReST fragment for this object
|
||||
* @param array $options query options as associative array
|
||||
*/
|
||||
public function __construct(DomDocument $dom, $options = array())
|
||||
{
|
||||
$this->_init($dom, $options);
|
||||
|
||||
// Technorati loves to make developer's life really hard
|
||||
// I must read query options in order to normalize a single way
|
||||
// to display start and limit.
|
||||
// The value is printed out in XML using many different tag names,
|
||||
// too hard to get it from XML
|
||||
|
||||
// Additionally, the following tags should be always available
|
||||
// according to API documentation but... this is not the truth!
|
||||
// - querytime
|
||||
// - limit
|
||||
// - start (sometimes rankingstart)
|
||||
|
||||
// query tag is only available for some requests, the same for url.
|
||||
// For now ignore them.
|
||||
|
||||
//$start = isset($options['start']) ? $options['start'] : 1;
|
||||
//$limit = isset($options['limit']) ? $options['limit'] : 20;
|
||||
//$this->_firstResultPosition = $start;
|
||||
}
|
||||
|
||||
/**
|
||||
* Initializes this object from a DomDocument response.
|
||||
*
|
||||
* Because __construct and __wakeup shares some common executions,
|
||||
* it's useful to group them in a single initialization method.
|
||||
* This method is called once each time a new instance is created
|
||||
* or a serialized object is unserialized.
|
||||
*
|
||||
* @param DomDocument $dom the ReST fragment for this object
|
||||
* @param array $options query options as associative array
|
||||
* * @return void
|
||||
*/
|
||||
protected function _init(DomDocument $dom, $options = array())
|
||||
{
|
||||
$this->_dom = $dom;
|
||||
$this->_xpath = new DOMXPath($dom);
|
||||
|
||||
$this->_results = $this->_xpath->query("//item");
|
||||
}
|
||||
|
||||
/**
|
||||
* Number of results returned.
|
||||
*
|
||||
* @return int total number of results returned
|
||||
*/
|
||||
public function totalResults()
|
||||
{
|
||||
return (int) $this->_totalResultsReturned;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Number of available results.
|
||||
*
|
||||
* @return int total number of available results
|
||||
*/
|
||||
public function totalResultsAvailable()
|
||||
{
|
||||
return (int) $this->_totalResultsAvailable;
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements SeekableIterator::current().
|
||||
*
|
||||
* @return void
|
||||
* @throws Zend_Service_Exception
|
||||
* @abstract
|
||||
*/
|
||||
// abstract public function current();
|
||||
|
||||
/**
|
||||
* Implements SeekableIterator::key().
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function key()
|
||||
{
|
||||
return $this->_currentIndex;
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements SeekableIterator::next().
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function next()
|
||||
{
|
||||
$this->_currentIndex += 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements SeekableIterator::rewind().
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function rewind()
|
||||
{
|
||||
$this->_currentIndex = 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Implement SeekableIterator::seek().
|
||||
*
|
||||
* @param int $index
|
||||
* @return void
|
||||
* @throws OutOfBoundsException
|
||||
*/
|
||||
public function seek($index)
|
||||
{
|
||||
$indexInt = (int) $index;
|
||||
if ($indexInt >= 0 && $indexInt < $this->_results->length) {
|
||||
$this->_currentIndex = $indexInt;
|
||||
} else {
|
||||
throw new OutOfBoundsException("Illegal index '$index'");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Implement SeekableIterator::valid().
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
public function valid()
|
||||
{
|
||||
return null !== $this->_results && $this->_currentIndex < $this->_results->length;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the response document as XML string.
|
||||
*
|
||||
* @return string the response document converted into XML format
|
||||
*/
|
||||
public function getXml()
|
||||
{
|
||||
return $this->_dom->saveXML();
|
||||
}
|
||||
|
||||
/**
|
||||
* Overwrites standard __sleep method to make this object serializable.
|
||||
*
|
||||
* DomDocument and DOMXpath objects cannot be serialized.
|
||||
* This method converts them back to an XML string.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __sleep() {
|
||||
$this->_xml = $this->getXml();
|
||||
$vars = array_keys(get_object_vars($this));
|
||||
return array_diff($vars, array('_dom', '_xpath'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Overwrites standard __wakeup method to make this object unserializable.
|
||||
*
|
||||
* Restores object status before serialization.
|
||||
* Converts XML string into a DomDocument object and creates a valid
|
||||
* DOMXpath instance for given DocDocument.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __wakeup() {
|
||||
$dom = new DOMDocument();
|
||||
$dom->loadXml($this->_xml);
|
||||
$this->_init($dom);
|
||||
$this->_xml = null; // reset XML content
|
||||
}
|
||||
}
|
150
libs/Zend/Service/Technorati/SearchResult.php
Normal file
150
libs/Zend/Service/Technorati/SearchResult.php
Normal file
@ -0,0 +1,150 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Technorati
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: SearchResult.php 8064 2008-02-16 10:58:39Z thomas $
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @see Zend_Service_Technorati_Result
|
||||
*/
|
||||
require_once 'Zend/Service/Technorati/Result.php';
|
||||
|
||||
|
||||
/**
|
||||
* Represents a single Technorati Search query result object.
|
||||
* It is never returned as a standalone object,
|
||||
* but it always belongs to a valid Zend_Service_Technorati_SearchResultSet object.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Technorati
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Technorati_SearchResult extends Zend_Service_Technorati_Result
|
||||
{
|
||||
/**
|
||||
* Technorati weblog object corresponding to queried keyword.
|
||||
*
|
||||
* @var Zend_Service_Technorati_Weblog
|
||||
* @access protected
|
||||
*/
|
||||
protected $_weblog;
|
||||
|
||||
/**
|
||||
* The title of the entry.
|
||||
*
|
||||
* @var string
|
||||
* @access protected
|
||||
*/
|
||||
protected $_title;
|
||||
|
||||
/**
|
||||
* The blurb from entry with search term highlighted.
|
||||
*
|
||||
* @var string
|
||||
* @access protected
|
||||
*/
|
||||
protected $_excerpt;
|
||||
|
||||
/**
|
||||
* The datetime the entry was created.
|
||||
*
|
||||
* @var Zend_Date
|
||||
* @access protected
|
||||
*/
|
||||
protected $_created;
|
||||
|
||||
/**
|
||||
* The permalink of the blog entry.
|
||||
*
|
||||
* @var Zend_Uri_Http
|
||||
* @access protected
|
||||
*/
|
||||
protected $_permalink;
|
||||
|
||||
|
||||
/**
|
||||
* Constructs a new object object from DOM Element.
|
||||
*
|
||||
* @param DomElement $dom the ReST fragment for this object
|
||||
*/
|
||||
public function __construct(DomElement $dom)
|
||||
{
|
||||
$this->_fields = array( '_permalink' => 'permalink',
|
||||
'_excerpt' => 'excerpt',
|
||||
'_created' => 'created',
|
||||
'_title' => 'title');
|
||||
parent::__construct($dom);
|
||||
|
||||
// weblog object field
|
||||
$this->_parseWeblog();
|
||||
|
||||
// filter fields
|
||||
$this->_permalink = Zend_Service_Technorati_Utils::normalizeUriHttp($this->_permalink);
|
||||
$this->_created = Zend_Service_Technorati_Utils::normalizeDate($this->_created);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the weblog object that links queried URL.
|
||||
*
|
||||
* @return Zend_Service_Technorati_Weblog
|
||||
*/
|
||||
public function getWeblog() {
|
||||
return $this->_weblog;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the title of the entry.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getTitle() {
|
||||
return $this->_title;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the blurb from entry with search term highlighted.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getExcerpt() {
|
||||
return $this->_excerpt;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the datetime the entry was created.
|
||||
*
|
||||
* @return Zend_Date
|
||||
*/
|
||||
public function getCreated() {
|
||||
return $this->_created;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the permalink of the blog entry.
|
||||
*
|
||||
* @return Zend_Uri_Http
|
||||
*/
|
||||
public function getPermalink() {
|
||||
return $this->_permalink;
|
||||
}
|
||||
|
||||
}
|
79
libs/Zend/Service/Technorati/SearchResultSet.php
Normal file
79
libs/Zend/Service/Technorati/SearchResultSet.php
Normal file
@ -0,0 +1,79 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Technorati
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: SearchResultSet.php 8064 2008-02-16 10:58:39Z thomas $
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @see Zend_Service_Technorati_ResultSet
|
||||
*/
|
||||
require_once 'Zend/Service/Technorati/ResultSet.php';
|
||||
|
||||
|
||||
/**
|
||||
* Represents a Technorati Search query result set.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Technorati
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Technorati_SearchResultSet extends Zend_Service_Technorati_ResultSet
|
||||
{
|
||||
/**
|
||||
* Number of query results.
|
||||
*
|
||||
* @var int
|
||||
* @access protected
|
||||
*/
|
||||
protected $_queryCount;
|
||||
|
||||
/**
|
||||
* Parses the search response and retrieve the results for iteration.
|
||||
*
|
||||
* @param DomDocument $dom the ReST fragment for this object
|
||||
* @param array $options query options as associative array
|
||||
*/
|
||||
public function __construct(DomDocument $dom, $options = array())
|
||||
{
|
||||
parent::__construct($dom, $options);
|
||||
|
||||
$result = $this->_xpath->query('/tapi/document/result/querycount/text()');
|
||||
if ($result->length == 1) $this->_queryCount = (int) $result->item(0)->data;
|
||||
|
||||
$this->_totalResultsReturned = (int) $this->_xpath->evaluate("count(/tapi/document/item)");
|
||||
$this->_totalResultsAvailable = (int) $this->_queryCount;
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements Zend_Service_Technorati_ResultSet::current().
|
||||
*
|
||||
* @return Zend_Service_Technorati_SearchResult current result
|
||||
*/
|
||||
public function current()
|
||||
{
|
||||
/**
|
||||
* @see Zend_Service_Technorati_SearchResult
|
||||
*/
|
||||
require_once 'Zend/Service/Technorati/SearchResult.php';
|
||||
return new Zend_Service_Technorati_SearchResult($this->_results->item($this->_currentIndex));
|
||||
}
|
||||
}
|
171
libs/Zend/Service/Technorati/TagResult.php
Normal file
171
libs/Zend/Service/Technorati/TagResult.php
Normal file
@ -0,0 +1,171 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Technorati
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: TagResult.php 8064 2008-02-16 10:58:39Z thomas $
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @see Zend_Service_Technorati_Result
|
||||
*/
|
||||
require_once 'Zend/Service/Technorati/Result.php';
|
||||
|
||||
|
||||
/**
|
||||
* Represents a single Technorati Tag query result object.
|
||||
* It is never returned as a standalone object,
|
||||
* but it always belongs to a valid Zend_Service_Technorati_TagResultSet object.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Technorati
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Technorati_TagResult extends Zend_Service_Technorati_Result
|
||||
{
|
||||
/**
|
||||
* Technorati weblog object corresponding to queried keyword.
|
||||
*
|
||||
* @var Zend_Service_Technorati_Weblog
|
||||
* @access protected
|
||||
*/
|
||||
protected $_weblog;
|
||||
|
||||
/**
|
||||
* The title of the entry.
|
||||
*
|
||||
* @var string
|
||||
* @access protected
|
||||
*/
|
||||
protected $_title;
|
||||
|
||||
/**
|
||||
* The blurb from entry with search term highlighted.
|
||||
*
|
||||
* @var string
|
||||
* @access protected
|
||||
*/
|
||||
protected $_excerpt;
|
||||
|
||||
/**
|
||||
* The datetime the entry was created.
|
||||
*
|
||||
* @var Zend_Date
|
||||
* @access protected
|
||||
*/
|
||||
protected $_created;
|
||||
|
||||
/**
|
||||
* The datetime the entry was updated.
|
||||
* Called 'postupdate' in original XML response,
|
||||
* it has been renamed to provide more coherence.
|
||||
*
|
||||
* @var Zend_Date
|
||||
* @access protected
|
||||
*/
|
||||
protected $_updated;
|
||||
|
||||
/**
|
||||
* The permalink of the blog entry.
|
||||
*
|
||||
* @var Zend_Uri_Http
|
||||
* @access protected
|
||||
*/
|
||||
protected $_permalink;
|
||||
|
||||
|
||||
/**
|
||||
* Constructs a new object object from DOM Element.
|
||||
*
|
||||
* @param DomElement $dom the ReST fragment for this object
|
||||
*/
|
||||
public function __construct(DomElement $dom)
|
||||
{
|
||||
$this->_fields = array( '_permalink' => 'permalink',
|
||||
'_excerpt' => 'excerpt',
|
||||
'_created' => 'created',
|
||||
'_updated' => 'postupdate',
|
||||
'_title' => 'title');
|
||||
parent::__construct($dom);
|
||||
|
||||
// weblog object field
|
||||
$this->_parseWeblog();
|
||||
|
||||
// filter fields
|
||||
$this->_permalink = Zend_Service_Technorati_Utils::normalizeUriHttp($this->_permalink);
|
||||
$this->_created = Zend_Service_Technorati_Utils::normalizeDate($this->_created);
|
||||
$this->_updated = Zend_Service_Technorati_Utils::normalizeDate($this->_updated);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the weblog object that links queried URL.
|
||||
*
|
||||
* @return Zend_Service_Technorati_Weblog
|
||||
*/
|
||||
public function getWeblog() {
|
||||
return $this->_weblog;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the title of the entry.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getTitle() {
|
||||
return $this->_title;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the blurb from entry with search term highlighted.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getExcerpt() {
|
||||
return $this->_excerpt;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the datetime the entry was created.
|
||||
*
|
||||
* @return Zend_Date
|
||||
*/
|
||||
public function getCreated() {
|
||||
return $this->_created;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the datetime the entry was updated.
|
||||
*
|
||||
* @return Zend_Date
|
||||
*/
|
||||
public function getUpdated() {
|
||||
return $this->_updated;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the permalink of the blog entry.
|
||||
*
|
||||
* @return Zend_Uri_Http
|
||||
*/
|
||||
public function getPermalink() {
|
||||
return $this->_permalink;
|
||||
}
|
||||
|
||||
}
|
110
libs/Zend/Service/Technorati/TagResultSet.php
Normal file
110
libs/Zend/Service/Technorati/TagResultSet.php
Normal file
@ -0,0 +1,110 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Technorati
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: TagResultSet.php 8064 2008-02-16 10:58:39Z thomas $
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @see Zend_Service_Technorati_ResultSet
|
||||
*/
|
||||
require_once 'Zend/Service/Technorati/ResultSet.php';
|
||||
|
||||
|
||||
/**
|
||||
* Represents a Technorati Tag query result set.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Technorati
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Technorati_TagResultSet extends Zend_Service_Technorati_ResultSet
|
||||
{
|
||||
/**
|
||||
* Number of posts that match the tag.
|
||||
*
|
||||
* @var int
|
||||
* @access protected
|
||||
*/
|
||||
protected $_postsMatched;
|
||||
|
||||
/**
|
||||
* Number of blogs that match the tag.
|
||||
*
|
||||
* @var int
|
||||
* @access protected
|
||||
*/
|
||||
protected $_blogsMatched;
|
||||
|
||||
/**
|
||||
* Parses the search response and retrieve the results for iteration.
|
||||
*
|
||||
* @param DomDocument $dom the ReST fragment for this object
|
||||
* @param array $options query options as associative array
|
||||
*/
|
||||
public function __construct(DomDocument $dom, $options = array())
|
||||
{
|
||||
parent::__construct($dom, $options);
|
||||
|
||||
$result = $this->_xpath->query('/tapi/document/result/postsmatched/text()');
|
||||
if ($result->length == 1) $this->_postsMatched = (int) $result->item(0)->data;
|
||||
|
||||
$result = $this->_xpath->query('/tapi/document/result/blogsmatched/text()');
|
||||
if ($result->length == 1) $this->_blogsMatched = (int) $result->item(0)->data;
|
||||
|
||||
$this->_totalResultsReturned = (int) $this->_xpath->evaluate("count(/tapi/document/item)");
|
||||
/** @todo Validate the following assertion */
|
||||
$this->_totalResultsAvailable = (int) $this->getPostsMatched();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns the number of posts that match the tag.
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function getPostsMatched() {
|
||||
return $this->_postsMatched;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the number of blogs that match the tag.
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function getBlogsMatched() {
|
||||
return $this->_blogsMatched;
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements Zend_Service_Technorati_ResultSet::current().
|
||||
*
|
||||
* @return Zend_Service_Technorati_TagResult current result
|
||||
*/
|
||||
public function current()
|
||||
{
|
||||
/**
|
||||
* @see Zend_Service_Technorati_TagResult
|
||||
*/
|
||||
require_once 'Zend/Service/Technorati/TagResult.php';
|
||||
return new Zend_Service_Technorati_TagResult($this->_results->item($this->_currentIndex));
|
||||
}
|
||||
}
|
93
libs/Zend/Service/Technorati/TagsResult.php
Normal file
93
libs/Zend/Service/Technorati/TagsResult.php
Normal file
@ -0,0 +1,93 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Technorati
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: TagsResult.php 8064 2008-02-16 10:58:39Z thomas $
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @see Zend_Service_Technorati_Result
|
||||
*/
|
||||
require_once 'Zend/Service/Technorati/Result.php';
|
||||
|
||||
|
||||
/**
|
||||
* Represents a single Technorati TopTags or BlogPostTags query result object.
|
||||
* It is never returned as a standalone object,
|
||||
* but it always belongs to a valid Zend_Service_Technorati_TagsResultSet object.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Technorati
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Technorati_TagsResult extends Zend_Service_Technorati_Result
|
||||
{
|
||||
/**
|
||||
* Name of the tag.
|
||||
*
|
||||
* @var string
|
||||
* @access protected
|
||||
*/
|
||||
protected $_tag;
|
||||
|
||||
/**
|
||||
* Number of posts containing this tag.
|
||||
*
|
||||
* @var int
|
||||
* @access protected
|
||||
*/
|
||||
protected $_posts;
|
||||
|
||||
|
||||
/**
|
||||
* Constructs a new object object from DOM Document.
|
||||
*
|
||||
* @param DomElement $dom the ReST fragment for this object
|
||||
*/
|
||||
public function __construct(DomElement $dom)
|
||||
{
|
||||
$this->_fields = array( '_tag' => 'tag',
|
||||
'_posts' => 'posts');
|
||||
parent::__construct($dom);
|
||||
|
||||
// filter fields
|
||||
$this->_tag = (string) $this->_tag;
|
||||
$this->_posts = (int) $this->_posts;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the tag name.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getTag() {
|
||||
return $this->_tag;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the number of posts.
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function getPosts() {
|
||||
return $this->_posts;
|
||||
}
|
||||
}
|
67
libs/Zend/Service/Technorati/TagsResultSet.php
Normal file
67
libs/Zend/Service/Technorati/TagsResultSet.php
Normal file
@ -0,0 +1,67 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Technorati
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: TagsResultSet.php 8064 2008-02-16 10:58:39Z thomas $
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @see Zend_Service_Technorati_ResultSet
|
||||
*/
|
||||
require_once 'Zend/Service/Technorati/ResultSet.php';
|
||||
|
||||
|
||||
/**
|
||||
* Represents a Technorati TopTags or BlogPostTags queries result set.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Technorati
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Technorati_TagsResultSet extends Zend_Service_Technorati_ResultSet
|
||||
{
|
||||
/**
|
||||
* Constructs a new object object from DOM Document.
|
||||
*
|
||||
* @param DomDocument $dom the ReST fragment for this object
|
||||
*/
|
||||
public function __construct(DomDocument $dom, $options = array())
|
||||
{
|
||||
parent::__construct($dom, $options);
|
||||
|
||||
$this->_totalResultsReturned = (int) $this->_xpath->evaluate("count(/tapi/document/item)");
|
||||
$this->_totalResultsAvailable = (int) $this->_totalResultsReturned;
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements Zend_Service_Technorati_ResultSet::current().
|
||||
*
|
||||
* @return Zend_Service_Technorati_TagsResult current result
|
||||
*/
|
||||
public function current()
|
||||
{
|
||||
/**
|
||||
* @see Zend_Service_Technorati_TagsResult
|
||||
*/
|
||||
require_once 'Zend/Service/Technorati/TagsResult.php';
|
||||
return new Zend_Service_Technorati_TagsResult($this->_results->item($this->_currentIndex));
|
||||
}
|
||||
}
|
136
libs/Zend/Service/Technorati/Utils.php
Normal file
136
libs/Zend/Service/Technorati/Utils.php
Normal file
@ -0,0 +1,136 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Technorati
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: Utils.php 8064 2008-02-16 10:58:39Z thomas $
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Collection of utilities for various Zend_Service_Technorati classes.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Technorati
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Technorati_Utils
|
||||
{
|
||||
/**
|
||||
* Parses, validates and returns a valid Zend_Uri object
|
||||
* from given $input.
|
||||
*
|
||||
* @param string|Zend_Uri_Http $input
|
||||
* @return null|Zend_Uri_Http
|
||||
* @throws Zend_Service_Technorati_Exception
|
||||
* @static
|
||||
*/
|
||||
public static function normalizeUriHttp($input)
|
||||
{
|
||||
// allow null as value
|
||||
if ($input === null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see Zend_Uri
|
||||
*/
|
||||
require_once 'Zend/Uri.php';
|
||||
if ($input instanceof Zend_Uri_Http) {
|
||||
$uri = $input;
|
||||
} else {
|
||||
try {
|
||||
$uri = Zend_Uri::factory((string) $input);
|
||||
}
|
||||
// wrap exception under Zend_Service_Technorati_Exception object
|
||||
catch (Exception $e) {
|
||||
/**
|
||||
* @see Zend_Service_Technorati_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Technorati/Exception.php';
|
||||
throw new Zend_Service_Technorati_Exception($e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
// allow inly Zend_Uri_Http objects or child classes
|
||||
if (!($uri instanceof Zend_Uri_Http)) {
|
||||
/**
|
||||
* @see Zend_Service_Technorati_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Technorati/Exception.php';
|
||||
throw new Zend_Service_Technorati_Exception(
|
||||
"Invalid URL $uri, only HTTP(S) protocols can be used");
|
||||
}
|
||||
|
||||
return $uri;
|
||||
}
|
||||
/**
|
||||
* Parses, validates and returns a valid Zend_Date object
|
||||
* from given $input.
|
||||
*
|
||||
* $input can be either a string, an integer or a Zend_Date object.
|
||||
* If $input is string or int, it will be provided to Zend_Date as it is.
|
||||
* If $input is a Zend_Date object, the object instance will be returned.
|
||||
*
|
||||
* @param mixed|Zend_Date $input
|
||||
* @return null|Zend_Date
|
||||
* @throws Zend_Service_Technorati_Exception
|
||||
* @static
|
||||
*/
|
||||
public static function normalizeDate($input)
|
||||
{
|
||||
/**
|
||||
* @see Zend_Date
|
||||
*/
|
||||
require_once 'Zend/Date.php';
|
||||
/**
|
||||
* @see Zend_Locale
|
||||
*/
|
||||
require_once 'Zend/Locale.php';
|
||||
|
||||
// allow null as value and return valid Zend_Date objects
|
||||
if (($input === null) || ($input instanceof Zend_Date)) {
|
||||
return $input;
|
||||
}
|
||||
|
||||
// due to a BC break as of ZF 1.5 it's not safe to use Zend_Date::isDate() here
|
||||
// see ZF-2524, ZF-2334
|
||||
if (@strtotime($input) !== FALSE) {
|
||||
return new Zend_Date($input);
|
||||
} else {
|
||||
/**
|
||||
* @see Zend_Service_Technorati_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Technorati/Exception.php';
|
||||
throw new Zend_Service_Technorati_Exception("'$input' is not a valid Date/Time");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @todo public static function xpathQueryAndSet() {}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @todo public static function xpathQueryAndSetIf() {}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @todo public static function xpathQueryAndSetUnless() {}
|
||||
*/
|
||||
}
|
486
libs/Zend/Service/Technorati/Weblog.php
Normal file
486
libs/Zend/Service/Technorati/Weblog.php
Normal file
@ -0,0 +1,486 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Technorati
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: Weblog.php 8064 2008-02-16 10:58:39Z thomas $
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @see Zend_Service_Technorati_Author
|
||||
*/
|
||||
require_once 'Zend/Service/Technorati/Author.php';
|
||||
|
||||
/**
|
||||
* @see Zend_Service_Technorati_Utils
|
||||
*/
|
||||
require_once 'Zend/Service/Technorati/Utils.php';
|
||||
|
||||
|
||||
/**
|
||||
* Represents a Weblog object successful recognized by Technorati.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Technorati
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Technorati_Weblog
|
||||
{
|
||||
/**
|
||||
* Blog name as written in the feed.
|
||||
*
|
||||
* @var string
|
||||
* @access protected
|
||||
*/
|
||||
protected $_name;
|
||||
|
||||
/**
|
||||
* Base blog URL.
|
||||
*
|
||||
* @var Zend_Uri_Http
|
||||
* @access protected
|
||||
*/
|
||||
protected $_url;
|
||||
|
||||
/**
|
||||
* RSS feed URL, if any.
|
||||
*
|
||||
* @var null|Zend_Uri_Http
|
||||
* @access protected
|
||||
*/
|
||||
protected $_rssUrl;
|
||||
|
||||
/**
|
||||
* Atom feed URL, if any.
|
||||
*
|
||||
* @var null|Zend_Uri_Http
|
||||
* @access protected
|
||||
*/
|
||||
protected $_atomUrl;
|
||||
|
||||
/**
|
||||
* Number of unique blogs linking this blog.
|
||||
*
|
||||
* @var integer
|
||||
* @access protected
|
||||
*/
|
||||
protected $_inboundBlogs;
|
||||
|
||||
/**
|
||||
* Number of incoming links to this blog.
|
||||
*
|
||||
* @var integer
|
||||
* @access protected
|
||||
*/
|
||||
protected $_inboundLinks;
|
||||
|
||||
/**
|
||||
* Last blog update UNIX timestamp.
|
||||
*
|
||||
* @var null|Zend_Date
|
||||
* @access protected
|
||||
*/
|
||||
protected $_lastUpdate;
|
||||
|
||||
/**
|
||||
* Technorati rank value for this weblog.
|
||||
*
|
||||
* Note. This property has no official documentation.
|
||||
*
|
||||
* @var integer
|
||||
* @access protected
|
||||
*/
|
||||
protected $_rank;
|
||||
|
||||
/**
|
||||
* Blog latitude coordinate.
|
||||
*
|
||||
* Note. This property has no official documentation.
|
||||
*
|
||||
* @var float
|
||||
* @access protected
|
||||
*/
|
||||
protected $_lat;
|
||||
|
||||
/**
|
||||
* Blog longitude coordinate.
|
||||
*
|
||||
* Note. This property has no official documentation.
|
||||
*
|
||||
* @var float
|
||||
* @access protected
|
||||
*/
|
||||
protected $_lon;
|
||||
|
||||
/**
|
||||
* Whether the author who claimed this weblog has a photo.
|
||||
*
|
||||
* Note. This property has no official documentation.
|
||||
*
|
||||
* @var bool
|
||||
* @access protected
|
||||
* @see Zend_Service_Technorati_Author::$thumbnailPicture
|
||||
*/
|
||||
protected $_hasPhoto = false;
|
||||
|
||||
/**
|
||||
* An array of Zend_Service_Technorati_Author who claimed this blog
|
||||
*
|
||||
* @var array
|
||||
* @access protected
|
||||
*/
|
||||
protected $_authors = array();
|
||||
|
||||
|
||||
/**
|
||||
* Constructs a new object from DOM Element.
|
||||
*
|
||||
* @param DomElement $dom the ReST fragment for this object
|
||||
*/
|
||||
public function __construct(DomElement $dom)
|
||||
{
|
||||
$xpath = new DOMXPath($dom->ownerDocument);
|
||||
|
||||
$result = $xpath->query('./name/text()', $dom);
|
||||
if ($result->length == 1) $this->setName($result->item(0)->data);
|
||||
|
||||
$result = $xpath->query('./url/text()', $dom);
|
||||
if ($result->length == 1) $this->setUrl($result->item(0)->data);
|
||||
|
||||
$result = $xpath->query('./inboundblogs/text()', $dom);
|
||||
if ($result->length == 1) $this->setInboundBlogs($result->item(0)->data);
|
||||
|
||||
$result = $xpath->query('./inboundlinks/text()', $dom);
|
||||
if ($result->length == 1) $this->setInboundLinks($result->item(0)->data);
|
||||
|
||||
$result = $xpath->query('./lastupdate/text()', $dom);
|
||||
if ($result->length == 1) $this->setLastUpdate($result->item(0)->data);
|
||||
|
||||
/* The following elements need more attention */
|
||||
|
||||
$result = $xpath->query('./rssurl/text()', $dom);
|
||||
if ($result->length == 1) $this->setRssUrl($result->item(0)->data);
|
||||
|
||||
$result = $xpath->query('./atomurl/text()', $dom);
|
||||
if ($result->length == 1) $this->setAtomUrl($result->item(0)->data);
|
||||
|
||||
$result = $xpath->query('./author', $dom);
|
||||
if ($result->length >= 1) {
|
||||
foreach ($result as $author) {
|
||||
$this->_authors[] = new Zend_Service_Technorati_Author($author);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* The following are optional elements
|
||||
*
|
||||
* I can't find any official documentation about the following properties
|
||||
* however they are included in response DTD and/or test responses.
|
||||
*/
|
||||
|
||||
$result = $xpath->query('./rank/text()', $dom);
|
||||
if ($result->length == 1) $this->setRank($result->item(0)->data);
|
||||
|
||||
$result = $xpath->query('./lat/text()', $dom);
|
||||
if ($result->length == 1) $this->setLat($result->item(0)->data);
|
||||
|
||||
$result = $xpath->query('./lon/text()', $dom);
|
||||
if ($result->length == 1) $this->setLon($result->item(0)->data);
|
||||
|
||||
$result = $xpath->query('./hasphoto/text()', $dom);
|
||||
if ($result->length == 1) $this->setHasPhoto($result->item(0)->data);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns weblog name.
|
||||
*
|
||||
* @return string Weblog name
|
||||
*/
|
||||
public function getName()
|
||||
{
|
||||
return $this->_name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns weblog URL.
|
||||
*
|
||||
* @return null|Zend_Uri_Http object representing weblog base URL
|
||||
*/
|
||||
public function getUrl()
|
||||
{
|
||||
return $this->_url;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns number of unique blogs linking this blog.
|
||||
*
|
||||
* @return integer the number of inbound blogs
|
||||
*/
|
||||
public function getInboundBlogs()
|
||||
{
|
||||
return $this->_inboundBlogs;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns number of incoming links to this blog.
|
||||
*
|
||||
* @return integer the number of inbound links
|
||||
*/
|
||||
public function getInboundLinks()
|
||||
{
|
||||
return $this->_inboundLinks;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns weblog Rss URL.
|
||||
*
|
||||
* @return null|Zend_Uri_Http object representing the URL
|
||||
* of the RSS feed for given blog
|
||||
*/
|
||||
public function getRssUrl()
|
||||
{
|
||||
return $this->_rssUrl;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns weblog Atom URL.
|
||||
*
|
||||
* @return null|Zend_Uri_Http object representing the URL
|
||||
* of the Atom feed for given blog
|
||||
*/
|
||||
public function getAtomUrl()
|
||||
{
|
||||
return $this->_atomUrl;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns UNIX timestamp of the last weblog update.
|
||||
*
|
||||
* @return integer UNIX timestamp of the last weblog update
|
||||
*/
|
||||
public function getLastUpdate()
|
||||
{
|
||||
return $this->_lastUpdate;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns weblog rank value.
|
||||
*
|
||||
* Note. This property is not documented.
|
||||
*
|
||||
* @return integer weblog rank value
|
||||
*/
|
||||
public function getRank()
|
||||
{
|
||||
return $this->_rank;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns weblog latitude coordinate.
|
||||
*
|
||||
* Note. This property is not documented.
|
||||
*
|
||||
* @return float weblog latitude coordinate
|
||||
*/
|
||||
public function getLat() {
|
||||
return $this->_lat;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns weblog longitude coordinate.
|
||||
*
|
||||
* Note. This property is not documented.
|
||||
*
|
||||
* @return float weblog longitude coordinate
|
||||
*/
|
||||
public function getLon()
|
||||
{
|
||||
return $this->_lon;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns whether the author who claimed this weblog has a photo.
|
||||
*
|
||||
* Note. This property is not documented.
|
||||
*
|
||||
* @return bool TRUE if the author who claimed this weblog has a photo,
|
||||
* FALSE otherwise.
|
||||
*/
|
||||
public function hasPhoto()
|
||||
{
|
||||
return (bool) $this->_hasPhoto;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the array of weblog authors.
|
||||
*
|
||||
* @return array of Zend_Service_Technorati_Author authors
|
||||
*/
|
||||
public function getAuthors()
|
||||
{
|
||||
return (array) $this->_authors;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Sets weblog name.
|
||||
*
|
||||
* @param string $name
|
||||
* @return Zend_Service_Technorati_Weblog $this instance
|
||||
*/
|
||||
public function setName($name)
|
||||
{
|
||||
$this->_name = (string) $name;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets weblog URL.
|
||||
*
|
||||
* @param string|Zend_Uri_Http $url
|
||||
* @return void
|
||||
* @throws Zend_Service_Technorati_Exception if $input is an invalid URI
|
||||
* (via Zend_Service_Technorati_Utils::normalizeUriHttp)
|
||||
*/
|
||||
public function setUrl($url)
|
||||
{
|
||||
$this->_url = Zend_Service_Technorati_Utils::normalizeUriHttp($url);
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets number of inbound blogs.
|
||||
*
|
||||
* @param integer $number
|
||||
* @return Zend_Service_Technorati_Weblog $this instance
|
||||
*/
|
||||
public function setInboundBlogs($number)
|
||||
{
|
||||
$this->_inboundBlogs = (int) $number;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets number of Iinbound links.
|
||||
*
|
||||
* @param integer $number
|
||||
* @return Zend_Service_Technorati_Weblog $this instance
|
||||
*/
|
||||
public function setInboundLinks($number)
|
||||
{
|
||||
$this->_inboundLinks = (int) $number;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets weblog Rss URL.
|
||||
*
|
||||
* @param string|Zend_Uri_Http $url
|
||||
* @return Zend_Service_Technorati_Weblog $this instance
|
||||
* @throws Zend_Service_Technorati_Exception if $input is an invalid URI
|
||||
* (via Zend_Service_Technorati_Utils::normalizeUriHttp)
|
||||
*/
|
||||
public function setRssUrl($url)
|
||||
{
|
||||
$this->_rssUrl = Zend_Service_Technorati_Utils::normalizeUriHttp($url);
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets weblog Atom URL.
|
||||
*
|
||||
* @param string|Zend_Uri_Http $url
|
||||
* @return Zend_Service_Technorati_Weblog $this instance
|
||||
* @throws Zend_Service_Technorati_Exception if $input is an invalid URI
|
||||
* (via Zend_Service_Technorati_Utils::normalizeUriHttp)
|
||||
*/
|
||||
public function setAtomUrl($url)
|
||||
{
|
||||
$this->_atomUrl = Zend_Service_Technorati_Utils::normalizeUriHttp($url);
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets weblog Last Update timestamp.
|
||||
*
|
||||
* $datetime can be any value supported by
|
||||
* Zend_Service_Technorati_Utils::normalizeDate().
|
||||
*
|
||||
* @param mixed $datetime A string representing the last update date time
|
||||
* in a valid date time format
|
||||
* @return Zend_Service_Technorati_Weblog $this instance
|
||||
* @throws Zend_Service_Technorati_Exception
|
||||
*/
|
||||
public function setLastUpdate($datetime)
|
||||
{
|
||||
$this->_lastUpdate = Zend_Service_Technorati_Utils::normalizeDate($datetime);
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets weblog Rank.
|
||||
*
|
||||
* @param integer $rank
|
||||
* @return Zend_Service_Technorati_Weblog $this instance
|
||||
*/
|
||||
public function setRank($rank)
|
||||
{
|
||||
$this->_rank = (int) $rank;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets weblog latitude coordinate.
|
||||
*
|
||||
* @param float $coordinate
|
||||
* @return Zend_Service_Technorati_Weblog $this instance
|
||||
*/
|
||||
public function setLat($coordinate)
|
||||
{
|
||||
$this->_lat = (float) $coordinate;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets weblog longitude coordinate.
|
||||
*
|
||||
* @param float $coordinate
|
||||
* @return Zend_Service_Technorati_Weblog $this instance
|
||||
*/
|
||||
public function setLon($coordinate)
|
||||
{
|
||||
$this->_lon = (float) $coordinate;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets hasPhoto property.
|
||||
*
|
||||
* @param bool $hasPhoto
|
||||
* @return Zend_Service_Technorati_Weblog $this instance
|
||||
*/
|
||||
public function setHasPhoto($hasPhoto)
|
||||
{
|
||||
$this->_hasPhoto = (bool) $hasPhoto;
|
||||
return $this;
|
||||
}
|
||||
|
||||
}
|
762
libs/Zend/Service/Twitter.php
Executable file
762
libs/Zend/Service/Twitter.php
Executable file
@ -0,0 +1,762 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Twitter
|
||||
* @subpackage RememberTheMilk
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: $
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @see Zend_Rest_Client
|
||||
*/
|
||||
require_once 'Zend/Rest/Client.php';
|
||||
|
||||
/**
|
||||
* @see Zend_Rest_Client_Result
|
||||
*/
|
||||
require_once 'Zend/Rest/Client/Result.php';
|
||||
|
||||
/**
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Twitter
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Twitter extends Zend_Rest_Client
|
||||
{
|
||||
/**
|
||||
* Whether or not authorization has been initialized for the current user.
|
||||
* @var bool
|
||||
*/
|
||||
protected $_authInitialized = false;
|
||||
|
||||
/**
|
||||
* @var Zend_Http_CookieJar
|
||||
*/
|
||||
protected $_cookieJar;
|
||||
|
||||
/**
|
||||
* Date format for 'since' strings
|
||||
* @var string
|
||||
*/
|
||||
protected $_dateFormat = 'D, d M Y H:i:s e';
|
||||
|
||||
/**
|
||||
* Username
|
||||
* @var string
|
||||
*/
|
||||
protected $_username;
|
||||
|
||||
/**
|
||||
* Password
|
||||
* @var string
|
||||
*/
|
||||
protected $_password;
|
||||
|
||||
/**
|
||||
* Current method type (for method proxying)
|
||||
* @var string
|
||||
*/
|
||||
protected $_methodType;
|
||||
|
||||
/**
|
||||
* Types of API methods
|
||||
* @var array
|
||||
*/
|
||||
protected $_methodTypes = array(
|
||||
'status',
|
||||
'user',
|
||||
'directMessage',
|
||||
'friendship',
|
||||
'account',
|
||||
'favorite'
|
||||
);
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param string $username
|
||||
* @param string $password
|
||||
* @return void
|
||||
*/
|
||||
public function __construct($username, $password)
|
||||
{
|
||||
$this->setUsername($username);
|
||||
$this->setPassword($password);
|
||||
$this->setUri('http://twitter.com');
|
||||
|
||||
$client = self::getHttpClient();
|
||||
$client->setHeaders('Accept-Charset', 'ISO-8859-1,utf-8');
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve username
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getUsername()
|
||||
{
|
||||
return $this->_username;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set username
|
||||
*
|
||||
* @param string $value
|
||||
* @return Zend_Service_Twitter
|
||||
*/
|
||||
public function setUsername($value)
|
||||
{
|
||||
$this->_username = $value;
|
||||
$this->_authInitialized = false;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve password
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getPassword()
|
||||
{
|
||||
return $this->_password;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set password
|
||||
*
|
||||
* @param string $value
|
||||
* @return Zend_Service_Twitter
|
||||
*/
|
||||
public function setPassword($value)
|
||||
{
|
||||
$this->_password = $value;
|
||||
$this->_authInitialized = false;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Proxy service methods
|
||||
*
|
||||
* @param string $type
|
||||
* @return Zend_Service_Twitter
|
||||
* @throws Zend_Service_Twitter_Exception if method is not in method types list
|
||||
*/
|
||||
public function __get($type)
|
||||
{
|
||||
if (!in_array($type, $this->_methodTypes)) {
|
||||
include_once 'Zend/Service/Twitter/Exception.php';
|
||||
throw new Zend_Service_Twitter_Exception('Invalid method type "' . $type . '"');
|
||||
}
|
||||
|
||||
$this->_methodType = $type;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Method overloading
|
||||
*
|
||||
* @param string $method
|
||||
* @param array $params
|
||||
* @return mixed
|
||||
* @throws Zend_Service_Twitter_Exception if unable to find method
|
||||
*/
|
||||
public function __call($method, $params)
|
||||
{
|
||||
if (empty($this->_methodType)) {
|
||||
include_once 'Zend/Service/Twitter/Exception.php';
|
||||
throw new Zend_Service_Twitter_Exception('Invalid method "' . $method . '"');
|
||||
}
|
||||
|
||||
$test = $this->_methodType . ucfirst($method);
|
||||
if (!method_exists($this, $test)) {
|
||||
include_once 'Zend/Service/Twitter/Exception.php';
|
||||
throw new Zend_Service_Twitter_Exception('Invalid method "' . $test . '"');
|
||||
}
|
||||
|
||||
return call_user_func_array(array($this, $test), $params);
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize HTTP authentication
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
protected function _init()
|
||||
{
|
||||
$client = self::getHttpClient();
|
||||
|
||||
$client->resetParameters();
|
||||
|
||||
if (null == $this->_cookieJar) {
|
||||
$client->setCookieJar();
|
||||
$this->_cookieJar = $client->getCookieJar();
|
||||
} else {
|
||||
$client->setCookieJar($this->_cookieJar);
|
||||
}
|
||||
|
||||
if (!$this->_authInitialized) {
|
||||
$client->setAuth($this->getUsername(), $this->getPassword());
|
||||
$this->_authInitialized = true;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set date header
|
||||
*
|
||||
* @param int|string $value
|
||||
* @return void
|
||||
*/
|
||||
protected function _setDate($value)
|
||||
{
|
||||
if (is_int($value)) {
|
||||
$date = date($this->_dateFormat, $value);
|
||||
} else {
|
||||
$date = date($this->_dateFormat, strtotime($value));
|
||||
}
|
||||
self::getHttpClient()->setHeaders('If-Modified-Since', $date);
|
||||
}
|
||||
|
||||
/**
|
||||
* Public Timeline status
|
||||
*
|
||||
* @return Zend_Rest_Client_Result
|
||||
*/
|
||||
public function statusPublicTimeline()
|
||||
{
|
||||
$this->_init();
|
||||
$path = '/statuses/public_timeline.xml';
|
||||
$response = $this->restGet($path);
|
||||
return new Zend_Rest_Client_Result($response->getBody());
|
||||
}
|
||||
|
||||
/**
|
||||
* Friend Timeline Status
|
||||
*
|
||||
* $params may include one or more of the following keys
|
||||
* - id: ID of a friend whose timeline you wish to receive
|
||||
* - since: return results only after the date specified
|
||||
* - page: return page X of results
|
||||
*
|
||||
* @param array $params
|
||||
* @return void
|
||||
*/
|
||||
public function statusFriendsTimeline(array $params = array())
|
||||
{
|
||||
$this->_init();
|
||||
$path = '/statuses/friends_timeline';
|
||||
foreach ($params as $key => $value) {
|
||||
switch (strtolower($key)) {
|
||||
case 'since':
|
||||
$this->_setDate($value);
|
||||
break;
|
||||
case 'page':
|
||||
$this->page = (int) $value;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
$path .= '.xml';
|
||||
$response = $this->restGet($path);
|
||||
return new Zend_Rest_Client_Result($response->getBody());
|
||||
}
|
||||
|
||||
/**
|
||||
* User Timeline status
|
||||
*
|
||||
* $params may include one or more of the following keys
|
||||
* - id: ID of a friend whose timeline you wish to receive
|
||||
* - since: return results only after the date specified
|
||||
* - page: return page X of results
|
||||
* - count: how many statuses to return
|
||||
*
|
||||
* @return Zend_Rest_Client_Result
|
||||
*/
|
||||
public function statusUserTimeline(array $params = array())
|
||||
{
|
||||
$this->_init();
|
||||
$path = '/statuses/user_timeline';
|
||||
$_params = array();
|
||||
foreach ($params as $key => $value) {
|
||||
switch (strtolower($key)) {
|
||||
case 'id':
|
||||
$path .= '/' . $value;
|
||||
break;
|
||||
case 'since':
|
||||
$this->_setDate($value);
|
||||
break;
|
||||
case 'page':
|
||||
$_params['page'] = (int) $value;
|
||||
break;
|
||||
case 'count':
|
||||
$count = (int) $value;
|
||||
if (0 >= $count) {
|
||||
$count = 1;
|
||||
} elseif (200 < $count) {
|
||||
$count = 200;
|
||||
}
|
||||
$_params['count'] = $count;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
$path .= '.xml';
|
||||
$response = $this->restGet($path, $_params);
|
||||
return new Zend_Rest_Client_Result($response->getBody());
|
||||
}
|
||||
|
||||
/**
|
||||
* Show a single status
|
||||
*
|
||||
* @param int $id Id of status to show
|
||||
* @return Zend_Rest_Client_Result
|
||||
*/
|
||||
public function statusShow($id)
|
||||
{
|
||||
$this->_init();
|
||||
$path = '/statuses/show/' . $id . '.xml';
|
||||
$response = $this->restGet($path);
|
||||
return new Zend_Rest_Client_Result($response->getBody());
|
||||
}
|
||||
|
||||
/**
|
||||
* Update user's current status
|
||||
*
|
||||
* @param string $status
|
||||
* @param int $in_reply_to_status_id
|
||||
* @return Zend_Rest_Client_Result
|
||||
* @throws Zend_Service_Twitter_Exception if message is too short or too long
|
||||
*/
|
||||
public function statusUpdate($status, $in_reply_to_status_id = null)
|
||||
{
|
||||
$this->_init();
|
||||
$path = '/statuses/update.xml';
|
||||
$len = strlen($status);
|
||||
if ($len > 140) {
|
||||
include_once 'Zend/Service/Twitter/Exception.php';
|
||||
throw new Zend_Service_Twitter_Exception('Status must be no more than 140 characters in length');
|
||||
} elseif (0 == $len) {
|
||||
include_once 'Zend/Service/Twitter/Exception.php';
|
||||
throw new Zend_Service_Twitter_Exception('Status must contain at least one character');
|
||||
}
|
||||
|
||||
$data = array(
|
||||
'status' => $status
|
||||
);
|
||||
|
||||
if(is_numeric($in_reply_to_status_id) && !empty($in_reply_to_status_id)) {
|
||||
$data['in_reply_to_status_id'] = $in_reply_to_status_id;
|
||||
}
|
||||
|
||||
//$this->status = $status;
|
||||
$response = $this->restPost($path, $data);
|
||||
return new Zend_Rest_Client_Result($response->getBody());
|
||||
}
|
||||
|
||||
/**
|
||||
* Get status replies
|
||||
*
|
||||
* $params may include one or more of the following keys
|
||||
* - since: return results only after the date specified
|
||||
* - since_id: return results only after the specified tweet id
|
||||
* - page: return page X of results
|
||||
*
|
||||
* @return Zend_Rest_Client_Result
|
||||
*/
|
||||
public function statusReplies(array $params = array())
|
||||
{
|
||||
$this->_init();
|
||||
$path = '/statuses/replies.xml';
|
||||
|
||||
$_params = array();
|
||||
foreach ($params as $key => $value) {
|
||||
switch (strtolower($key)) {
|
||||
case 'since':
|
||||
$this->_setDate($value);
|
||||
break;
|
||||
case 'since_id':
|
||||
$_params['since_id'] = (int) $value;
|
||||
break;
|
||||
case 'page':
|
||||
$_params['page'] = (int) $value;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
$response = $this->restGet($path, $_params);
|
||||
return new Zend_Rest_Client_Result($response->getBody());
|
||||
}
|
||||
|
||||
/**
|
||||
* Destroy a status message
|
||||
*
|
||||
* @param int $id ID of status to destroy
|
||||
* @return Zend_Rest_Client_Result
|
||||
*/
|
||||
public function statusDestroy($id)
|
||||
{
|
||||
$this->_init();
|
||||
$path = '/statuses/destroy/' . (int) $id . '.xml';
|
||||
|
||||
$response = $this->restPost($path);
|
||||
return new Zend_Rest_Client_Result($response->getBody());
|
||||
}
|
||||
|
||||
/**
|
||||
* User friends
|
||||
*
|
||||
* @param int|string $id Id or username of user for whom to fetch friends
|
||||
* @return Zend_Rest_Client_Result
|
||||
*/
|
||||
public function userFriends(array $params = array())
|
||||
{
|
||||
$this->_init();
|
||||
$path = '/statuses/friends';
|
||||
$_params = array();
|
||||
foreach ($params as $key => $value) {
|
||||
switch (strtolower($key)) {
|
||||
case 'id':
|
||||
$path .= '/' . $value;
|
||||
break;
|
||||
case 'since':
|
||||
$this->_setDate($value);
|
||||
break;
|
||||
case 'page':
|
||||
$_params['page'] = (int) $value;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
$path .= '.xml';
|
||||
|
||||
$response = $this->restGet($path, $_params);
|
||||
return new Zend_Rest_Client_Result($response->getBody());
|
||||
}
|
||||
|
||||
/**
|
||||
* User Followers
|
||||
*
|
||||
* @param bool $lite If true, prevents inline inclusion of current status for followers; defaults to false
|
||||
* @return Zend_Rest_Client_Result
|
||||
*/
|
||||
public function userFollowers($lite = false)
|
||||
{
|
||||
$this->_init();
|
||||
$path = '/statuses/followers.xml';
|
||||
if ($lite) {
|
||||
$this->lite = 'true';
|
||||
}
|
||||
|
||||
$response = $this->restGet($path);
|
||||
return new Zend_Rest_Client_Result($response->getBody());
|
||||
}
|
||||
|
||||
/**
|
||||
* Get featured users
|
||||
*
|
||||
* @return Zend_Rest_Client_Result
|
||||
*/
|
||||
public function userFeatured()
|
||||
{
|
||||
$this->_init();
|
||||
$path = '/statuses/featured.xml';
|
||||
|
||||
$response = $this->restGet($path);
|
||||
return new Zend_Rest_Client_Result($response->getBody());
|
||||
}
|
||||
|
||||
/**
|
||||
* Show extended information on a user
|
||||
*
|
||||
* @param int|string $id User ID or name
|
||||
* @return Zend_Rest_Client_Result
|
||||
*/
|
||||
public function userShow($id)
|
||||
{
|
||||
$this->_init();
|
||||
$path = '/users/show/' . $id . '.xml';
|
||||
|
||||
$response = $this->restGet($path);
|
||||
return new Zend_Rest_Client_Result($response->getBody());
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve direct messages for the current user
|
||||
*
|
||||
* $params may include one or more of the following keys
|
||||
* - since: return results only after the date specified
|
||||
* - since_id: return statuses only greater than the one specified
|
||||
* - page: return page X of results
|
||||
*
|
||||
* @param array $params
|
||||
* @return Zend_Rest_Client_Result
|
||||
*/
|
||||
public function directMessageMessages(array $params = array())
|
||||
{
|
||||
$this->_init();
|
||||
$path = '/direct_messages.xml';
|
||||
foreach ($params as $key => $value) {
|
||||
switch (strtolower($key)) {
|
||||
case 'since':
|
||||
$this->_setDate($value);
|
||||
break;
|
||||
case 'since_id':
|
||||
$this->since_id = (int) $value;
|
||||
break;
|
||||
case 'page':
|
||||
$this->page = (int) $value;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
$response = $this->restGet($path);
|
||||
return new Zend_Rest_Client_Result($response->getBody());
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve list of direct messages sent by current user
|
||||
*
|
||||
* $params may include one or more of the following keys
|
||||
* - since: return results only after the date specified
|
||||
* - since_id: return statuses only greater than the one specified
|
||||
* - page: return page X of results
|
||||
*
|
||||
* @param array $params
|
||||
* @return Zend_Rest_Client_Result
|
||||
*/
|
||||
public function directMessageSent(array $params = array())
|
||||
{
|
||||
$this->_init();
|
||||
$path = '/direct_messages/sent.xml';
|
||||
foreach ($params as $key => $value) {
|
||||
switch (strtolower($key)) {
|
||||
case 'since':
|
||||
$this->_setDate($value);
|
||||
break;
|
||||
case 'since_id':
|
||||
$this->since_id = (int) $value;
|
||||
break;
|
||||
case 'page':
|
||||
$this->page = (int) $value;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
$response = $this->restGet($path);
|
||||
return new Zend_Rest_Client_Result($response->getBody());
|
||||
}
|
||||
|
||||
/**
|
||||
* Send a direct message to a user
|
||||
*
|
||||
* @param int|string $user User to whom to send message
|
||||
* @param string $text Message to send to user
|
||||
* @return Zend_Rest_Client_Result
|
||||
* @throws Zend_Service_Twitter_Exception if message is too short or too long
|
||||
*/
|
||||
public function directMessageNew($user, $text)
|
||||
{
|
||||
$this->_init();
|
||||
$path = '/direct_messages/new.xml';
|
||||
|
||||
$len = strlen($text);
|
||||
if (0 == $len) {
|
||||
throw new Zend_Service_Twitter_Exception('Direct message must contain at least one character');
|
||||
} elseif (140 < $len) {
|
||||
throw new Zend_Service_Twitter_Exception('Direct message must contain no more than 140 characters');
|
||||
}
|
||||
|
||||
$data = array(
|
||||
'user' => $user,
|
||||
'text' => $text,
|
||||
);
|
||||
|
||||
$response = $this->restPost($path, $data);
|
||||
return new Zend_Rest_Client_Result($response->getBody());
|
||||
}
|
||||
|
||||
/**
|
||||
* Destroy a direct message
|
||||
*
|
||||
* @param int $id ID of message to destroy
|
||||
* @return Zend_Rest_Client_Result
|
||||
*/
|
||||
public function directMessageDestroy($id)
|
||||
{
|
||||
$this->_init();
|
||||
$path = '/direct_messages/destroy/' . $id . '.xml';
|
||||
|
||||
$response = $this->restPost($path);
|
||||
return new Zend_Rest_Client_Result($response->getBody());
|
||||
}
|
||||
|
||||
/**
|
||||
* Create friendship
|
||||
*
|
||||
* @param int|string $id User ID or name of new friend
|
||||
* @return Zend_Rest_Client_Result
|
||||
*/
|
||||
public function friendshipCreate($id)
|
||||
{
|
||||
$this->_init();
|
||||
$path = '/friendships/create/' . $id . '.xml';
|
||||
|
||||
$response = $this->restPost($path);
|
||||
return new Zend_Rest_Client_Result($response->getBody());
|
||||
}
|
||||
|
||||
/**
|
||||
* Destroy friendship
|
||||
*
|
||||
* @param int|string $id User ID or name of friend to remove
|
||||
* @return Zend_Rest_Client_Result
|
||||
*/
|
||||
public function friendshipDestroy($id)
|
||||
{
|
||||
$this->_init();
|
||||
$path = '/friendships/destroy/' . $id . '.xml';
|
||||
|
||||
$response = $this->restPost($path);
|
||||
return new Zend_Rest_Client_Result($response->getBody());
|
||||
}
|
||||
|
||||
/**
|
||||
* Friendship exists
|
||||
*
|
||||
* @param int|string $id User ID or name of friend to see if they are your friend
|
||||
* @return Zend_Rest_Client_result
|
||||
*/
|
||||
public function friendshipExists($id)
|
||||
{
|
||||
$this->_init();
|
||||
$path = '/friendships/exists.xml';
|
||||
|
||||
$data = array(
|
||||
'user_a' => $this->getUsername(),
|
||||
'user_b' => $id
|
||||
);
|
||||
|
||||
$response = $this->restGet($path, $data);
|
||||
return new Zend_Rest_Client_Result($response->getBody());
|
||||
}
|
||||
|
||||
/**
|
||||
* Verify Account Credentials
|
||||
*
|
||||
* @return Zend_Rest_Client_Result
|
||||
*/
|
||||
public function accountVerifyCredentials()
|
||||
{
|
||||
$this->_init();
|
||||
$response = $this->restGet('/account/verify_credentials.xml');
|
||||
return new Zend_Rest_Client_Result($response->getBody());
|
||||
}
|
||||
|
||||
/**
|
||||
* End current session
|
||||
*
|
||||
* @return true
|
||||
*/
|
||||
public function accountEndSession()
|
||||
{
|
||||
$this->_init();
|
||||
$response = $this->restGet('/account/end_session');
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the number of api requests you have left per hour.
|
||||
*
|
||||
* @return Zend_Rest_Client_Result
|
||||
*/
|
||||
public function accountRateLimitStatus()
|
||||
{
|
||||
$this->_init();
|
||||
$response = $this->restGet('/account/rate_limit_status.xml');
|
||||
return new Zend_Rest_Client_Result($response->getBody());
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetch favorites
|
||||
*
|
||||
* $params may contain one or more of the following:
|
||||
* - 'id': Id of a user for whom to fetch favorites
|
||||
* - 'page': Retrieve a different page of resuls
|
||||
*
|
||||
* @param array $params
|
||||
* @return Zend_Rest_Client_Result
|
||||
*/
|
||||
public function favoriteFavorites(array $params = array())
|
||||
{
|
||||
$this->_init();
|
||||
$path = '/favorites';
|
||||
foreach ($params as $key => $value) {
|
||||
switch (strtolower($key)) {
|
||||
case 'id':
|
||||
$path .= '/' . $value;
|
||||
break;
|
||||
case 'page':
|
||||
$this->page = (int) $value;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
$path .= '.xml';
|
||||
$response = $this->restGet($path);
|
||||
return new Zend_Rest_Client_Result($response->getBody());
|
||||
}
|
||||
|
||||
/**
|
||||
* Mark a status as a favorite
|
||||
*
|
||||
* @param int $id Status ID you want to mark as a favorite
|
||||
* @return Zend_Rest_Client_Result
|
||||
*/
|
||||
public function favoriteCreate($id)
|
||||
{
|
||||
$this->_init();
|
||||
$path = '/favorites/create/' . (int) $id . '.xml';
|
||||
|
||||
$response = $this->restPost($path);
|
||||
return new Zend_Rest_Client_Result($response->getBody());
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove a favorite
|
||||
*
|
||||
* @param int $id Status ID you want to de-list as a favorite
|
||||
* @return Zend_Rest_Client_Result
|
||||
*/
|
||||
public function favoriteDestroy($id)
|
||||
{
|
||||
$this->_init();
|
||||
$path = '/favorites/destroy/' . (int) $id . '.xml';
|
||||
|
||||
$response = $this->restPost($path);
|
||||
return new Zend_Rest_Client_Result($response->getBody());
|
||||
}
|
||||
}
|
32
libs/Zend/Service/Twitter/Exception.php
Executable file
32
libs/Zend/Service/Twitter/Exception.php
Executable file
@ -0,0 +1,32 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Twitter
|
||||
* @subpackage Twitter
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: $
|
||||
*/
|
||||
|
||||
/**
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Twitter
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Twitter_Exception extends Exception
|
||||
{
|
||||
}
|
173
libs/Zend/Service/Twitter/Search.php
Normal file
173
libs/Zend/Service/Twitter/Search.php
Normal file
@ -0,0 +1,173 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Twitter
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: $
|
||||
*/
|
||||
|
||||
/**
|
||||
* @see Zend_Http_Client
|
||||
*/
|
||||
require_once 'Zend/Http/Client.php';
|
||||
|
||||
/**
|
||||
* @see Zend_Uri_Http
|
||||
*/
|
||||
require_once 'Zend/Uri/Http.php';
|
||||
|
||||
/**
|
||||
* @see Zend_Json
|
||||
*/
|
||||
require_once 'Zend/Json.php';
|
||||
|
||||
/**
|
||||
* @see Zend_Feed
|
||||
*/
|
||||
require_once 'Zend/Feed.php';
|
||||
|
||||
/**
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Twitter
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
|
||||
class Zend_Service_Twitter_Search extends Zend_Http_Client
|
||||
{
|
||||
/**
|
||||
* Return Type
|
||||
* @var String
|
||||
*/
|
||||
protected $_responseType = 'json';
|
||||
|
||||
/**
|
||||
* Response Format Types
|
||||
* @var array
|
||||
*/
|
||||
protected $_responseTypes = array(
|
||||
'atom',
|
||||
'json'
|
||||
);
|
||||
|
||||
/**
|
||||
* Uri Compoent
|
||||
*
|
||||
* @var Zend_Uri_Http
|
||||
*/
|
||||
protected $_uri;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param string $returnType
|
||||
* @return void
|
||||
*/
|
||||
public function __construct($responseType = 'json')
|
||||
{
|
||||
$this->setResponseType($responseType);
|
||||
$this->_uri = Zend_Uri_Http::fromString("http://search.twitter.com");
|
||||
|
||||
$this->setHeaders('Accept-Charset', 'ISO-8859-1,utf-8');
|
||||
}
|
||||
|
||||
/**
|
||||
* set responseType
|
||||
*
|
||||
* @param string $responseType
|
||||
* @throws Zend_Service_Twitter_Exception
|
||||
* @return Zend_Service_Twitter_Search
|
||||
*/
|
||||
public function setResponseType($responseType = 'json')
|
||||
{
|
||||
if(!in_array($responseType, $this->_responseTypes, TRUE)) {
|
||||
throw new Zend_Service_Twitter_Exception('Invalid Response Type');
|
||||
}
|
||||
$this->_responseType = $responseType;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve responseType
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getResponseType()
|
||||
{
|
||||
return $this->_responseType;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the current twitter trends. Currnetly only supports json as the return.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function trends()
|
||||
{
|
||||
$this->_uri->setPath('/trends.json');
|
||||
$this->setUri($this->_uri);
|
||||
$response = $this->request();
|
||||
|
||||
return Zend_Json::decode($response->getBody());
|
||||
}
|
||||
|
||||
public function search($query, array $params = array())
|
||||
{
|
||||
|
||||
$this->_uri->setPath('/search.' . $this->_responseType);
|
||||
$this->_uri->setQuery(null);
|
||||
|
||||
$_query = array();
|
||||
|
||||
$_query['q'] = $query;
|
||||
|
||||
foreach($params as $key=>$param) {
|
||||
switch($key) {
|
||||
case 'geocode':
|
||||
case 'lang':
|
||||
$_query[$key] = $param;
|
||||
break;
|
||||
case 'rpp':
|
||||
$_query[$key] = (intval($param) > 100) ? 100 : intval($param);
|
||||
break;
|
||||
case 'since_id':
|
||||
case 'page':
|
||||
$_query[$key] = intval($param);
|
||||
break;
|
||||
case 'show_user':
|
||||
$_query[$key] = 'true';
|
||||
}
|
||||
}
|
||||
|
||||
$this->_uri->setQuery($_query);
|
||||
|
||||
$this->setUri($this->_uri);
|
||||
$response = $this->request();
|
||||
|
||||
switch($this->_responseType) {
|
||||
case 'json':
|
||||
return Zend_Json::decode($response->getBody());
|
||||
break;
|
||||
case 'atom':
|
||||
return Zend_Feed::importString($response->getBody());
|
||||
break;
|
||||
}
|
||||
|
||||
return ;
|
||||
}
|
||||
}
|
947
libs/Zend/Service/Yahoo.php
Normal file
947
libs/Zend/Service/Yahoo.php
Normal file
@ -0,0 +1,947 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Yahoo
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: Yahoo.php 8064 2008-02-16 10:58:39Z thomas $
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Yahoo
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Yahoo
|
||||
{
|
||||
/**
|
||||
* Yahoo Developer Application ID
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $appId;
|
||||
|
||||
/**
|
||||
* Reference to the REST client
|
||||
*
|
||||
* @var Zend_Rest_Client
|
||||
*/
|
||||
protected $_rest;
|
||||
|
||||
|
||||
/**
|
||||
* Sets the application ID and instantiates the REST client
|
||||
*
|
||||
* @param string $appId specified the developer's appid
|
||||
* @return void
|
||||
*/
|
||||
public function __construct($appId)
|
||||
{
|
||||
$this->appId = (string) $appId;
|
||||
/**
|
||||
* @see Zend_Rest_Client
|
||||
*/
|
||||
require_once 'Zend/Rest/Client.php';
|
||||
$this->_rest = new Zend_Rest_Client('http://search.yahooapis.com');
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Retrieve Inlink Data from siteexplorer.yahoo.com. A basic query
|
||||
* consists simply of a URL. Additional options that can be
|
||||
* specified consist of:
|
||||
* 'results' => int How many results to return, max is 100
|
||||
* 'start' => int The start offset for search results
|
||||
* 'entire_site' => bool Data for the whole site or a single page
|
||||
* 'omit_inlinks' => (none|domain|subdomain) Filter inlinks from these sources
|
||||
*
|
||||
* @param string $query the query being run
|
||||
* @param array $options any optional parameters
|
||||
* @return Zend_Service_Yahoo_ResultSet The return set
|
||||
* @throws Zend_Service_Exception
|
||||
*/
|
||||
public function inlinkDataSearch($query, array $options = array())
|
||||
{
|
||||
static $defaultOptions = array('results' => '50',
|
||||
'start' => 1);
|
||||
|
||||
$options = $this->_prepareOptions($query, $options, $defaultOptions);
|
||||
$this->_validateInlinkDataSearch($options);
|
||||
|
||||
$this->_rest->getHttpClient()->resetParameters();
|
||||
$this->_rest->setUri('http://search.yahooapis.com');
|
||||
$response = $this->_rest->restGet('/SiteExplorerService/V1/inlinkData', $options);
|
||||
|
||||
if ($response->isError()) {
|
||||
/**
|
||||
* @see Zend_Service_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Exception.php';
|
||||
throw new Zend_Service_Exception('An error occurred sending request. Status code: ' .
|
||||
$response->getStatus());
|
||||
}
|
||||
|
||||
$dom = new DOMDocument();
|
||||
$dom->loadXML($response->getBody());
|
||||
|
||||
self::_checkErrors($dom);
|
||||
|
||||
/**
|
||||
* @see Zend_Service_Yahoo_InlinkDataResultSet
|
||||
*/
|
||||
require_once 'Zend/Service/Yahoo/InlinkDataResultSet.php';
|
||||
return new Zend_Service_Yahoo_InlinkDataResultSet($dom);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Perform a search of images. The most basic query consists simply
|
||||
* of a plain text search, but you can also specify the type of
|
||||
* image, the format, color, etc.
|
||||
*
|
||||
* The specific options are:
|
||||
* 'type' => (all|any|phrase) How to parse the query terms
|
||||
* 'results' => int How many results to return, max is 50
|
||||
* 'start' => int The start offset for search results
|
||||
* 'format' => (any|bmp|gif|jpeg|png) The type of images to search for
|
||||
* 'coloration' => (any|color|bw) The coloration of images to search for
|
||||
* 'adult_ok' => bool Flag to allow 'adult' images.
|
||||
*
|
||||
* @param string $query the query to be run
|
||||
* @param array $options an optional array of query options
|
||||
* @return Zend_Service_Yahoo_ImageResultSet the search results
|
||||
* @throws Zend_Service_Exception
|
||||
*/
|
||||
public function imageSearch($query, array $options = array())
|
||||
{
|
||||
static $defaultOptions = array('type' => 'all',
|
||||
'results' => 10,
|
||||
'start' => 1,
|
||||
'format' => 'any',
|
||||
'coloration' => 'any');
|
||||
|
||||
$options = $this->_prepareOptions($query, $options, $defaultOptions);
|
||||
|
||||
$this->_validateImageSearch($options);
|
||||
|
||||
$this->_rest->getHttpClient()->resetParameters();
|
||||
$this->_rest->setUri('http://search.yahooapis.com');
|
||||
$response = $this->_rest->restGet('/ImageSearchService/V1/imageSearch', $options);
|
||||
|
||||
if ($response->isError()) {
|
||||
/**
|
||||
* @see Zend_Service_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Exception.php';
|
||||
throw new Zend_Service_Exception('An error occurred sending request. Status code: ' .
|
||||
$response->getStatus());
|
||||
}
|
||||
|
||||
$dom = new DOMDocument();
|
||||
$dom->loadXML($response->getBody());
|
||||
|
||||
self::_checkErrors($dom);
|
||||
|
||||
/**
|
||||
* @see Zend_Service_YahooImageResultSet
|
||||
*/
|
||||
require_once 'Zend/Service/Yahoo/ImageResultSet.php';
|
||||
return new Zend_Service_Yahoo_ImageResultSet($dom);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Perform a search on local.yahoo.com. The basic search
|
||||
* consists of a query and some fragment of location information;
|
||||
* for example zipcode, latitude/longitude, or street address.
|
||||
*
|
||||
* Query options include:
|
||||
* 'results' => int How many results to return, max is 50
|
||||
* 'start' => int The start offset for search results
|
||||
* 'sort' => (relevance|title|distance|rating) How to order your results
|
||||
*
|
||||
* 'radius' => float The radius (in miles) in which to search
|
||||
*
|
||||
* 'longitude' => float The longitude of the location to search around
|
||||
* 'latitude' => float The latitude of the location to search around
|
||||
*
|
||||
* 'zip' => string The zipcode to search around
|
||||
*
|
||||
* 'street' => string The street address to search around
|
||||
* 'city' => string The city for address search
|
||||
* 'state' => string The state for address search
|
||||
* 'location' => string An adhoc location string to search around
|
||||
*
|
||||
* @param string $query The query string you want to run
|
||||
* @param array $options The search options, including location
|
||||
* @return Zend_Service_Yahoo_LocalResultSet The results
|
||||
* @throws Zend_Service_Exception
|
||||
*/
|
||||
public function localSearch($query, array $options = array())
|
||||
{
|
||||
static $defaultOptions = array('results' => 10,
|
||||
'start' => 1,
|
||||
'sort' => 'distance',
|
||||
'radius' => 5);
|
||||
|
||||
$options = $this->_prepareOptions($query, $options, $defaultOptions);
|
||||
|
||||
$this->_validateLocalSearch($options);
|
||||
|
||||
$this->_rest->getHttpClient()->resetParameters();
|
||||
$this->_rest->setUri('http://local.yahooapis.com');
|
||||
$response = $this->_rest->restGet('/LocalSearchService/V1/localSearch', $options);
|
||||
|
||||
if ($response->isError()) {
|
||||
/**
|
||||
* @see Zend_Service_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Exception.php';
|
||||
throw new Zend_Service_Exception('An error occurred sending request. Status code: ' .
|
||||
$response->getStatus());
|
||||
}
|
||||
|
||||
$dom = new DOMDocument();
|
||||
$dom->loadXML($response->getBody());
|
||||
|
||||
self::_checkErrors($dom);
|
||||
|
||||
/**
|
||||
* @see Zend_Service_Yahoo_LocalResultSet
|
||||
*/
|
||||
require_once 'Zend/Service/Yahoo/LocalResultSet.php';
|
||||
return new Zend_Service_Yahoo_LocalResultSet($dom);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Execute a search on news.yahoo.com. This method minimally takes a
|
||||
* text query to search on.
|
||||
*
|
||||
* Query options coonsist of:
|
||||
*
|
||||
* 'results' => int How many results to return, max is 50
|
||||
* 'start' => int The start offset for search results
|
||||
* 'sort' => (rank|date) How to order your results
|
||||
* 'language' => lang The target document language to match
|
||||
* 'type' => (all|any|phrase) How the query should be parsed
|
||||
* 'site' => string A site to which your search should be restricted
|
||||
*
|
||||
* @param string $query The query to run
|
||||
* @param array $options The array of optional parameters
|
||||
* @return Zend_Service_Yahoo_NewsResultSet The query return set
|
||||
* @throws Zend_Service_Exception
|
||||
*/
|
||||
public function newsSearch($query, array $options = array())
|
||||
{
|
||||
static $defaultOptions = array('type' => 'all',
|
||||
'start' => 1,
|
||||
'sort' => 'rank');
|
||||
|
||||
$options = $this->_prepareOptions($query, $options, $defaultOptions);
|
||||
|
||||
$this->_validateNewsSearch($options);
|
||||
|
||||
$this->_rest->getHttpClient()->resetParameters();
|
||||
$this->_rest->setUri('http://search.yahooapis.com');
|
||||
$response = $this->_rest->restGet('/NewsSearchService/V1/newsSearch', $options);
|
||||
|
||||
if ($response->isError()) {
|
||||
/**
|
||||
* @see Zend_Service_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Exception.php';
|
||||
throw new Zend_Service_Exception('An error occurred sending request. Status code: ' .
|
||||
$response->getStatus());
|
||||
}
|
||||
|
||||
$dom = new DOMDocument();
|
||||
$dom->loadXML($response->getBody());
|
||||
|
||||
self::_checkErrors($dom);
|
||||
|
||||
/**
|
||||
* @see Zend_Service_Yahoo_NewsResultSet
|
||||
*/
|
||||
require_once 'Zend/Service/Yahoo/NewsResultSet.php';
|
||||
return new Zend_Service_Yahoo_NewsResultSet($dom);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Retrieve Page Data from siteexplorer.yahoo.com. A basic query
|
||||
* consists simply of a URL. Additional options that can be
|
||||
* specified consist of:
|
||||
* 'results' => int How many results to return, max is 100
|
||||
* 'start' => int The start offset for search results
|
||||
* 'domain_only' => bool Data for just the given domain or all sub-domains also
|
||||
*
|
||||
* @param string $query the query being run
|
||||
* @param array $options any optional parameters
|
||||
* @return Zend_Service_Yahoo_ResultSet The return set
|
||||
* @throws Zend_Service_Exception
|
||||
*/
|
||||
public function pageDataSearch($query, array $options = array())
|
||||
{
|
||||
static $defaultOptions = array('results' => '50',
|
||||
'start' => 1);
|
||||
|
||||
$options = $this->_prepareOptions($query, $options, $defaultOptions);
|
||||
$this->_validatePageDataSearch($options);
|
||||
|
||||
$this->_rest->getHttpClient()->resetParameters();
|
||||
$this->_rest->setUri('http://search.yahooapis.com');
|
||||
$response = $this->_rest->restGet('/SiteExplorerService/V1/pageData', $options);
|
||||
|
||||
if ($response->isError()) {
|
||||
/**
|
||||
* @see Zend_Service_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Exception.php';
|
||||
throw new Zend_Service_Exception('An error occurred sending request. Status code: ' .
|
||||
$response->getStatus());
|
||||
}
|
||||
|
||||
$dom = new DOMDocument();
|
||||
$dom->loadXML($response->getBody());
|
||||
|
||||
self::_checkErrors($dom);
|
||||
|
||||
/**
|
||||
* @see Zend_Service_Yahoo_PageDataResultSet
|
||||
*/
|
||||
require_once 'Zend/Service/Yahoo/PageDataResultSet.php';
|
||||
return new Zend_Service_Yahoo_PageDataResultSet($dom);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Perform a search of videos. The most basic query consists simply
|
||||
* of a plain text search, but you can also specify the format of
|
||||
* video.
|
||||
*
|
||||
* The specific options are:
|
||||
* 'type' => (all|any|phrase) How to parse the query terms
|
||||
* 'results' => int How many results to return, max is 50
|
||||
* 'start' => int The start offset for search results
|
||||
* 'format' => (any|avi|flash|mpeg|msmedia|quicktime|realmedia) The type of videos to search for
|
||||
* 'adult_ok' => bool Flag to allow 'adult' videos.
|
||||
*
|
||||
* @param string $query the query to be run
|
||||
* @param array $options an optional array of query options
|
||||
* @return Zend_Service_Yahoo_VideoResultSet the search results
|
||||
* @throws Zend_Service_Exception
|
||||
*/
|
||||
public function videoSearch($query, array $options = array())
|
||||
{
|
||||
static $defaultOptions = array('type' => 'all',
|
||||
'results' => 10,
|
||||
'start' => 1,
|
||||
'format' => 'any');
|
||||
|
||||
$options = $this->_prepareOptions($query, $options, $defaultOptions);
|
||||
|
||||
$this->_validateVideoSearch($options);
|
||||
|
||||
$this->_rest->getHttpClient()->resetParameters();
|
||||
$this->_rest->setUri('http://search.yahooapis.com');
|
||||
$response = $this->_rest->restGet('/VideoSearchService/V1/videoSearch', $options);
|
||||
|
||||
if ($response->isError()) {
|
||||
/**
|
||||
* @see Zend_Service_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Exception.php';
|
||||
throw new Zend_Service_Exception('An error occurred sending request. Status code: ' .
|
||||
$response->getStatus());
|
||||
}
|
||||
|
||||
$dom = new DOMDocument();
|
||||
$dom->loadXML($response->getBody());
|
||||
|
||||
self::_checkErrors($dom);
|
||||
|
||||
/**
|
||||
* @see Zend_Service_YahooVideoResultSet
|
||||
*/
|
||||
require_once 'Zend/Service/Yahoo/VideoResultSet.php';
|
||||
return new Zend_Service_Yahoo_VideoResultSet($dom);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Perform a web content search on search.yahoo.com. A basic query
|
||||
* consists simply of a text query. Additional options that can be
|
||||
* specified consist of:
|
||||
* 'results' => int How many results to return, max is 50
|
||||
* 'start' => int The start offset for search results
|
||||
* 'language' => lang The target document language to match
|
||||
* 'type' => (all|any|phrase) How the query should be parsed
|
||||
* 'site' => string A site to which your search should be restricted
|
||||
* 'format' => (any|html|msword|pdf|ppt|rss|txt|xls)
|
||||
* 'adult_ok' => bool permit 'adult' content in the search results
|
||||
* 'similar_ok' => bool permit similar results in the result set
|
||||
* 'country' => string The country code for the content searched
|
||||
* 'license' => (any|cc_any|cc_commercial|cc_modifiable) The license of content being searched
|
||||
*
|
||||
* @param string $query the query being run
|
||||
* @param array $options any optional parameters
|
||||
* @return Zend_Service_Yahoo_WebResultSet The return set
|
||||
* @throws Zend_Service_Exception
|
||||
*/
|
||||
public function webSearch($query, array $options = array())
|
||||
{
|
||||
static $defaultOptions = array('type' => 'all',
|
||||
'start' => 1,
|
||||
'license' => 'any',
|
||||
'results' => 10,
|
||||
'format' => 'any');
|
||||
|
||||
$options = $this->_prepareOptions($query, $options, $defaultOptions);
|
||||
$this->_validateWebSearch($options);
|
||||
|
||||
$this->_rest->getHttpClient()->resetParameters();
|
||||
$this->_rest->setUri('http://search.yahooapis.com');
|
||||
$response = $this->_rest->restGet('/WebSearchService/V1/webSearch', $options);
|
||||
|
||||
if ($response->isError()) {
|
||||
/**
|
||||
* @see Zend_Service_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Exception.php';
|
||||
throw new Zend_Service_Exception('An error occurred sending request. Status code: ' .
|
||||
$response->getStatus());
|
||||
}
|
||||
|
||||
$dom = new DOMDocument();
|
||||
$dom->loadXML($response->getBody());
|
||||
|
||||
self::_checkErrors($dom);
|
||||
|
||||
/**
|
||||
* @see Zend_Service_Yahoo_WebResultSet
|
||||
*/
|
||||
require_once 'Zend/Service/Yahoo/WebResultSet.php';
|
||||
return new Zend_Service_Yahoo_WebResultSet($dom);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns a reference to the REST client
|
||||
*
|
||||
* @return Zend_Rest_Client
|
||||
*/
|
||||
public function getRestClient()
|
||||
{
|
||||
return $this->_rest;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Validate Inlink Data Search Options
|
||||
*
|
||||
* @param array $options
|
||||
* @return void
|
||||
* @throws Zend_Service_Exception
|
||||
*/
|
||||
protected function _validateInlinkDataSearch(array $options)
|
||||
{
|
||||
$validOptions = array('appid', 'query', 'results', 'start', 'entire_site', 'omit_inlinks');
|
||||
|
||||
$this->_compareOptions($options, $validOptions);
|
||||
|
||||
/**
|
||||
* @see Zend_Validate_Between
|
||||
*/
|
||||
require_once 'Zend/Validate/Between.php';
|
||||
$between = new Zend_Validate_Between(1, 100, true);
|
||||
|
||||
if (isset($options['results']) && !$between->setMin(1)->setMax(100)->isValid($options['results'])) {
|
||||
/**
|
||||
* @see Zend_Service_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Exception.php';
|
||||
throw new Zend_Service_Exception("Invalid value for option 'results': {$options['results']}");
|
||||
}
|
||||
|
||||
if (isset($options['start']) && !$between->setMin(1)->setMax(1000)->isValid($options['start'])) {
|
||||
/**
|
||||
* @see Zend_Service_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Exception.php';
|
||||
throw new Zend_Service_Exception("Invalid value for option 'start': {$options['start']}");
|
||||
}
|
||||
|
||||
if (isset($options['omit_inlinks'])) {
|
||||
$this->_validateInArray('omit_inlinks', $options['omit_inlinks'], array('none', 'domain', 'subdomain'));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Validate Image Search Options
|
||||
*
|
||||
* @param array $options
|
||||
* @return void
|
||||
* @throws Zend_Service_Exception
|
||||
*/
|
||||
protected function _validateImageSearch(array $options)
|
||||
{
|
||||
$validOptions = array('appid', 'query', 'type', 'results', 'start', 'format', 'coloration', 'adult_ok');
|
||||
|
||||
$this->_compareOptions($options, $validOptions);
|
||||
|
||||
if (isset($options['type'])) {
|
||||
switch($options['type']) {
|
||||
case 'all':
|
||||
case 'any':
|
||||
case 'phrase':
|
||||
break;
|
||||
default:
|
||||
/**
|
||||
* @see Zend_Service_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Exception.php';
|
||||
throw new Zend_Service_Exception("Invalid value for option 'type': '{$options['type']}'");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @see Zend_Validate_Between
|
||||
*/
|
||||
require_once 'Zend/Validate/Between.php';
|
||||
$between = new Zend_Validate_Between(1, 50, true);
|
||||
|
||||
if (isset($options['results']) && !$between->setMin(1)->setMax(50)->isValid($options['results'])) {
|
||||
/**
|
||||
* @see Zend_Service_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Exception.php';
|
||||
throw new Zend_Service_Exception("Invalid value for option 'results': {$options['results']}");
|
||||
}
|
||||
|
||||
if (isset($options['start']) && !$between->setMin(1)->setMax(1000)->isValid($options['start'])) {
|
||||
/**
|
||||
* @see Zend_Service_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Exception.php';
|
||||
throw new Zend_Service_Exception("Invalid value for option 'start': {$options['start']}");
|
||||
}
|
||||
|
||||
if (isset($options['format'])) {
|
||||
switch ($options['format']) {
|
||||
case 'any':
|
||||
case 'bmp':
|
||||
case 'gif':
|
||||
case 'jpeg':
|
||||
case 'png':
|
||||
break;
|
||||
default:
|
||||
/**
|
||||
* @see Zend_Service_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Exception.php';
|
||||
throw new Zend_Service_Exception("Invalid value for option 'format': {$options['format']}");
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($options['coloration'])) {
|
||||
switch ($options['coloration']) {
|
||||
case 'any':
|
||||
case 'color':
|
||||
case 'bw':
|
||||
break;
|
||||
default:
|
||||
/**
|
||||
* @see Zend_Service_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Exception.php';
|
||||
throw new Zend_Service_Exception("Invalid value for option 'coloration': "
|
||||
. "{$options['coloration']}");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Validate Local Search Options
|
||||
*
|
||||
* @param array $options
|
||||
* @return void
|
||||
* @throws Zend_Service_Exception
|
||||
*/
|
||||
protected function _validateLocalSearch(array $options)
|
||||
{
|
||||
$validOptions = array('appid', 'query', 'results', 'start', 'sort', 'radius', 'street',
|
||||
'city', 'state', 'zip', 'location', 'latitude', 'longitude');
|
||||
|
||||
$this->_compareOptions($options, $validOptions);
|
||||
|
||||
/**
|
||||
* @see Zend_Validate_Between
|
||||
*/
|
||||
require_once 'Zend/Validate/Between.php';
|
||||
$between = new Zend_Validate_Between(1, 20, true);
|
||||
|
||||
if (isset($options['results']) && !$between->setMin(1)->setMax(20)->isValid($options['results'])) {
|
||||
/**
|
||||
* @see Zend_Service_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Exception.php';
|
||||
throw new Zend_Service_Exception("Invalid value for option 'results': {$options['results']}");
|
||||
}
|
||||
|
||||
if (isset($options['start']) && !$between->setMin(1)->setMax(1000)->isValid($options['start'])) {
|
||||
/**
|
||||
* @see Zend_Service_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Exception.php';
|
||||
throw new Zend_Service_Exception("Invalid value for option 'start': {$options['start']}");
|
||||
}
|
||||
|
||||
if (isset($options['longitude']) && !$between->setMin(-90)->setMax(90)->isValid($options['longitude'])) {
|
||||
/**
|
||||
* @see Zend_Service_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Exception.php';
|
||||
throw new Zend_Service_Exception("Invalid value for option 'longitude': {$options['longitude']}");
|
||||
}
|
||||
|
||||
if (isset($options['latitude']) && !$between->setMin(-180)->setMax(180)->isValid($options['latitude'])) {
|
||||
/**
|
||||
* @see Zend_Service_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Exception.php';
|
||||
throw new Zend_Service_Exception("Invalid value for option 'latitude': {$options['latitude']}");
|
||||
}
|
||||
|
||||
if (isset($options['zip']) && !preg_match('/(^\d{5}$)|(^\d{5}-\d{4}$)/', $options['zip'])) {
|
||||
/**
|
||||
* @see Zend_Service_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Exception.php';
|
||||
throw new Zend_Service_Exception("Invalid value for option 'zip': {$options['zip']}");
|
||||
}
|
||||
|
||||
$hasLocation = false;
|
||||
$locationFields = array('street', 'city', 'state', 'zip', 'location');
|
||||
foreach ($locationFields as $field) {
|
||||
if (isset($options[$field]) && $options[$field] != '') {
|
||||
$hasLocation = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!$hasLocation && (!isset($options['latitude']) || !isset($options['longitude']))) {
|
||||
/**
|
||||
* @see Zend_Service_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Exception.php';
|
||||
throw new Zend_Service_Exception('Location data are required but missing');
|
||||
}
|
||||
|
||||
if (!in_array($options['sort'], array('relevance', 'title', 'distance', 'rating'))) {
|
||||
/**
|
||||
* @see Zend_Service_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Exception.php';
|
||||
throw new Zend_Service_Exception("Invalid value for option 'sort': {$options['sort']}");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Validate News Search Options
|
||||
*
|
||||
* @param array $options
|
||||
* @return void
|
||||
* @throws Zend_Service_Exception
|
||||
*/
|
||||
protected function _validateNewsSearch(array $options)
|
||||
{
|
||||
$validOptions = array('appid', 'query', 'results', 'start', 'sort', 'language', 'type', 'site');
|
||||
|
||||
$this->_compareOptions($options, $validOptions);
|
||||
|
||||
/**
|
||||
* @see Zend_Validate_Between
|
||||
*/
|
||||
require_once 'Zend/Validate/Between.php';
|
||||
$between = new Zend_Validate_Between(1, 50, true);
|
||||
|
||||
if (isset($options['results']) && !$between->setMin(1)->setMax(50)->isValid($options['results'])) {
|
||||
/**
|
||||
* @see Zend_Service_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Exception.php';
|
||||
throw new Zend_Service_Exception("Invalid value for option 'results': {$options['results']}");
|
||||
}
|
||||
|
||||
if (isset($options['start']) && !$between->setMin(1)->setMax(1000)->isValid($options['start'])) {
|
||||
/**
|
||||
* @see Zend_Service_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Exception.php';
|
||||
throw new Zend_Service_Exception("Invalid value for option 'start': {$options['start']}");
|
||||
}
|
||||
|
||||
if (isset($options['language'])) {
|
||||
$this->_validateLanguage($options['language']);
|
||||
}
|
||||
|
||||
$this->_validateInArray('sort', $options['sort'], array('rank', 'date'));
|
||||
$this->_validateInArray('type', $options['type'], array('all', 'any', 'phrase'));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Validate Page Data Search Options
|
||||
*
|
||||
* @param array $options
|
||||
* @return void
|
||||
* @throws Zend_Service_Exception
|
||||
*/
|
||||
protected function _validatePageDataSearch(array $options)
|
||||
{
|
||||
$validOptions = array('appid', 'query', 'results', 'start', 'domain_only');
|
||||
|
||||
$this->_compareOptions($options, $validOptions);
|
||||
|
||||
/**
|
||||
* @see Zend_Validate_Between
|
||||
*/
|
||||
require_once 'Zend/Validate/Between.php';
|
||||
$between = new Zend_Validate_Between(1, 100, true);
|
||||
|
||||
if (isset($options['results']) && !$between->setMin(1)->setMax(100)->isValid($options['results'])) {
|
||||
/**
|
||||
* @see Zend_Service_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Exception.php';
|
||||
throw new Zend_Service_Exception("Invalid value for option 'results': {$options['results']}");
|
||||
}
|
||||
|
||||
if (isset($options['start']) && !$between->setMin(1)->setMax(1000)->isValid($options['start'])) {
|
||||
/**
|
||||
* @see Zend_Service_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Exception.php';
|
||||
throw new Zend_Service_Exception("Invalid value for option 'start': {$options['start']}");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Validate Video Search Options
|
||||
*
|
||||
* @param array $options
|
||||
* @return void
|
||||
* @throws Zend_Service_Exception
|
||||
*/
|
||||
protected function _validateVideoSearch(array $options)
|
||||
{
|
||||
$validOptions = array('appid', 'query', 'type', 'results', 'start', 'format', 'adult_ok');
|
||||
|
||||
$this->_compareOptions($options, $validOptions);
|
||||
|
||||
if (isset($options['type'])) {
|
||||
$this->_validateInArray('type', $options['type'], array('all', 'any', 'phrase'));
|
||||
}
|
||||
|
||||
/**
|
||||
* @see Zend_Validate_Between
|
||||
*/
|
||||
require_once 'Zend/Validate/Between.php';
|
||||
$between = new Zend_Validate_Between(1, 50, true);
|
||||
|
||||
if (isset($options['results']) && !$between->setMin(1)->setMax(50)->isValid($options['results'])) {
|
||||
/**
|
||||
* @see Zend_Service_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Exception.php';
|
||||
throw new Zend_Service_Exception("Invalid value for option 'results': {$options['results']}");
|
||||
}
|
||||
|
||||
if (isset($options['start']) && !$between->setMin(1)->setMax(1000)->isValid($options['start'])) {
|
||||
/**
|
||||
* @see Zend_Service_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Exception.php';
|
||||
throw new Zend_Service_Exception("Invalid value for option 'start': {$options['start']}");
|
||||
}
|
||||
|
||||
if (isset($options['format'])) {
|
||||
$this->_validateInArray('format', $options['format'], array('any', 'avi', 'flash', 'mpeg', 'msmedia', 'quicktime', 'realmedia'));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Validate Web Search Options
|
||||
*
|
||||
* @param array $options
|
||||
* @return void
|
||||
* @throws Zend_Service_Exception
|
||||
*/
|
||||
protected function _validateWebSearch(array $options)
|
||||
{
|
||||
$validOptions = array('appid', 'query', 'results', 'start', 'language', 'type', 'format', 'adult_ok',
|
||||
'similar_ok', 'country', 'site', 'subscription', 'license');
|
||||
|
||||
$this->_compareOptions($options, $validOptions);
|
||||
|
||||
/**
|
||||
* @see Zend_Validate_Between
|
||||
*/
|
||||
require_once 'Zend/Validate/Between.php';
|
||||
$between = new Zend_Validate_Between(1, 100, true);
|
||||
|
||||
if (isset($options['results']) && !$between->setMin(1)->setMax(100)->isValid($options['results'])) {
|
||||
/**
|
||||
* @see Zend_Service_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Exception.php';
|
||||
throw new Zend_Service_Exception("Invalid value for option 'results': {$options['results']}");
|
||||
}
|
||||
|
||||
if (isset($options['start']) && !$between->setMin(1)->setMax(1000)->isValid($options['start'])) {
|
||||
/**
|
||||
* @see Zend_Service_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Exception.php';
|
||||
throw new Zend_Service_Exception("Invalid value for option 'start': {$options['start']}");
|
||||
}
|
||||
|
||||
if (isset($options['language'])) {
|
||||
$this->_validateLanguage($options['language']);
|
||||
}
|
||||
|
||||
$this->_validateInArray('type', $options['type'], array('all', 'any', 'phrase'));
|
||||
$this->_validateInArray('format', $options['format'], array('any', 'html', 'msword', 'pdf', 'ppt', 'rss',
|
||||
'txt', 'xls'));
|
||||
$this->_validateInArray('license', $options['license'], array('any', 'cc_any', 'cc_commercial',
|
||||
'cc_modifiable'));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Prepare options for sending to Yahoo!
|
||||
*
|
||||
* @param string $query Search Query
|
||||
* @param array $options User specified options
|
||||
* @param array $defaultOptions Required/Default options
|
||||
* @return array
|
||||
*/
|
||||
protected function _prepareOptions($query, array $options, array $defaultOptions = array())
|
||||
{
|
||||
$options['appid'] = $this->appId;
|
||||
$options['query'] = (string) $query;
|
||||
|
||||
return array_merge($defaultOptions, $options);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Throws an exception if the chosen language is not supported
|
||||
*
|
||||
* @param string $lang Language code
|
||||
* @return void
|
||||
* @throws Zend_Service_Exception
|
||||
*/
|
||||
protected function _validateLanguage($lang)
|
||||
{
|
||||
$languages = array('ar', 'bg', 'ca', 'szh', 'tzh', 'hr', 'cs', 'da', 'nl', 'en', 'et', 'fi', 'fr', 'de', 'el',
|
||||
'he', 'hu', 'is', 'id', 'it', 'ja', 'ko', 'lv', 'lt', 'no', 'fa', 'pl', 'pt', 'ro', 'ru', 'sk', 'sr', 'sl',
|
||||
'es', 'sv', 'th', 'tr'
|
||||
);
|
||||
if (!in_array($lang, $languages)) {
|
||||
/**
|
||||
* @see Zend_Service_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Exception.php';
|
||||
throw new Zend_Service_Exception("The selected language '$lang' is not supported");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Utility function to check for a difference between two arrays.
|
||||
*
|
||||
* @param array $options User specified options
|
||||
* @param array $validOptions Valid options
|
||||
* @return void
|
||||
* @throws Zend_Service_Exception if difference is found (e.g., unsupported query option)
|
||||
*/
|
||||
protected function _compareOptions(array $options, array $validOptions)
|
||||
{
|
||||
$difference = array_diff(array_keys($options), $validOptions);
|
||||
if ($difference) {
|
||||
/**
|
||||
* @see Zend_Service_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Exception.php';
|
||||
throw new Zend_Service_Exception('The following parameters are invalid: ' . join(', ', $difference));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Check that a named value is in the given array
|
||||
*
|
||||
* @param string $name Name associated with the value
|
||||
* @param mixed $value Value
|
||||
* @param array $array Array in which to check for the value
|
||||
* @return void
|
||||
* @throws Zend_Service_Exception
|
||||
*/
|
||||
protected function _validateInArray($name, $value, array $array)
|
||||
{
|
||||
if (!in_array($value, $array)) {
|
||||
/**
|
||||
* @see Zend_Service_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Exception.php';
|
||||
throw new Zend_Service_Exception("Invalid value for option '$name': $value");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Check if response is an error
|
||||
*
|
||||
* @param DOMDocument $dom DOM Object representing the result XML
|
||||
* @return void
|
||||
* @throws Zend_Service_Exception Thrown when the result from Yahoo! is an error
|
||||
*/
|
||||
protected static function _checkErrors(DOMDocument $dom)
|
||||
{
|
||||
$xpath = new DOMXPath($dom);
|
||||
$xpath->registerNamespace('yapi', 'urn:yahoo:api');
|
||||
|
||||
if ($xpath->query('//yapi:Error')->length >= 1) {
|
||||
$message = $xpath->query('//yapi:Error/yapi:Message/text()')->item(0)->data;
|
||||
/**
|
||||
* @see Zend_Service_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Exception.php';
|
||||
throw new Zend_Service_Exception($message);
|
||||
}
|
||||
}
|
||||
}
|
71
libs/Zend/Service/Yahoo/Image.php
Normal file
71
libs/Zend/Service/Yahoo/Image.php
Normal file
@ -0,0 +1,71 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Yahoo
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: Image.php 8064 2008-02-16 10:58:39Z thomas $
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Yahoo
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Yahoo_Image
|
||||
{
|
||||
/**
|
||||
* Image URL
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $Url;
|
||||
|
||||
/**
|
||||
* Image height in pixels
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
public $Height;
|
||||
|
||||
/**
|
||||
* Image width in pixels
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
public $Width;
|
||||
|
||||
|
||||
/**
|
||||
* Initializes the image
|
||||
*
|
||||
* @param DOMNode $dom
|
||||
* @param string $namespace
|
||||
* @return void
|
||||
*/
|
||||
public function __construct(DOMNode $dom, $namespace)
|
||||
{
|
||||
$xpath = new DOMXPath($dom->ownerDocument);
|
||||
$xpath->registerNamespace('yh', $namespace);
|
||||
$this->Url = Zend_Uri::factory($xpath->query('./yh:Url/text()', $dom)->item(0)->data);
|
||||
$this->Height = (int) $xpath->query('./yh:Height/text()', $dom)->item(0)->data;
|
||||
$this->Width = (int) $xpath->query('./yh:Width/text()', $dom)->item(0)->data;
|
||||
}
|
||||
}
|
111
libs/Zend/Service/Yahoo/ImageResult.php
Normal file
111
libs/Zend/Service/Yahoo/ImageResult.php
Normal file
@ -0,0 +1,111 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Yahoo
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: ImageResult.php 8064 2008-02-16 10:58:39Z thomas $
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @see Zend_Service_Yahoo_Result
|
||||
*/
|
||||
require_once 'Zend/Service/Yahoo/Result.php';
|
||||
|
||||
|
||||
/**
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Yahoo
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Yahoo_ImageResult extends Zend_Service_Yahoo_Result
|
||||
{
|
||||
/**
|
||||
* Summary info for the image
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $Summary;
|
||||
|
||||
/**
|
||||
* The URL of the webpage hosting the image
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $RefererUrl;
|
||||
|
||||
/**
|
||||
* The size of the files in bytes
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $FileSize;
|
||||
|
||||
/**
|
||||
* The type of file (bmp, gif, jpeg, etc.)
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $FileFormat;
|
||||
|
||||
/**
|
||||
* The height of the image in pixels
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $Height;
|
||||
|
||||
/**
|
||||
* The width of the image in pixels
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $Width;
|
||||
|
||||
/**
|
||||
* The thubmnail image for the article, if it exists
|
||||
*
|
||||
* @var Zend_Service_Yahoo_Image
|
||||
*/
|
||||
public $Thumbnail;
|
||||
|
||||
/**
|
||||
* Image result namespace
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $_namespace = 'urn:yahoo:srchmi';
|
||||
|
||||
|
||||
/**
|
||||
* Initializes the image result
|
||||
*
|
||||
* @param DOMElement $result
|
||||
* @return void
|
||||
*/
|
||||
public function __construct(DOMElement $result)
|
||||
{
|
||||
$this->_fields = array('Summary', 'RefererUrl', 'FileSize', 'FileFormat', 'Height', 'Width', 'Thumbnail');
|
||||
|
||||
parent::__construct($result);
|
||||
|
||||
$this->_setThumbnail();
|
||||
}
|
||||
}
|
63
libs/Zend/Service/Yahoo/ImageResultSet.php
Normal file
63
libs/Zend/Service/Yahoo/ImageResultSet.php
Normal file
@ -0,0 +1,63 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Yahoo
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: ImageResultSet.php 8064 2008-02-16 10:58:39Z thomas $
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @see Zend_Service_Yahoo_ResultSet
|
||||
*/
|
||||
require_once 'Zend/Service/Yahoo/ResultSet.php';
|
||||
|
||||
|
||||
/**
|
||||
* @see Zend_Service_Yahoo_ImageResult
|
||||
*/
|
||||
require_once 'Zend/Service/Yahoo/ImageResult.php';
|
||||
|
||||
|
||||
/**
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Yahoo
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Yahoo_ImageResultSet extends Zend_Service_Yahoo_ResultSet
|
||||
{
|
||||
/**
|
||||
* Image result set namespace
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $_namespace = 'urn:yahoo:srchmi';
|
||||
|
||||
|
||||
/**
|
||||
* Overrides Zend_Service_Yahoo_ResultSet::current()
|
||||
*
|
||||
* @return Zend_Service_Yahoo_ImageResult
|
||||
*/
|
||||
public function current()
|
||||
{
|
||||
return new Zend_Service_Yahoo_ImageResult($this->_results->item($this->_currentIndex));
|
||||
}
|
||||
}
|
58
libs/Zend/Service/Yahoo/InlinkDataResult.php
Normal file
58
libs/Zend/Service/Yahoo/InlinkDataResult.php
Normal file
@ -0,0 +1,58 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Yahoo
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: $
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @see Zend_Service_Yahoo_Result
|
||||
*/
|
||||
require_once 'Zend/Service/Yahoo/Result.php';
|
||||
|
||||
|
||||
/**
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Yahoo
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Yahoo_InlinkDataResult extends Zend_Service_Yahoo_Result
|
||||
{
|
||||
/**
|
||||
* Web result namespace
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $_namespace = 'urn:yahoo:srch';
|
||||
|
||||
|
||||
/**
|
||||
* Initializes the web result
|
||||
*
|
||||
* @param DOMElement $result
|
||||
* @return void
|
||||
*/
|
||||
public function __construct(DOMElement $result)
|
||||
{
|
||||
$this->_fields = array();
|
||||
parent::__construct($result);
|
||||
}
|
||||
}
|
62
libs/Zend/Service/Yahoo/InlinkDataResultSet.php
Normal file
62
libs/Zend/Service/Yahoo/InlinkDataResultSet.php
Normal file
@ -0,0 +1,62 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Yahoo
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: $
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @see Zend_Service_Yahoo_ResultSet
|
||||
*/
|
||||
require_once 'Zend/Service/Yahoo/ResultSet.php';
|
||||
|
||||
|
||||
/**
|
||||
* @see Zend_Service_Yahoo_WebResult
|
||||
*/
|
||||
require_once 'Zend/Service/Yahoo/InlinkDataResult.php';
|
||||
|
||||
|
||||
/**
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Yahoo
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Yahoo_InlinkDataResultSet extends Zend_Service_Yahoo_ResultSet
|
||||
{
|
||||
/**
|
||||
* Web result set namespace
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $_namespace = 'urn:yahoo:srch';
|
||||
|
||||
|
||||
/**
|
||||
* Overrides Zend_Service_Yahoo_ResultSet::current()
|
||||
*
|
||||
* @return Zend_Service_Yahoo_InlinkDataResult
|
||||
*/
|
||||
public function current()
|
||||
{
|
||||
return new Zend_Service_Yahoo_InlinkDataResult($this->_results->item($this->_currentIndex));
|
||||
}
|
||||
}
|
124
libs/Zend/Service/Yahoo/LocalResult.php
Normal file
124
libs/Zend/Service/Yahoo/LocalResult.php
Normal file
@ -0,0 +1,124 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Yahoo
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: LocalResult.php 8064 2008-02-16 10:58:39Z thomas $
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @see Zend_Service_Yahoo_Result
|
||||
*/
|
||||
require_once 'Zend/Service/Yahoo/Result.php';
|
||||
|
||||
|
||||
/**
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Yahoo
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Yahoo_LocalResult extends Zend_Service_Yahoo_Result
|
||||
{
|
||||
/**
|
||||
* Street address of the result
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $Address;
|
||||
|
||||
/**
|
||||
* City in which the result resides
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $City;
|
||||
|
||||
/**
|
||||
* State in which the result resides
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $State;
|
||||
|
||||
/**
|
||||
* Phone number for the result
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $Phone;
|
||||
|
||||
/**
|
||||
* User-submitted rating for the result
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $Rating;
|
||||
|
||||
/**
|
||||
* The distance to the result from your specified location
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $Distance;
|
||||
|
||||
/**
|
||||
* A URL of a map for the result
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $MapUrl;
|
||||
|
||||
/**
|
||||
* The URL for the business website, if known
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $BusinessUrl;
|
||||
|
||||
/**
|
||||
* The URL for linking to the business website, if known
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $BusinessClickUrl;
|
||||
|
||||
/**
|
||||
* Local result namespace
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $_namespace = 'urn:yahoo:lcl';
|
||||
|
||||
|
||||
/**
|
||||
* Initializes the local result
|
||||
*
|
||||
* @param DOMElement $result
|
||||
* @return void
|
||||
*/
|
||||
public function __construct(DOMElement $result)
|
||||
{
|
||||
$this->_fields = array('Address','City', 'City', 'State', 'Phone', 'Rating', 'Distance', 'MapUrl',
|
||||
'BusinessUrl', 'BusinessClickUrl');
|
||||
|
||||
parent::__construct($result);
|
||||
}
|
||||
}
|
84
libs/Zend/Service/Yahoo/LocalResultSet.php
Normal file
84
libs/Zend/Service/Yahoo/LocalResultSet.php
Normal file
@ -0,0 +1,84 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Yahoo
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: LocalResultSet.php 8064 2008-02-16 10:58:39Z thomas $
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @see Zend_Service_Yahoo_ResultSet
|
||||
*/
|
||||
require_once 'Zend/Service/Yahoo/ResultSet.php';
|
||||
|
||||
|
||||
/**
|
||||
* @see Zend_Service_Yahoo_LocalResult
|
||||
*/
|
||||
require_once 'Zend/Service/Yahoo/LocalResult.php';
|
||||
|
||||
|
||||
/**
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Yahoo
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Yahoo_LocalResultSet extends Zend_Service_Yahoo_ResultSet
|
||||
{
|
||||
/**
|
||||
* The URL of a webpage containing a map graphic with all returned results plotted on it.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $resultSetMapURL;
|
||||
|
||||
/**
|
||||
* Local result set namespace
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $_namespace = 'urn:yahoo:lcl';
|
||||
|
||||
|
||||
/**
|
||||
* Initializes the local result set
|
||||
*
|
||||
* @param DOMDocument $dom
|
||||
* @return void
|
||||
*/
|
||||
public function __construct(DOMDocument $dom)
|
||||
{
|
||||
parent::__construct($dom);
|
||||
|
||||
$this->resultSetMapURL = $this->_xpath->query('//yh:ResultSetMapUrl/text()')->item(0)->data;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Overrides Zend_Service_Yahoo_ResultSet::current()
|
||||
*
|
||||
* @return Zend_Service_Yahoo_LocalResult
|
||||
*/
|
||||
public function current()
|
||||
{
|
||||
return new Zend_Service_Yahoo_LocalResult($this->_results->item($this->_currentIndex));
|
||||
}
|
||||
}
|
112
libs/Zend/Service/Yahoo/NewsResult.php
Normal file
112
libs/Zend/Service/Yahoo/NewsResult.php
Normal file
@ -0,0 +1,112 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Yahoo
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: NewsResult.php 8064 2008-02-16 10:58:39Z thomas $
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @see Zend_Service_Yahoo_Result
|
||||
*/
|
||||
require_once 'Zend/Service/Yahoo/Result.php';
|
||||
|
||||
|
||||
/**
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Yahoo
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Yahoo_NewsResult extends Zend_Service_Yahoo_Result
|
||||
{
|
||||
/**
|
||||
* Sumamry text associated with the result article
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $Summary;
|
||||
|
||||
/**
|
||||
* The company who distributed the article
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $NewsSource;
|
||||
|
||||
/**
|
||||
* The URL for the company who distributed the article
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $NewsSourceUrl;
|
||||
|
||||
/**
|
||||
* The language the article is in
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $Language;
|
||||
|
||||
/**
|
||||
* The date the article was published (in unix timestamp format)
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $PublishDate;
|
||||
|
||||
/**
|
||||
* The date the article was modified (in unix timestamp format)
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $ModificationDate;
|
||||
|
||||
/**
|
||||
* The thubmnail image for the article, if it exists
|
||||
*
|
||||
* @var Zend_Service_Yahoo_Image
|
||||
*/
|
||||
public $Thumbnail;
|
||||
|
||||
/**
|
||||
* News result namespace
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $_namespace = 'urn:yahoo:yn';
|
||||
|
||||
|
||||
/**
|
||||
* Initializes the news result
|
||||
*
|
||||
* @param DOMElement $result
|
||||
* @return void
|
||||
*/
|
||||
public function __construct(DOMElement $result)
|
||||
{
|
||||
$this->_fields = array('Summary', 'NewsSource', 'NewsSourceUrl', 'Language', 'PublishDate',
|
||||
'ModificationDate', 'Thumbnail');
|
||||
|
||||
parent::__construct($result);
|
||||
|
||||
$this->_setThumbnail();
|
||||
}
|
||||
}
|
63
libs/Zend/Service/Yahoo/NewsResultSet.php
Normal file
63
libs/Zend/Service/Yahoo/NewsResultSet.php
Normal file
@ -0,0 +1,63 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Yahoo
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: NewsResultSet.php 8064 2008-02-16 10:58:39Z thomas $
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @see Zend_Service_Yahoo_ResultSet
|
||||
*/
|
||||
require_once 'Zend/Service/Yahoo/ResultSet.php';
|
||||
|
||||
|
||||
/**
|
||||
* @see Zend_Service_Yahoo_NewsResult
|
||||
*/
|
||||
require_once 'Zend/Service/Yahoo/NewsResult.php';
|
||||
|
||||
|
||||
/**
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Yahoo
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Yahoo_NewsResultSet extends Zend_Service_Yahoo_ResultSet
|
||||
{
|
||||
/**
|
||||
* News result set namespace
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $_namespace = 'urn:yahoo:yn';
|
||||
|
||||
|
||||
/**
|
||||
* Overrides Zend_Service_Yahoo_ResultSet::current()
|
||||
*
|
||||
* @return Zend_Service_Yahoo_NewsResult
|
||||
*/
|
||||
public function current()
|
||||
{
|
||||
return new Zend_Service_Yahoo_NewsResult($this->_results->item($this->_currentIndex));
|
||||
}
|
||||
}
|
58
libs/Zend/Service/Yahoo/PageDataResult.php
Normal file
58
libs/Zend/Service/Yahoo/PageDataResult.php
Normal file
@ -0,0 +1,58 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Yahoo
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: $
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @see Zend_Service_Yahoo_Result
|
||||
*/
|
||||
require_once 'Zend/Service/Yahoo/Result.php';
|
||||
|
||||
|
||||
/**
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Yahoo
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Yahoo_PageDataResult extends Zend_Service_Yahoo_Result
|
||||
{
|
||||
/**
|
||||
* Web result namespace
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $_namespace = 'urn:yahoo:srch';
|
||||
|
||||
|
||||
/**
|
||||
* Initializes the web result
|
||||
*
|
||||
* @param DOMElement $result
|
||||
* @return void
|
||||
*/
|
||||
public function __construct(DOMElement $result)
|
||||
{
|
||||
$this->_fields = array();
|
||||
parent::__construct($result);
|
||||
}
|
||||
}
|
62
libs/Zend/Service/Yahoo/PageDataResultSet.php
Normal file
62
libs/Zend/Service/Yahoo/PageDataResultSet.php
Normal file
@ -0,0 +1,62 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Yahoo
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: $
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @see Zend_Service_Yahoo_ResultSet
|
||||
*/
|
||||
require_once 'Zend/Service/Yahoo/ResultSet.php';
|
||||
|
||||
|
||||
/**
|
||||
* @see Zend_Service_Yahoo_WebResult
|
||||
*/
|
||||
require_once 'Zend/Service/Yahoo/PageDataResult.php';
|
||||
|
||||
|
||||
/**
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Yahoo
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Yahoo_PageDataResultSet extends Zend_Service_Yahoo_ResultSet
|
||||
{
|
||||
/**
|
||||
* Web result set namespace
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $_namespace = 'urn:yahoo:srch';
|
||||
|
||||
|
||||
/**
|
||||
* Overrides Zend_Service_Yahoo_ResultSet::current()
|
||||
*
|
||||
* @return Zend_Service_Yahoo_WebResult
|
||||
*/
|
||||
public function current()
|
||||
{
|
||||
return new Zend_Service_Yahoo_PageDataResult($this->_results->item($this->_currentIndex));
|
||||
}
|
||||
}
|
126
libs/Zend/Service/Yahoo/Result.php
Normal file
126
libs/Zend/Service/Yahoo/Result.php
Normal file
@ -0,0 +1,126 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Yahoo
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: Result.php 8064 2008-02-16 10:58:39Z thomas $
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Yahoo
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Yahoo_Result
|
||||
{
|
||||
/**
|
||||
* The title of the search entry
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $Title;
|
||||
|
||||
/**
|
||||
* The URL of the found object
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $Url;
|
||||
|
||||
/**
|
||||
* The URL for linking to the found object
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $ClickUrl;
|
||||
|
||||
/**
|
||||
* Result fields
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $_fields;
|
||||
|
||||
/**
|
||||
* REST response fragment for the result
|
||||
*
|
||||
* @var DOMElement
|
||||
*/
|
||||
protected $_result;
|
||||
|
||||
/**
|
||||
* Object for XPath queries
|
||||
*
|
||||
* @var DOMXPath
|
||||
*/
|
||||
protected $_xpath;
|
||||
|
||||
|
||||
/**
|
||||
* Initializes the result
|
||||
*
|
||||
* @param DOMElement $result
|
||||
* @return void
|
||||
*/
|
||||
public function __construct(DOMElement $result)
|
||||
{
|
||||
// default fields for all search results:
|
||||
$fields = array('Title', 'Url', 'ClickUrl');
|
||||
|
||||
// merge w/ child's fields
|
||||
$this->_fields = array_merge($this->_fields, $fields);
|
||||
|
||||
$this->_xpath = new DOMXPath($result->ownerDocument);
|
||||
$this->_xpath->registerNamespace('yh', $this->_namespace);
|
||||
|
||||
// add search results to appropriate fields
|
||||
|
||||
foreach ($this->_fields as $f) {
|
||||
$query = "./yh:$f/text()";
|
||||
$node = $this->_xpath->query($query, $result);
|
||||
if ($node->length == 1) {
|
||||
$this->{$f} = $node->item(0)->data;
|
||||
}
|
||||
}
|
||||
|
||||
$this->_result = $result;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Sets the Thumbnail property
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
protected function _setThumbnail()
|
||||
{
|
||||
$node = $this->_xpath->query('./yh:Thumbnail', $this->_result);
|
||||
if ($node->length == 1) {
|
||||
/**
|
||||
* @see Zend_Service_Yahoo_Image
|
||||
*/
|
||||
require_once 'Zend/Service/Yahoo/Image.php';
|
||||
$this->Thumbnail = new Zend_Service_Yahoo_Image($node->item(0), $this->_namespace);
|
||||
} else {
|
||||
$this->Thumbnail = null;
|
||||
}
|
||||
}
|
||||
}
|
195
libs/Zend/Service/Yahoo/ResultSet.php
Normal file
195
libs/Zend/Service/Yahoo/ResultSet.php
Normal file
@ -0,0 +1,195 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Yahoo
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: ResultSet.php 8064 2008-02-16 10:58:39Z thomas $
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Yahoo
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Yahoo_ResultSet implements SeekableIterator
|
||||
{
|
||||
/**
|
||||
* Total number of results available
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
public $totalResultsAvailable;
|
||||
|
||||
/**
|
||||
* The number of results in this result set
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
public $totalResultsReturned;
|
||||
|
||||
/**
|
||||
* The offset in the total result set of this search set
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
public $firstResultPosition;
|
||||
|
||||
/**
|
||||
* A DOMNodeList of results
|
||||
*
|
||||
* @var DOMNodeList
|
||||
*/
|
||||
protected $_results;
|
||||
|
||||
/**
|
||||
* Yahoo Web Service Return Document
|
||||
*
|
||||
* @var DOMDocument
|
||||
*/
|
||||
protected $_dom;
|
||||
|
||||
/**
|
||||
* Xpath Object for $this->_dom
|
||||
*
|
||||
* @var DOMXPath
|
||||
*/
|
||||
protected $_xpath;
|
||||
|
||||
/**
|
||||
* Current Index for SeekableIterator
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
protected $_currentIndex = 0;
|
||||
|
||||
|
||||
/**
|
||||
* Parse the search response and retrieve the results for iteration
|
||||
*
|
||||
* @param DOMDocument $dom the REST fragment for this object
|
||||
* @return void
|
||||
*/
|
||||
public function __construct(DOMDocument $dom)
|
||||
{
|
||||
$this->totalResultsAvailable = (int) $dom->documentElement->getAttribute('totalResultsAvailable');
|
||||
$this->totalResultsReturned = (int) $dom->documentElement->getAttribute('totalResultsReturned');
|
||||
$this->firstResultPosition = (int) $dom->documentElement->getAttribute('firstResultPosition');
|
||||
|
||||
$this->_dom = $dom;
|
||||
$this->_xpath = new DOMXPath($dom);
|
||||
|
||||
$this->_xpath->registerNamespace('yh', $this->_namespace);
|
||||
|
||||
$this->_results = $this->_xpath->query('//yh:Result');
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Total Number of results returned
|
||||
*
|
||||
* @return int Total number of results returned
|
||||
*/
|
||||
public function totalResults()
|
||||
{
|
||||
return $this->totalResultsReturned;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Implement SeekableIterator::current()
|
||||
*
|
||||
* Must be implemented by child classes
|
||||
*
|
||||
* @throws Zend_Service_Exception
|
||||
* @return Zend_Service_Yahoo_Result
|
||||
*/
|
||||
public function current()
|
||||
{
|
||||
/**
|
||||
* @see Zend_Service_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Exception.php';
|
||||
throw new Zend_Service_Exception('Zend_Service_Yahoo_ResultSet::current() must be implemented by child '
|
||||
. 'classes');
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Implement SeekableIterator::key()
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function key()
|
||||
{
|
||||
return $this->_currentIndex;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Implement SeekableIterator::next()
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function next()
|
||||
{
|
||||
$this->_currentIndex += 1;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Implement SeekableIterator::rewind()
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function rewind()
|
||||
{
|
||||
$this->_currentIndex = 0;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Implement SeekableIterator::seek()
|
||||
*
|
||||
* @param int $index
|
||||
* @return void
|
||||
* @throws OutOfBoundsException
|
||||
*/
|
||||
public function seek($index)
|
||||
{
|
||||
$indexInt = (int) $index;
|
||||
if ($indexInt >= 0 && $indexInt < $this->_results->length) {
|
||||
$this->_currentIndex = $indexInt;
|
||||
} else {
|
||||
throw new OutOfBoundsException("Illegal index '$index'");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Implement SeekableIterator::valid()
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
public function valid()
|
||||
{
|
||||
return $this->_currentIndex < $this->_results->length;
|
||||
}
|
||||
}
|
132
libs/Zend/Service/Yahoo/VideoResult.php
Normal file
132
libs/Zend/Service/Yahoo/VideoResult.php
Normal file
@ -0,0 +1,132 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Yahoo
|
||||
* @copyright Copyright (c) 2006 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: VideoResult.php 8064 2008-02-16 10:58:39Z thomas $
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @see Zend_Service_Yahoo_Result
|
||||
*/
|
||||
require_once 'Zend/Service/Yahoo/Result.php';
|
||||
|
||||
|
||||
/**
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Yahoo
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Yahoo_VideoResult extends Zend_Service_Yahoo_Result
|
||||
{
|
||||
/**
|
||||
* Summary info for the video
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $Summary;
|
||||
|
||||
/**
|
||||
* The URL of the webpage hosting the video
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $RefererUrl;
|
||||
|
||||
/**
|
||||
* The size of the files in bytes
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $FileSize;
|
||||
|
||||
/**
|
||||
* The type of file (bmp, gif, jpeg, etc.)
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $FileFormat;
|
||||
|
||||
/**
|
||||
* The height of the video in pixels
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $Height;
|
||||
|
||||
/**
|
||||
* The width of the video in pixels
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $Width;
|
||||
|
||||
/**
|
||||
* The duration of the video in seconds
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $Duration;
|
||||
|
||||
/**
|
||||
* The number of audio channels in the video
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $Channels;
|
||||
|
||||
/**
|
||||
* Whether the video is streamed or not
|
||||
*
|
||||
* @var boolean
|
||||
*/
|
||||
public $Streaming;
|
||||
|
||||
/**
|
||||
* The thubmnail video for the article, if it exists
|
||||
*
|
||||
* @var Zend_Service_Yahoo_Video
|
||||
*/
|
||||
public $Thumbnail;
|
||||
|
||||
/**
|
||||
* Video result namespace
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $_namespace = 'urn:yahoo:srchmv';
|
||||
|
||||
|
||||
/**
|
||||
* Initializes the video result
|
||||
*
|
||||
* @param DOMElement $result
|
||||
* @return void
|
||||
*/
|
||||
public function __construct(DOMElement $result)
|
||||
{
|
||||
$this->_fields = array('Summary', 'RefererUrl', 'FileSize', 'FileFormat', 'Height', 'Width', 'Duration', 'Channels', 'Streaming', 'Thumbnail');
|
||||
|
||||
parent::__construct($result);
|
||||
|
||||
$this->_setThumbnail();
|
||||
}
|
||||
}
|
63
libs/Zend/Service/Yahoo/VideoResultSet.php
Normal file
63
libs/Zend/Service/Yahoo/VideoResultSet.php
Normal file
@ -0,0 +1,63 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Yahoo
|
||||
* @copyright Copyright (c) 2006 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: VideoResultSet.php 8064 2008-02-16 10:58:39Z thomas $
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @see Zend_Service_Yahoo_ResultSet
|
||||
*/
|
||||
require_once 'Zend/Service/Yahoo/ResultSet.php';
|
||||
|
||||
|
||||
/**
|
||||
* @see Zend_Service_Yahoo_VideoResult
|
||||
*/
|
||||
require_once 'Zend/Service/Yahoo/VideoResult.php';
|
||||
|
||||
|
||||
/**
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Yahoo
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Yahoo_VideoResultSet extends Zend_Service_Yahoo_ResultSet
|
||||
{
|
||||
/**
|
||||
* Video result set namespace
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $_namespace = 'urn:yahoo:srchmv';
|
||||
|
||||
|
||||
/**
|
||||
* Overrides Zend_Service_Yahoo_ResultSet::current()
|
||||
*
|
||||
* @return Zend_Service_Yahoo_VideoResult
|
||||
*/
|
||||
public function current()
|
||||
{
|
||||
return new Zend_Service_Yahoo_VideoResult($this->_results->item($this->_currentIndex));
|
||||
}
|
||||
}
|
100
libs/Zend/Service/Yahoo/WebResult.php
Normal file
100
libs/Zend/Service/Yahoo/WebResult.php
Normal file
@ -0,0 +1,100 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Yahoo
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: WebResult.php 8064 2008-02-16 10:58:39Z thomas $
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @see Zend_Service_Yahoo_Result
|
||||
*/
|
||||
require_once 'Zend/Service/Yahoo/Result.php';
|
||||
|
||||
|
||||
/**
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Yahoo
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Yahoo_WebResult extends Zend_Service_Yahoo_Result
|
||||
{
|
||||
/**
|
||||
* A summary of the result
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $Summary;
|
||||
|
||||
/**
|
||||
* The file type of the result (text, html, pdf, etc.)
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $MimeType;
|
||||
|
||||
/**
|
||||
* The modification time of the result (as a unix timestamp)
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $ModificationDate;
|
||||
|
||||
/**
|
||||
* The URL for the Yahoo cache of this page, if it exists
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $CacheUrl;
|
||||
|
||||
/**
|
||||
* The size of the cache entry
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
public $CacheSize;
|
||||
|
||||
/**
|
||||
* Web result namespace
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $_namespace = 'urn:yahoo:srch';
|
||||
|
||||
|
||||
/**
|
||||
* Initializes the web result
|
||||
*
|
||||
* @param DOMElement $result
|
||||
* @return void
|
||||
*/
|
||||
public function __construct(DOMElement $result)
|
||||
{
|
||||
$this->_fields = array('Summary', 'MimeType', 'ModificationDate');
|
||||
parent::__construct($result);
|
||||
|
||||
$this->_xpath = new DOMXPath($result->ownerDocument);
|
||||
$this->_xpath->registerNamespace('yh', $this->_namespace);
|
||||
|
||||
$this->CacheUrl = $this->_xpath->query('./yh:Cache/yh:Url/text()', $result)->item(0)->data;
|
||||
$this->CacheSize = (int) $this->_xpath->query('./yh:Cache/yh:Size/text()', $result)->item(0)->data;
|
||||
}
|
||||
}
|
63
libs/Zend/Service/Yahoo/WebResultSet.php
Normal file
63
libs/Zend/Service/Yahoo/WebResultSet.php
Normal file
@ -0,0 +1,63 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Yahoo
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: WebResultSet.php 8064 2008-02-16 10:58:39Z thomas $
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @see Zend_Service_Yahoo_ResultSet
|
||||
*/
|
||||
require_once 'Zend/Service/Yahoo/ResultSet.php';
|
||||
|
||||
|
||||
/**
|
||||
* @see Zend_Service_Yahoo_WebResult
|
||||
*/
|
||||
require_once 'Zend/Service/Yahoo/WebResult.php';
|
||||
|
||||
|
||||
/**
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Yahoo
|
||||
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Yahoo_WebResultSet extends Zend_Service_Yahoo_ResultSet
|
||||
{
|
||||
/**
|
||||
* Web result set namespace
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $_namespace = 'urn:yahoo:srch';
|
||||
|
||||
|
||||
/**
|
||||
* Overrides Zend_Service_Yahoo_ResultSet::current()
|
||||
*
|
||||
* @return Zend_Service_Yahoo_WebResult
|
||||
*/
|
||||
public function current()
|
||||
{
|
||||
return new Zend_Service_Yahoo_WebResult($this->_results->item($this->_currentIndex));
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user