|
- <?php
, O* ?' p- i7 ~0 s- h' v - //Sina App_Key
l9 m2 q' i( k( e- W7 H - define('SINA_APPKEY', '1335371408');
) A. j; _5 l$ B& ] V6 d
9 V2 b/ C$ s! H' G! ^) J/ C- function curlQuery($url) {
2 ^' c2 z; a, |. P( ^( `9 u - //设置附加HTTP头
8 H4 C2 h; z% Y/ ]" n. i: v6 T - $addHead = array(
/ r$ a" ~. F! `4 v - "Content-type: application/json"
3 x3 v9 H; G. T" _# K - );+ F7 S" }/ n0 [5 B0 N) U
- 3 x, C+ B0 U0 H, e J8 Z) X R$ r4 _ J
- //初始化curl,当然,你也可以用fsockopen代替
2 H! w m9 o' B# c: s$ W# F - $curl_obj = curl_init();$ O" a/ _+ B9 b7 u! C/ a& M' r
. Z; M* G% A O3 U2 X- //设置网址
$ `' \* i: m, g - curl_setopt($curl_obj, CURLOPT_URL, $url);; m& S7 y3 E8 c0 s: I4 B
- 9 S- W' c f- l7 H! \
- //附加Head内容0 ^, ~1 A; ?0 J2 O2 I) F- e T/ h
- curl_setopt($curl_obj, CURLOPT_HTTPHEADER, $addHead);
q! |! }! ^: Q5 d) E- i& l$ _3 ^
( A6 T! M: P. l. [- //是否输出返回头信息$ H: B$ F( y+ ?' c
- curl_setopt($curl_obj, CURLOPT_HEADER, 0);* E- E! G! c+ W6 A8 \) D
- 1 o4 ~' Z. B' s* @& D5 S
- //将curl_exec的结果返回
2 O2 h* i3 P, z1 @" `6 O# e) @ - curl_setopt($curl_obj, CURLOPT_RETURNTRANSFER, 1);" Z) F+ B/ n- ]3 i8 V: p
- 7 f( E( y, I" G" H$ H1 S# u
- //设置超时时间; L: \, q4 j8 C" o. I; h
- curl_setopt($curl_obj, CURLOPT_TIMEOUT, 15);4 d) d+ Y ]; v% n9 H
! R V% l: t% |- //执行$ y/ z1 }5 R; S
- $result = curl_exec($curl_obj);
5 L1 S" e1 g* z5 |- G - 1 |4 y; u9 ~0 m M3 S$ P
- //关闭curl回话
( T$ S" K3 M( b! o# p0 ~2 O - curl_close($curl_obj);
, e0 Q3 Q# ]: h1 j
/ ^# E6 `) B4 R: Z( o/ \- return $result;
/ L6 U) a4 t; g2 |, k" | - }
: [. n) y4 X' U
- h0 ~# F" e6 k8 T- //简单处理下url,sina对于没有协议(http://)开头的和不规范的地址会返回错误$ b& t- z3 ^1 m% r& w1 s1 y
- function filterUrl($url = '') {
. \4 L0 ?3 D8 J2 a* u - $url = trim(strtolower($url));1 e! B* X. B. J" n! u; O
- $url = trim(preg_replace('/^http:\/\//', '', $url));3 d0 r3 f9 T8 B D
- if ($url == '')
+ t, e l; E$ p8 { - return false;
6 q, I( C9 W; b1 i" v - else# M: `; j7 `' b8 m9 d7 f7 x# O
- return urlencode('http://' . $url); k; {+ O) Z+ C4 q2 |2 T
- }7 P7 ?( g* m @9 `8 H) E3 Q( `; C4 \
S2 \' K6 `4 W" i3 F6 Z2 r- //根据长网址获取短网址9 F+ Z K+ X5 B7 `6 T" R
- function sinaShortenUrl($long_url) {8 R8 F$ ?, j! W
- //拼接请求地址,此地址你可以在官方的文档中查看到
+ D3 q: |6 ^2 E Q- l - $url = 'http://api.t.sina.com.cn/short_url/shorten.json?source=' . SINA_APPKEY . '&url_long=' . $long_url;
7 K% d2 p$ \0 E
' `, S5 M4 s) r2 _; @+ ?- //获取请求结果
. Q; l* @3 ^4 h7 X C - $result = curlQuery($url);
: W& r% c$ c: e, K, R+ f" l' ~/ W
' o1 y9 X& ~) k+ P9 n- //下面这行注释用于调试,你可以把注释去掉看看从sina返回的信息是什么东西
: A6 T+ ], k! q$ M) k5 N | - //print_r($result);exit();
. i* i) _! D1 [ - 8 o# B/ h! w. v/ P
- //解析json/ W+ T5 E3 Z, ?) ~9 F
- $json = json_decode($result);) l1 [+ W+ |- N! w% W D1 J
. K" x0 O& L! c- //异常情况返回false: D6 |: f' S/ H. h+ a \
- if (isset($json->error) || !isset($json[0]->url_short) || $json[0]->url_short == '')* T$ R/ |3 v* n# r2 [
- return false;
/ F V f6 n+ U1 d - else
. a$ v* O) u6 q8 F - return $json[0]->url_short;
# I4 T Q9 g: ]- J2 ^* v e4 S6 l2 B - }
% v6 A5 u8 A* @ _
0 N5 n+ [( I2 @/ q2 X* u3 ^) p- //根据短网址获取长网址,此函数重用了不少sinaShortenUrl中的代码,以方便你阅读对比,你可以自行合并两个函数
/ M! f }. q- ~8 ^2 _7 \4 A - function sinaExpandUrl($short_url) {4 j2 S% h* }, t4 Y- U7 G
- //拼接请求地址,此地址你可以在官方的文档中查看到
) `+ K& @+ @2 w6 S9 k+ F7 K# U - $url = 'http://api.t.sina.com.cn/short_url/expand.json?source=' . SINA_APPKEY . '&url_short=' . $short_url;
# \0 D' W N1 Z& C" M3 d- H) _ - 4 F# E& ~, E3 x0 Z1 p8 G2 c
- //获取请求结果1 E, D3 d5 U7 B; |2 O7 p- y
- $result = curlQuery($url);
5 d7 d2 i2 A7 G9 N+ a/ | - A# q& t+ u/ S
- //下面这行注释用于调试,你可以把注释去掉看看从sina返回的信息是什么东西
( f2 E2 |7 ]# }7 W - //print_r($result);exit();
" @. x4 O1 I7 j5 w! S
0 P" ~$ l+ ?5 y0 ~- //解析json
8 e) K0 H1 f" @! ~8 T - $json = json_decode($result);
7 Z% a2 _1 ^- y2 F) E - ! Y7 t$ \9 e c8 e E
- //异常情况返回false
# w) Y9 I; @& c! v - if (isset($json->error) || !isset($json[0]->url_long) || $json[0]->url_long == '')
! c, m% L5 B9 `/ c- \ c - return false;" A' W3 W6 }" J( \# H C1 w$ x3 j
- else- s* Q& u, j9 d4 Q/ w- U
- return $json[0]->url_long;* i' M/ i$ [! a& m6 ?$ D
- }
( {4 H* f/ k# |. R
0 f) [0 v% _0 K2 X; y/ P+ x- //要缩短的网址2 B& u* O4 V* L* t+ A: F" @, p
- $url = $_GET['url'];( Y& Z4 H7 T9 X! s3 \
- $url = filterUrl($url);/ B, k' w! q- Q6 q: ~( m; o. m
- $short = sinaShortenUrl($url);& O" S& B, g9 l
- $ulong = sinaExpandUrl($short);* n3 j0 e( B: J0 z# |( m" m; e
- $result=array("ulong"=>$ulong,"short"=>$short); w* u# e' E: k5 W( K" H/ a S6 C5 @
- echo json_encode($result);% R: ^9 N) M' s* B, @1 x
- ?>
复制代码 |
|