* * @license http://opensource.org/licenses/bsd-license.php BSD * */ /** * Load required super class */ Solar::loadClass('Solar_Base'); /** * * The entry point for all calls to del.icio.us * * All connection to del.icio.us are made after being authenticated, so the * username and password for the del.icio.us account must be configured via your * Solar.config.php file. * * The API calls are taken directly from the * {@link http://del.icio.us/help/api/ del.icio.us API page} with two * exceptions, update has been moved to posts/update and bundles have been moved * to tags/bundles. Reading their actual API call, you can see that update and * bundle actually are sub-calls within posts and tags respectively. * * Once configured, to instantiate a connect to the Delicious interface: * * $delicious = Solar::factory('Domain51_Service_Delicious'); * * * To determine the time of the most recent post: * * $delicious->posts->update() * * * To retrieve an array of all tags: * * $delicious->tags->get() * * * To retrieve a {@link Domain51_Service_Delicious_Posts_Container} of all posts * with a given tag: * * $delicious->posts->get('tagname'); * * * * This class implements a Strategy pattern for dispatching requests for * multiple types of requests. It delegates the actual API calls to known * classes inside the Domain51/Service/Delicious/ directory. See the * {@link http://www.phppatterns.com/docs/design/strategy_pattern Strategy article on phppatterns.com} * for more information on the pattern. * * * @package Domain51 * * @subpackage Domain51_Service * * @author Travis Swicegood * * @license http://opensource.org/licenses/bsd-license.php BSD * * @todo package level: refactor out concrete class depdencies on * {@link Domain51_Util_Service_Connection} * */ class Domain51_Service_Delicious extends Solar_Base { /** * User-provided configuration values * * Keys are: * `username` * : (string) A del.icio.us username * * `password` * : (string) A del.icio.us password * * @var array * @access protected */ protected $_Domain51_Service_Delicious = array( 'username' => '', 'password' => '' ); private $_connection = null; /** * * Handle instantiation * * @param array $config * */ public function __construct($config = null) { parent::__construct($config); $connection_config = $this->_config; $connection_config['service_url'] = 'https://api.del.icio.us/v1/'; $this->_connection = Solar::factory( 'Domain51_Util_Service_Connection', $connection_config ); } /** * * Serves as the Stragetgy object for determining what type of call this is * and returning the proper class. * * This will return one of the objects from the Domain51_Service_Delicious_* * objects depending on the method. * * @param string $method * * @param array $arguments * * @return object * */ public function _get($method) { $method = strtolower($method); switch ($method) { case 'tags' : case 'posts' : $adapter = ucfirst($method); break; default: throw $this->_exception( 'ERR_UNKNOWN_METHOD', array('method' => $method) ); } $adapterClass = 'Domain51_Service_Delicious_' . $adapter; Solar::loadClass($adapterClass); return new $adapterClass($this->_connection); } } ?>