<?php
define('API_TIMEZONE_OFFSET',8);
if
(function_exists('date_default_timezone_set')) {
@date_default_timezone_set('Etc/GMT'.(API_TIMEZONE_OFFSET > 0 ? '-' : '+').(
abs
(API_TIMEZONE_OFFSET)));
}
else
{
putenv('Etc/GMT'.(API_TIMEZONE_OFFSET > 0 ? '-' : '+').(
abs
(API_TIMEZONE_OFFSET)));
}
error_reporting
(E_ALL);
define('APPKEY','1000000010');
define('APPSECRET','0e4f13954bc537ec');
define('ACCESS_TOKEN','');
define('CONNECT_TIMEOUT', 5);
define('READ_TIMEOUT', 5);
class
open56Client
extends
Exception{
public
$appkey
;
public
$secret
;
public
$domain
=
"http://oapi.56.com"
;
public
$access_token
;
public
$isDebugHttp
= false;
public
function
__construct(
$appkey
,
$secret
){
if
(
empty
(
$appkey
) ||
empty
(
$secret
)){
try
{
throw
new
Exception(
"appkey or secret cannot be empty!"
);
}
catch
(Exception
$e
) {
echo
$e
->getMessage();
}
}
$this
->appkey =
$appkey
;
$this
->secret =
$secret
;
}
public
function
_setToken(
$token
){
if
(!
empty
(
$token
)){
$this
->access_token =
$token
;
}
return
$this
;
}
public
function
uploadUrl(){
$url
=
$this
->domain.
"/video/upload.plugin"
;
$params
=
array
();
return
$url
.'?'.self::signRequest(
$params
);
}
public
function
customUrl(
$sid
,
$css
,
$rurl
,
$ourl
){
$url
=
$this
->domain.
"/video/custom.plugin"
;
$params
=
array
('sid'=>
$sid
,'css'=>
$css
,'rurl'=>
$rurl
,'ourl'=>
$ourl
);
return
$url
.'?'.self::signRequest(
$params
);
}
public
function
getVideoInfoApp(
$flvid
){
$url
=
$this
->domain.'/video/getVideoInfo.json';
$params
=
array
('vid'=>
$flvid
);
return
self::getHttp(
$url
,
$params
);
}
public
function
updateApp(
$flvid
,
$title
,
$desc
,
$tag
){
$url
=
$this
->domain.'/video/update.json';
$params
=
array
('vid'=>
$flvid
,'title'=>
$title
,'desc'=>
$desc
,'tag'=>
$tag
);
return
self::getHttp(
$url
,
$params
);
}
public
function
searchVideo(
$data
){
$url
=
$this
->domain.'/video/search.json';
$params
=
array
();
$params
=
array_merge
(
$params
,
$data
);
return
self::getHttp(
$url
,
$params
);
}
public
function
userInfo(
$userid
){
$url
=
$this
->domain.'/user/userProfile.json';
$params
=
array
('userid'=>
$userid
,'access_token'=>
$token
);
return
self::getHttp(
$url
,
$params
);
}
public
function
userVideos(
$userid
){
$url
=
$this
->domain.'/user/userVideos.json';
$params
=
array
('userid'=>
$userid
,'access_token'=>
$token
,'s'=>'time','page'=>1,'rows'=>10);
return
self::getHttp(
$url
,
$params
);
}
public
function
userComments(
$tid
= 'onesec',
$type
= 'user',
$pct
= 1){
$url
=
$this
->domain.'/user/userComments.json';
$params
=
array
('tid'=>
$tid
,'access_token'=>
$token
,'type'=>
$type
,'page'=>1,'rows'=>10, 'pct'=>
$pct
);
return
self::getHttp(
$url
,
$params
);
}
public
function
channelVideo(
$cid
= '68',
$page
= '1',
$num
= '20'){
$url
=
$this
->domain.'/video/channel.json';
$params
=
array
('cid'=>
$cid
, 'page'=>
$page
, 'num'=>
$num
);
return
self::getHttp(
$url
,
$params
);
}
public
function
recommendVideo(
$mid
= '16',
$page
= '1',
$num
= '10'){
$url
=
$this
->domain.'/video/recommend.json';
$params
=
array
('mid'=>
$mid
, 'page'=>
$page
, 'num'=>
$num
);
return
self::getHttp(
$url
,
$params
);
}
public
function
hotVideo(
$cid
= '2',
$page
= '1',
$num
= '10'){
$url
=
$this
->domain.'/video/hot.json';
$params
=
array
('cid'=>
$cid
, 'page'=>
$page
, 'num'=>
$num
);
return
self::getHttp(
$url
,
$params
);
}
public
function
albumVideo(
$day
){
$url
=
$this
->domain.'/video/recAlbum.json';
$params
=
array
('day'=>
$day
);
return
self::getHttp(
$url
,
$params
);
}
public
function
getHttp(
$url
,
$params
=
array
()){
$url
=
$url
.'?'.self::signRequest(
$params
);
return
self::httpCall(
$url
);
}
public
function
postHttp(
$url
,
$params
){
return
self::httpCall(
$url
,self::signRequest(
$params
),'post');
}
public
function
httpCall(
$url
,
$params
= '',
$method
= 'get',
$connectTimeout
= CONNECT_TIMEOUT,
$readTimeout
= READ_TIMEOUT) {
$result
=
""
;
if
(function_exists('curl_init')) {
$timeout
=
$connectTimeout
+
$readTimeout
;
$ch
= curl_init();
curl_setopt(
$ch
, CURLOPT_URL,
$url
);
if
(
strtolower
(
$method
)==='post'){
curl_setopt(
$ch
, CURLOPT_POST, 1);
curl_setopt(
$ch
, CURLOPT_POSTFIELDS,
$params
);
}
curl_setopt(
$ch
, CURLOPT_CONNECTTIMEOUT,
$connectTimeout
);
curl_setopt(
$ch
, CURLOPT_TIMEOUT,
$timeout
);
curl_setopt(
$ch
, CURLOPT_RETURNTRANSFER, 1);
curl_setopt(
$ch
, CURLOPT_USERAGENT, '56.com API PHP5 Client 1.1 (curl) ' . phpversion());
$result
= curl_exec(
$ch
);
}
else
{
if
(isset(
$params
)
and
$params
){
$url
=
$url
.
"?"
.http_build_query(
$params
);
}
$ctx
= stream_context_create(
array
(
'http' =>
array
(
'timeout' => 5
)
)
);
$result
=
file_get_contents
(
$url
, 0,
$ctx
);
}
return
$result
;
}
public
function
signRequest(
$params
){
if
(
$this
->access_token){
$params
['access_token'] =
$this
->access_token;
}
$keys
= self::urlencodeRfc3986(
array_keys
(
$params
));
$values
= self::urlencodeRfc3986(
array_values
(
$params
));
if
(
$keys
and
$values
){
$params
=
array_combine
(
$keys
,
$values
);
}
else
{
throw
new
Exception(
"signRequest need params exits!"
);
}
unset(
$params
['appkey']);
unset(
$params
['ts']);
ksort(
$params
);
$req
= md5(http_build_query(
$params
));
$ts
= time();
$params
['sign'] = md5(
$req
.'#'.
$this
->appkey.'#'.
$this
->secret.'#'.
$ts
);
$params
['appkey'] =
$this
->appkey;
$params
['ts']=
$ts
;
return
http_build_query(
$params
);
}
public
static
function
urlencodeRfc3986(
$input
){
if
(
is_array
(
$input
)){
return
array_map
(
array
('open56Client', 'urlencodeRfc3986') ,
$input
);
}
else
if
(
is_scalar
(
$input
)){
return
str_replace
( '+' , ' ' ,
str_replace
( '%7E' , '~' , rawurlencode(
$input
)));
}
else
{
return
'';
}
}
}