delicious.php

来自「Bug tracker, and reporter.」· PHP 代码 · 共 616 行 · 第 1/2 页

PHP
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 8064 2008-02-16 10:58:39Z thomas $ *//** * @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     *

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?