登录  | 立即注册

游客您好!登录后享受更多精彩

查看: 818|回复: 0

[PHP教程] 【PHP教程】新浪短网址api

[复制链接]

444

主题

509

帖子

2051

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2051

荣誉管理论坛元老

发表于 2021-6-20 22:00:29 来自手机 | 显示全部楼层 |阅读模式 来自:
  1. <?php
    , O* ?' p- i7 ~0 s- h' v
  2. //Sina App_Key
      l9 m2 q' i( k( e- W7 H
  3. define('SINA_APPKEY', '1335371408');
    ) A. j; _5 l$ B& ]  V6 d

  4. 9 V2 b/ C$ s! H' G! ^) J/ C
  5. function curlQuery($url) {
    2 ^' c2 z; a, |. P( ^( `9 u
  6.     //设置附加HTTP头
    8 H4 C2 h; z% Y/ ]" n. i: v6 T
  7.     $addHead = array(
    / r$ a" ~. F! `4 v
  8.         "Content-type: application/json"
    3 x3 v9 H; G. T" _# K
  9.     );+ F7 S" }/ n0 [5 B0 N) U
  10. 3 x, C+ B0 U0 H, e  J8 Z) X  R$ r4 _  J
  11.     //初始化curl,当然,你也可以用fsockopen代替
    2 H! w  m9 o' B# c: s$ W# F
  12.     $curl_obj = curl_init();$ O" a/ _+ B9 b7 u! C/ a& M' r

  13. . Z; M* G% A  O3 U2 X
  14.     //设置网址
    $ `' \* i: m, g
  15.     curl_setopt($curl_obj, CURLOPT_URL, $url);; m& S7 y3 E8 c0 s: I4 B
  16. 9 S- W' c  f- l7 H! \
  17.     //附加Head内容0 ^, ~1 A; ?0 J2 O2 I) F- e  T/ h
  18.     curl_setopt($curl_obj, CURLOPT_HTTPHEADER, $addHead);
      q! |! }! ^: Q5 d) E- i& l$ _3 ^

  19. ( A6 T! M: P. l. [
  20.     //是否输出返回头信息$ H: B$ F( y+ ?' c
  21.     curl_setopt($curl_obj, CURLOPT_HEADER, 0);* E- E! G! c+ W6 A8 \) D
  22. 1 o4 ~' Z. B' s* @& D5 S
  23.     //将curl_exec的结果返回
    2 O2 h* i3 P, z1 @" `6 O# e) @
  24.     curl_setopt($curl_obj, CURLOPT_RETURNTRANSFER, 1);" Z) F+ B/ n- ]3 i8 V: p
  25. 7 f( E( y, I" G" H$ H1 S# u
  26.     //设置超时时间; L: \, q4 j8 C" o. I; h
  27.     curl_setopt($curl_obj, CURLOPT_TIMEOUT, 15);4 d) d+ Y  ]; v% n9 H

  28. ! R  V% l: t% |
  29.     //执行$ y/ z1 }5 R; S
  30.     $result = curl_exec($curl_obj);
    5 L1 S" e1 g* z5 |- G
  31. 1 |4 y; u9 ~0 m  M3 S$ P
  32.     //关闭curl回话
    ( T$ S" K3 M( b! o# p0 ~2 O
  33.     curl_close($curl_obj);
    , e0 Q3 Q# ]: h1 j

  34. / ^# E6 `) B4 R: Z( o/ \
  35.     return $result;
    / L6 U) a4 t; g2 |, k" |
  36. }
    : [. n) y4 X' U

  37. - h0 ~# F" e6 k8 T
  38. //简单处理下url,sina对于没有协议(http://)开头的和不规范的地址会返回错误$ b& t- z3 ^1 m% r& w1 s1 y
  39. function filterUrl($url = '') {
    . \4 L0 ?3 D8 J2 a* u
  40.     $url = trim(strtolower($url));1 e! B* X. B. J" n! u; O
  41.     $url = trim(preg_replace('/^http:\/\//', '', $url));3 d0 r3 f9 T8 B  D
  42.     if ($url == '')
    + t, e  l; E$ p8 {
  43.         return false;
    6 q, I( C9 W; b1 i" v
  44.     else# M: `; j7 `' b8 m9 d7 f7 x# O
  45.         return urlencode('http://' . $url);  k; {+ O) Z+ C4 q2 |2 T
  46. }7 P7 ?( g* m  @9 `8 H) E3 Q( `; C4 \

  47.   S2 \' K6 `4 W" i3 F6 Z2 r
  48. //根据长网址获取短网址9 F+ Z  K+ X5 B7 `6 T" R
  49. function sinaShortenUrl($long_url) {8 R8 F$ ?, j! W
  50.     //拼接请求地址,此地址你可以在官方的文档中查看到
    + D3 q: |6 ^2 E  Q- l
  51.     $url = 'http://api.t.sina.com.cn/short_url/shorten.json?source=' . SINA_APPKEY . '&url_long=' . $long_url;
    7 K% d2 p$ \0 E

  52. ' `, S5 M4 s) r2 _; @+ ?
  53.     //获取请求结果
    . Q; l* @3 ^4 h7 X  C
  54.     $result = curlQuery($url);
    : W& r% c$ c: e, K, R+ f" l' ~/ W

  55. ' o1 y9 X& ~) k+ P9 n
  56.     //下面这行注释用于调试,你可以把注释去掉看看从sina返回的信息是什么东西
    : A6 T+ ], k! q$ M) k5 N  |
  57.     //print_r($result);exit();
    . i* i) _! D1 [
  58. 8 o# B/ h! w. v/ P
  59.     //解析json/ W+ T5 E3 Z, ?) ~9 F
  60.     $json = json_decode($result);) l1 [+ W+ |- N! w% W  D1 J

  61. . K" x0 O& L! c
  62.     //异常情况返回false: D6 |: f' S/ H. h+ a  \
  63.     if (isset($json->error) || !isset($json[0]->url_short) || $json[0]->url_short == '')* T$ R/ |3 v* n# r2 [
  64.         return false;
    / F  V  f6 n+ U1 d
  65.     else
    . a$ v* O) u6 q8 F
  66.         return $json[0]->url_short;
    # I4 T  Q9 g: ]- J2 ^* v  e4 S6 l2 B
  67. }
    % v6 A5 u8 A* @  _

  68. 0 N5 n+ [( I2 @/ q2 X* u3 ^) p
  69. //根据短网址获取长网址,此函数重用了不少sinaShortenUrl中的代码,以方便你阅读对比,你可以自行合并两个函数
    / M! f  }. q- ~8 ^2 _7 \4 A
  70. function sinaExpandUrl($short_url) {4 j2 S% h* }, t4 Y- U7 G
  71.     //拼接请求地址,此地址你可以在官方的文档中查看到
    ) `+ K& @+ @2 w6 S9 k+ F7 K# U
  72.     $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) _
  73. 4 F# E& ~, E3 x0 Z1 p8 G2 c
  74.     //获取请求结果1 E, D3 d5 U7 B; |2 O7 p- y
  75.     $result = curlQuery($url);
    5 d7 d2 i2 A7 G9 N+ a/ |
  76.   A# q& t+ u/ S
  77.     //下面这行注释用于调试,你可以把注释去掉看看从sina返回的信息是什么东西
    ( f2 E2 |7 ]# }7 W
  78.     //print_r($result);exit();
    " @. x4 O1 I7 j5 w! S

  79. 0 P" ~$ l+ ?5 y0 ~
  80.     //解析json
    8 e) K0 H1 f" @! ~8 T
  81.     $json = json_decode($result);
    7 Z% a2 _1 ^- y2 F) E
  82. ! Y7 t$ \9 e  c8 e  E
  83.     //异常情况返回false
    # w) Y9 I; @& c! v
  84.     if (isset($json->error) || !isset($json[0]->url_long) || $json[0]->url_long == '')
    ! c, m% L5 B9 `/ c- \  c
  85.         return false;" A' W3 W6 }" J( \# H  C1 w$ x3 j
  86.     else- s* Q& u, j9 d4 Q/ w- U
  87.         return $json[0]->url_long;* i' M/ i$ [! a& m6 ?$ D
  88. }
    ( {4 H* f/ k# |. R

  89. 0 f) [0 v% _0 K2 X; y/ P+ x
  90. //要缩短的网址2 B& u* O4 V* L* t+ A: F" @, p
  91. $url = $_GET['url'];( Y& Z4 H7 T9 X! s3 \
  92. $url = filterUrl($url);/ B, k' w! q- Q6 q: ~( m; o. m
  93. $short = sinaShortenUrl($url);& O" S& B, g9 l
  94. $ulong = sinaExpandUrl($short);* n3 j0 e( B: J0 z# |( m" m; e
  95. $result=array("ulong"=>$ulong,"short"=>$short);  w* u# e' E: k5 W( K" H/ a  S6 C5 @
  96. echo json_encode($result);% R: ^9 N) M' s* B, @1 x
  97. ?>
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|星空社区 |网站地图

GMT+8, 2024-5-4 07:20 , Processed in 0.075204 second(s), 23 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表