• 短链接实现原理和简单调用


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

      经常看到的短链接在微博,微信,短信中可以看到,百度云也有分享生成短链接的方式。对于这样好处我觉得有三点:

    1、微博限制字数为140字一条,那么如果我们需要发一些连接上去,但是这个连接非常的长,以至于将近要占用我们内容的一半篇幅,这肯定是不能被允许的,所以短网址应运而生了。

    2、短网址可以在我们项目里可以很好的对开放级URL进行管理。有一部分网址可以会涵盖性、暴力、广告等信息,这样我们可以通过用户的举报,完全管理这个连接将不出现在我们的应用中,应为同样的URL通过加密算法之后,得到的地址是一样的。

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

      各种第三方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,拿着调用接口。就完事了。

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

      格式什么的,我就不贴了,看那文档吧。看不懂?我整理了个代码,看这个(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;
      }
    
      ?>
    

      这个有两个点,

    一、AK的获取和存储是放到json文件中了,这个可以按照自己项目中实际策略进行整理改造

    二、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

    打赏支持我写出更多好文章,谢谢!
    打赏作者
    +

    (^_^)打个赏喝个咖啡(^_^)

    微信支付
    支付宝支付
  • 相关阅读:
    JS 创建对象的几种方式
    JS跨域笔记
    HTML5随笔
    css3随笔
    CSS3最简洁的轮播图
    canvas createRadialGradient 用法
    git 初级
    Oracle数据库字符集与国家字符集
    连接Oracle 19c出现ORA-28040:没有匹配的验证协议
    Vmware workstation虚拟机导入到esxi虚拟机
  • 原文地址:https://www.cnblogs.com/yangf2016/p/7273663.html
Copyright © 2020-2023  润新知