短连接实现原理和简单调用

  最近在作短信业务的时候,有个内容里含有url连接,咱们拼装好后以为url巨长,想起不少商家都是用短连接的方式,我就找了找原理及简单的应用,下面会先讲一下简单调用第三方接口的实现思路和简要代码,而后再讲一下真实的里面的原理和一些简单的实现思路。php

 

  常常看到的短连接在微博,微信,短信中能够看到,百度云也有分享生成短连接的方式。对于这样好处我以为有三点:html

一、微博限制字数为140字一条,那么若是咱们须要发一些链接上去,可是这个链接很是的长,以致于将近要占用咱们内容的一半篇幅,这确定是不能被容许的,因此短网址应运而生了。算法

二、短网址能够在咱们项目里能够很好的对开放级URL进行管理。有一部分网址能够会涵盖性、暴力、广告等信息,这样咱们能够经过用户的举报,彻底管理这个链接将不出如今咱们的应用中,应为一样的URL经过加密算法以后,获得的地址是同样的。json

三、咱们能够对一系列的网址进行流量,点击等统计,挖掘出大多数用户的关注点,这样有利于咱们对项目的后续工做更好的做出决策。api

 

  各类第三方API提供商也是不只仅提供了短连接的转化,固然谷歌大佬仍是作的最专业的,他家的是带有分析,点击统计的。缓存

 

  谷歌大佬的简单测试的地址:https://goo.gl/#    将连接放进去就能够生成一个短连接了,下面还有分析。大佬就是叼。想要调用这个API的话,文档在这里:https://developers.google.com/url-shortener/v1/getting_started  作过谷歌API的,用这个比较方便,能够省去研究谷歌API的受权的问题。若是没作过还有下面的微信,微博,我想大多人应该都作过吧。服务器

 

  微博的估计作的少,相信大多数人仍是微信用的多,appID,appSecret都用的比较六了。我用的也是微信的,就用微信作介绍,微博的话,调用其实也是受权的问题,只要有方便的受权,调用都很简单。下面讲微信的。微信

 

  喏,这个是openwechat平台的接口文档,http://open.wechat.com/cgi-bin/newreadtemplate?t=overseas_open/docs/oa/promoting/url-shortener    哈,这个是英文滴,不要一打开就头大哦,两句话总结,就两步,获取accesstoken,拿着调用接口。就完事了。app

  接口地址:HTTP request method: POST
https://api.wechat.com/cgi-bin/shorturl?access_token=ACCESS_TOKENcurl

  格式什么的,我就不贴了,看那文档吧。看不懂?我整理了个代码,看这个(PHP):

<?php
/**
 * Created by PhpStorm.
 * User: Yisen-YF
 * Date: 17/8/2
 * Time: 上午11:23
 * File: wechat_shorturl.php
 * 
 */
header("Content-Type: text/html; charset=utf-8");
$longurl='http://www.cnblogs.com/yangf2016';
//if(isset($_POST['longurl'])){
//    $longurl = $_POST['longurl'];
//}else{
//    die("没有post值进来");
//}

//echo $longurl;

$id = "你的AppID";//appid
$secret = "你的AppSecret";//secret
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$id."&secret=".$secret."";

$token = getAccessToken($url);
//echo $token;die;
//$token = 'Iuy4tZ4YXdIp03AGwfpC1FL2f6vYUQ83uirWXighPXLLO0D2o44aLFQP_laHm42JWW-TeE1BiSn5wNTRnAVPEm9BZgkjJXhfVx6xB5T4zr8Il2F2vUgTWSQS6JwaTGIPDHIjADAPTU';
//你的长连接
//$longurl = "http://www.baidu.com/";
$data = '{"action":"long2short","long_url":"'.$longurl.'"}';
$shorturl = "https://api.weixin.qq.com/cgi-bin/shorturl?access_token=".$token."";

echo httpPost($shorturl,$data);
//echo "你的长连接是:".$longurl;
//echo "<br />";
////生成的短连接
//echo "生成的短连接是:".$shortArr['short_url'];
//echo $shortArr;

function getAccessToken($url) {
    // access_token 应该全局存储与更新,如下代码以写入到文件中作示例
    $data = json_decode(file_get_contents("access_token.json"));
    if ($data->expire_time < time()) {
//        echo 1;die;
        // 若是是企业号用如下URL获取access_token
        $output = httpGet($url);
        $res = (array)json_decode($output);
        $access_token = $res['access_token'];
        if ($access_token) {
            $data->expire_time = time() + 7000;
            $data->access_token = $access_token;
            $fp = fopen("access_token.json", "w");
            fwrite($fp, json_encode($data));
            fclose($fp);
            //echo 'access_token.json读写了一次';
        }
    } else {
//        echo 2;die;
        $access_token = $data->access_token;
    }
    return $access_token;
}

  function httpGet($url) {
      //echo "url = ".$url;
      $curl = curl_init();
      curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
      curl_setopt($curl, CURLOPT_TIMEOUT, 500);
      curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
      curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
      curl_setopt($curl, CURLOPT_URL, $url);

      $res = curl_exec($curl);
      curl_close($curl);
      return $res;
  }

  function httpPost($url,$data){
      $curl = curl_init();
      curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
      curl_setopt($curl, CURLOPT_TIMEOUT, 500);
      curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
      curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
      curl_setopt($curl, CURLOPT_URL, $url);
      curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");
      curl_setopt($curl, CURLOPT_POSTFIELDS, $data);

      $res = curl_exec($curl);
      curl_close($curl);
      return $res;
  }

  ?>

  这个有两个点,

1、AK的获取和存储是放到json文件中了,这个能够按照本身项目中实际策略进行整理改造

2、post请求接口是本身写了个方法,这个也能够按照本身项目整理替换;

 

顺便说一下微信受权常见的问题,受权token过时和本身服务器缓存的策略,还有全局使用统一token的策略。

具体的就不说了,作过的确定都知道,顺带找个博客给你们看,http://www.hutuseng.com/article/weixin-api-invalid-credential

 

Other:另外的接口地址实例:https://easywechat.org/zh-cn/docs/short-url.html

 

========================以上是应用级别,能够解决任务,如下是具体的原理和众多博客大佬们的实现================

 

1,10进制自增ID,转16进制,转62进制的方式:http://blog.csdn.net/beiyeqingteng/article/details/7706010

2,md5简便算法:http://www.chongchonggou.com/g_44404501.html

相关文章
相关标签/搜索