| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576 |
- <?php
- /**
- * PHP SDK for tietuku.com
- *
- * @author Tears <i@ltteam.cn>, qakcn <qakcnyn@gmail.com>
- */
- /**
- * 贴图库 Token 生成类
- *
- * 生成机制说明请大家参考贴图库开放平台文档:{@link http://open.tietuku.com/doc#safe-token}
- *
- * @package TieTuKu
- * @author Tears, qakcn
- * @version 1.0
- */
- class TieTuKuToken
- {
- /**
- * @ignore
- */
- public $accesskey;
- /**
- * @ignore
- */
- public $secretkey;
- /**
- * @ignore
- */
- private $base64param;
- /**
- * 构造函数
- *
- * @access public
- * @param mixed $accesskey 贴图库平台accesskey
- * @param mixed $secretkey 贴图库平台secretkey
- * @return void
- */
- public function __construct($accesskey, $secretkey)
- {
- if ($accesskey == '' || $secretkey == '') {
- return false;
- }
- $this->accesskey = $accesskey;
- $this->secretkey = $secretkey;
- }
- /**
- * 将参数进行JSON格式化并且进行url安全的base64编码
- *
- * @param array $param 接口所需要的参数
- * @return mixed 返回该类 可进行连续操作
- */
- public function dealParam($param)
- {
- $this->base64param = $this->URLSafeBase64Encode(json_encode($param));
- return $this;
- }
- /**
- * 生成Token方法
- * 需要先调用dealParam方法否则返回false
- *
- * @return string 成功生成的Token 失败返回false
- */
- public function createToken()
- {
- if (empty($this->base64param)) {
- return false;
- }
- $sign = $this->signEncode($this->base64param, $this->secretkey);
- return $this->accesskey . ':' . $this->URLSafeBase64Encode($sign) . ':' . $this->base64param;
- }
- /**
- * Token hash加密方法
- *
- * @param string $str 需要进行hash加密的字符串
- * @param string $key secretkey
- * @return string hash_hmac sha1 加密后的字符串
- */
- public function signEncode($str, $key)
- {
- $hmac_sha1_str = "";
- if (function_exists('hash_hmac')) {
- $hmac_sha1_str = hash_hmac("sha1", $str, $key, true);
- } else {
- $blocksize = 64;
- $hashfunc = 'sha1';
- if (strlen($key) > $blocksize) {
- $key = pack('H*', $hashfunc($key));
- }
- $key = str_pad($key, $blocksize, chr(0x00));
- $ipad = str_repeat(chr(0x36), $blocksize);
- $opad = str_repeat(chr(0x5c), $blocksize);
- $hmac_sha1_str = pack('H*', $hashfunc(($key ^ $opad) . pack('H*', $hashfunc(($key ^ $ipad) . $str))));
- }
- return $hmac_sha1_str;
- }
- /**
- * url安全的base64编码 URLSafeBase64Encode
- *
- * @param string $str 需要进行url安全的base64编码的字符串
- * @return string 返回url安全的base64编码字符串
- */
- public function URLSafeBase64Encode($str)
- {
- $find = array('+', '/');
- $replace = array('-', '_');
- return str_replace($find, $replace, base64_encode($str));
- }
- }
- /**
- * 贴图库 客户端操作类
- *
- *
- * @package TieTuKu
- * @author Tears
- * @version 1.0
- */
- class TTKClient
- {
- /**
- * Set up the API root URL.
- *
- * @ignore
- */
- public $upload_host = "http://up.tietuku.com/";
- public $host = "http://api.tietuku.com/v1/";
- /**
- * Set timeout default.
- *
- * @ignore
- */
- public $timeout = 60;
- /**
- * Set CURL timeout.
- *
- * @ignore
- */
- public $CURLtimeout = 30;
- /**
- * 构造函数
- *
- * @access public
- * @param mixed $accesskey 贴图库平台accesskey
- * @param mixed $secretkey 贴图库平台secretkey
- * @return void
- */
- public function __construct($accesskey, $secretkey)
- {
- $this->op_Token = new \TieTuKuToken($accesskey, $secretkey);
- }
- /**
- * 查询随机30张推荐的图片
- *
- * 对应API:{@link http://open.tietuku.com/doc#list-getrandrec}
- *
- * @access public
- * @param boolean $createToken 是否只返回Token,默认为false。
- * @return string 如果$createToken=true 返回请求接口的json数据否则只返回Token
- */
- public function getRandRec($createToken = false)
- {
- $url = $this->host . "/List/";
- $param['deadline'] = time() + $this->timeout;
- $param['action'] = 'getrandrec';
- $Token = $this->op_Token->dealParam($param)->createToken();
- $data['Token'] = $Token;
- return $createToken ? $Token : $this->post($url, $data);
- }
- /**
- * 根据类型ID查询随机30张推荐的图片
- *
- * 对应API:{@link http://open.tietuku.com/doc#list-getrandrec}
- *
- * @access public
- * @param int $cid 类型ID。
- * @param boolean $createToken 是否只返回Token,默认为false。
- * @return string 如果$createToken=true 返回请求接口的json数据否则只返回Token
- */
- public function getRandRecByCid($cid, $createToken = false)
- {
- $url = $this->host . "/List/";
- $param['deadline'] = time() + $this->timeout;
- $param['action'] = 'getrandrec';
- $param['cid'] = $cid;
- $Token = $this->op_Token->dealParam($param)->createToken();
- $data['Token'] = $Token;
- return $createToken ? $Token : $this->post($url, $data);
- }
- /**
- * 根据 图片ID 查询相应的图片详细信息
- *
- * 对应API:{@link http://open.tietuku.com/doc#pic-getonepic}
- *
- * @access public
- * @param int $id 图片ID。
- * @param boolean $createToken 是否只返回Token,默认为false。
- * @return string 如果$createToken=true 返回请求接口的json数据否则只返回Token
- */
- public function getOnePicById($id, $createToken = false)
- {
- $url = $this->host . "/Pic/";
- $param['deadline'] = time() + $this->timeout;
- $param['action'] = 'getonepic';
- $param['id'] = $id;
- $Token = $this->op_Token->dealParam($param)->createToken();
- $data['Token'] = $Token;
- return $createToken ? $Token : $this->post($url, $data);
- }
- /**
- * 根据 图片find_url 查询相应的图片详细信息
- *
- * 对应API:{@link http://open.tietuku.com/doc#pic-getonepic}
- *
- * @access public
- * @param string $find_url 图片find_url
- * @param boolean $createToken 是否只返回Token,默认为false。
- * @return string 如果$createToken=true 返回请求接口的json数据否则只返回Token
- */
- public function getOnePicByFind_url($find_url, $createToken = false)
- {
- $url = $this->host . "/Pic/";
- $param['deadline'] = time() + $this->timeout;
- $param['action'] = 'getonepic';
- $param['findurl'] = $find_url;
- $Token = $this->op_Token->dealParam($param)->createToken();
- $data['Token'] = $Token;
- return $createToken ? $Token : $this->post($url, $data);
- }
- /**
- * 分页查询全部图片列表 每页30张图片
- *
- * 对应API:{@link http://open.tietuku.com/doc#list-getnewpic}
- *
- * @access public
- * @param int $page_no 页数,默认为1。
- * @param boolean $createToken 是否只返回Token,默认为false。
- * @return string 如果$createToken=true 返回请求接口的json数据否则只返回Token
- */
- public function getNewPic($page_no = 1, $createToken = false)
- {
- $url = $this->host . "/List/";
- $param['deadline'] = time() + $this->timeout;
- $param['action'] = 'getnewpic';
- $param['page_no'] = $page_no;
- $Token = $this->op_Token->dealParam($param)->createToken();
- $data['Token'] = $Token;
- return $createToken ? $Token : $this->post($url, $data);
- }
- /**
- * 通过类型ID分页查询全部图片列表 每页30张图片
- *
- * 对应API:{@link http://open.tietuku.com/doc#list-getnewpic}
- *
- * @access public
- * @param int $cid 类型ID。
- * @param int $page_no 页数,默认为1。
- * @param boolean $createToken 是否只返回Token,默认为false。
- * @return string 如果$createToken=true 返回请求接口的json数据否则只返回Token
- */
- public function getNewPicByCid($cid, $page_no = 1, $createToken = false)
- {
- $url = $this->host . "/List/";
- $param['deadline'] = time() + $this->timeout;
- $param['action'] = 'getnewpic';
- $param['cid'] = $cid;
- $param['page_no'] = $page_no;
- $Token = $this->op_Token->dealParam($param)->createToken();
- $data['Token'] = $Token;
- return $createToken ? $Token : $this->post($url, $data);
- }
- /**
- * 根据用户ID查询用户相册列表
- *
- * 对应API:{@link http://open.tietuku.com/doc#album-get}
- *
- * @access public
- * @param int $uid 用户ID
- * @param boolean $createToken 是否只返回Token,默认为false。
- * @return string 如果$createToken=true 返回请求接口的json数据否则只返回Token
- */
- public function getAlbumByUid($uid = null, $createToken = false)
- {
- $url = $this->host . "/Album/";
- $param['deadline'] = time() + $this->timeout;
- $param['action'] = 'get';
- if (!empty($uid)) {
- $param['uid'] = $uid;
- }
- $Token = $this->op_Token->dealParam($param)->createToken();
- $data['Token'] = $Token;
- return $createToken ? $Token : $this->post($url, $data);
- }
- /**
- * 查询自己收藏的图片列表
- *
- * 对应API:{@link http://open.tietuku.com/doc#collect-getlovepic}
- *
- * @access public
- * @param int $page_no 页数,默认为1。
- * @param boolean $createToken 是否只返回Token,默认为false。
- * @return string 如果$createToken=true 返回请求接口的json数据否则只返回Token
- */
- public function getLovePic($page_no = 1, $createToken = false)
- {
- $url = $this->host . "/Collect/";
- $param['deadline'] = time() + $this->timeout;
- $param['action'] = 'getlovepic';
- $param['page_no'] = $page_no;
- $Token = $this->op_Token->dealParam($param)->createToken();
- $data['Token'] = $Token;
- return $createToken ? $Token : $this->post($url, $data);
- }
- /**
- * 通过图片ID喜欢(收藏)图片
- *
- * 对应API:{@link http://open.tietuku.com/doc#collect-addcollect}
- *
- * @access public
- * @param int $id 图片ID。
- * @param boolean $createToken 是否只返回Token,默认为false。
- * @return string 如果$createToken=true 返回请求接口的json数据否则只返回Token
- */
- public function addCollect($id, $createToken = false)
- {
- $url = $this->host . "/Collect/";
- $param['deadline'] = time() + $this->timeout;
- $param['action'] = 'addcollect';
- $param['id'] = $id;
- $Token = $this->op_Token->dealParam($param)->createToken();
- $data['Token'] = $Token;
- return $createToken ? $Token : $this->post($url, $data);
- }
- /**
- * 通过图片ID取消喜欢(取消收藏)图片
- *
- * 对应API:{@link http://open.tietuku.com/doc#collect-delcollect}
- *
- * @access public
- * @param int $id 图片ID。
- * @param boolean $createToken 是否只返回Token,默认为false。
- * @return string 如果$createToken=true 返回请求接口的json数据否则只返回Token
- */
- public function delCollect($id, $createToken = false)
- {
- $url = $this->host . "/Collect/";
- $param['deadline'] = time() + $this->timeout;
- $param['action'] = 'delcollect';
- $param['id'] = $id;
- $Token = $this->op_Token->dealParam($param)->createToken();
- $data['Token'] = $Token;
- return $createToken ? $Token : $this->post($url, $data);
- }
- /**
- * 通过相册ID分页查询相册中的图片 每页30张图片
- *
- * 对应API:{@link http://open.tietuku.com/doc#list-album}
- *
- * @access public
- * @param int $aid 相册ID。
- * @param int $page_no 页数,默认为1。
- * @param boolean $createToken 是否只返回Token,默认为false。
- * @return string 如果$createToken=true 返回请求接口的json数据否则只返回Token
- */
- public function getAlbumPicByAid($aid, $page_no = 1, $createToken = false)
- {
- $url = $this->host . "/List/";
- $param['deadline'] = time() + $this->timeout;
- $param['action'] = 'album';
- $param['aid'] = $aid;
- $param['page_no'] = $page_no;
- $Token = $this->op_Token->dealParam($param)->createToken();
- $data['Token'] = $Token;
- return $createToken ? $Token : $this->post($url, $data);
- }
- /**
- * 查询所有的分类
- *
- * 对应API:{@link http://open.tietuku.com/doc#catalog-getall}
- *
- * @access public
- * @param boolean $createToken 是否只返回Token,默认为false。
- * @return string 如果$createToken=true 返回请求接口的json数据否则只返回Token
- */
- public function getCatalog($createToken = false)
- {
- $url = $this->host . "/Catalog/";
- $param['deadline'] = time() + $this->timeout;
- $param['action'] = 'getall';
- $Token = $this->op_Token->dealParam($param)->createToken();
- $data['Token'] = $Token;
- return $createToken ? $Token : $this->post($url, $data);
- }
- /**
- * 创建相册
- *
- * 对应API:{@link http://open.tietuku.com/doc#album-create}
- *
- * @access public
- * @param string $albumname 相册名称。
- * @param boolean $createToken 是否只返回Token,默认为false。
- * @return string 如果$createToken=true 返回请求接口的json数据否则只返回Token
- */
- public function createAlbum($albumname, $createToken = false)
- {
- $url = $this->host . "/Album/";
- $param['deadline'] = time() + $this->timeout;
- $param['action'] = 'create';
- $param['albumname'] = $albumname;
- $Token = $this->op_Token->dealParam($param)->createToken();
- $data['Token'] = $Token;
- return $createToken ? $Token : $this->post($url, $data);
- }
- /**
- * 编辑相册
- *
- * 对应API:{@link http://open.tietuku.com/doc#album-editalbum}
- *
- * @access public
- * @param int $aid 相册ID。
- * @param string $albumname 相册名称。
- * @param boolean $createToken 是否只返回Token,默认为false。
- * @return string 如果$createToken=true 返回请求接口的json数据否则只返回Token
- */
- public function editAlbum($aid, $albumname, $createToken = false)
- {
- $url = $this->host . "/Album/";
- $param['deadline'] = time() + $this->timeout;
- $param['action'] = 'editalbum';
- $param['aid'] = $aid;
- $param['albumname'] = $albumname;
- $Token = $this->op_Token->dealParam($param)->createToken();
- $data['Token'] = $Token;
- return $createToken ? $Token : $this->post($url, $data);
- }
- /**
- * 通过相册ID删除相册(只能删除自己的相册 如果只有一个相册,不能删除)
- *
- * 对应API:{@link http://open.tietuku.com/doc#album-delalbum}
- *
- * @access public
- * @param int $aid 相册ID。
- * @param boolean $createToken 是否只返回Token,默认为false。
- * @return string 如果$createToken=true 返回请求接口的json数据否则只返回Token
- */
- public function delAlbum($aid, $createToken = false)
- {
- $url = $this->host . "/Album/";
- $param['deadline'] = time() + $this->timeout;
- $param['action'] = 'delalbum';
- $param['aid'] = $aid;
- $Token = $this->op_Token->dealParam($param)->createToken();
- $data['Token'] = $Token;
- return $createToken ? $Token : $this->post($url, $data);
- }
- /**
- * 通过一组图片ID 查询图片信息
- *
- * 对应API:{@link http://open.tietuku.com/doc#list-getpicbyids}
- *
- * @access public
- * @param mix $ids 图片ID数组。(1.多个ID用逗号隔开 2.传入数组)
- * @param boolean $createToken 是否只返回Token,默认为false。
- * @return string 如果$createToken=true 返回请求接口的json数据否则只返回Token
- */
- public function getPicByIds($ids, $createToken = false)
- {
- $stringid = '';
- if (is_array($ids)) {
- foreach ($ids as $k => $v) {
- $stringid .= $v . ',';
- }
- $stringid = substr($stringid, 0, -1);
- } else {
- $stringid = $ids;
- }
- $url = $this->host . "/List/";
- $param['deadline'] = time() + $this->timeout;
- $param['action'] = 'getpicbyids';
- $param['ids'] = $stringid;
- $Token = $this->op_Token->dealParam($param)->createToken();
- $data['Token'] = $Token;
- return $createToken ? $Token : $this->post($url, $data);
- }
- /**
- * 上传单个文件到贴图库
- *
- * 对应API:{@link http://open.tietuku.com/doc#upload}
- *
- * @access public
- * @param int $aid 相册ID
- * @param array $file 上传的文件。
- * @return string 如果$file!=null 返回请求接口的json数据否则只返回Token
- */
- public function uploadFile($aid, $file = null, $filename = null)
- {
- $url = $this->upload_host;
- $param['deadline'] = time() + $this->timeout;
- $param['aid'] = $aid;
- $Token = $this->op_Token->dealParam($param)->createToken();
- $data['Token'] = $Token;
- $data['file'] = '@' . $file . (empty($filename) ? '' : (';filename=' . $filename));
- return empty($file) ? $Token : $this->post($url, $data);
- }
- /**
- * 上传多个文件到贴图库
- *
- * 对应API:{@link http://open.tietuku.com/doc#upload}
- *
- * @access public
- * @param int $aid 相册ID
- * @param string $filename 文件域名字
- * @return mixed 返回请求接口的json 如果文件域不存在文件则返回NULL
- */
- public function curlUpFile($aid, $filename)
- {
- if (is_array($_FILES[$filename]['tmp_name'])) {
- foreach ($_FILES[$filename]['tmp_name'] as $k => $v) {
- if (!empty($v)) {
- $userfile = $_FILES[$filename]['name'][$k];
- $res[] = json_decode($this->uploadFile($aid, $v, $userfile));
- }
- }
- } else {
- $res = json_decode($this->uploadFile($aid, $_FILES[$filename]['tmp_name'], $_FILES[$filename]['name']));
- }
- return json_encode($res);
- }
- /**
- * 上传网络文件到贴图库 (只支持单个连接)
- *
- * 对应API:{@link http://open.tietuku.com/doc#upload-url}
- *
- * @access public
- * @param int $aid 相册ID
- * @param string $fileurl 网络图片地址
- * @return string 如果$fileurl!=null 返回请求接口的json数据否则只返回Token
- */
- public function uploadFromWeb($aid, $fileurl = null)
- {
- $url = $this->upload_host;
- $param['deadline'] = time() + $this->timeout;
- $param['aid'] = $aid;
- $param['from'] = 'web';
- $Token = $this->op_Token->dealParam($param)->createToken();
- $data['Token'] = $Token;
- $data['fileurl'] = $fileurl;
- return empty($fileurl) ? $Token : $this->post($url, $data);
- }
- /**
- * 对接口post数据
- *
- *
- * @access public
- * @param string $url 接口请求地址。
- * @param array $data 需要post的数据
- * @return string 返回的json数据
- */
- public function post($url, $post_data)
- {
- $ch = curl_init();
- curl_setopt($ch, CURLOPT_URL, $url);
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
- curl_setopt($ch, CURLOPT_TIMEOUT, $this->CURLtimeout);
- curl_setopt($ch, CURLOPT_POST, 1);
- curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
- $output = curl_exec($ch);
- curl_close($ch);
- return $output;
- }
- }
|