使用Python生成url短链接的方法

作者:goldensun 时间:2021-05-05 02:55:12 

几乎所有的微薄都提供了缩短网址的服务,其原理就是将一个url地址按照一定的算法生成一段字符串,然后加在一个短域名后面边成了一个新的url地址,数据库中会存放这个短地址和原始的地址,当用户点击这个新的短地址后,短地址服务会根据短域名后面的几个字符串从数据库中读出原来的地址然后页面进行跳转 。

比如新浪微薄中的url 是 http://t.cn/xxxxxxx  t.cn是其域名 ,其后面跟着的是7位算出来的字符串。
方法一:使用哈希库自定义算法

因为文本中显示太长的url会比较乱,或者采用省略显示的方式,或者采用短url的方式.

为了同时方便统计点击数以及进行内容过滤.实现了一个生成短url值的方法.

为了防止你的hash值被破解,可以在生成md5值的时候加入你自己的salt.

这样即便直到你的code_map也不能破解到原始url了.

为了让结果更加随机,把每次循环没有使用的第二个bit保存到e里面.这样可以让结果冲突率更小.


#引入哈希库
import hashlib

def get_md5(s):
 s = s.encode('utf8') if isinstance(s, unicode) else s
 m = hashlib.md5()
 m.update(s)
 return m.hexdigest()

code_map = (
     'a' , 'b' , 'c' , 'd' , 'e' , 'f' , 'g' , 'h' ,
     'i' , 'j' , 'k' , 'l' , 'm' , 'n' , 'o' , 'p' ,
     'q' , 'r' , 's' , 't' , 'u' , 'v' , 'w' , 'x' ,
     'y' , 'z' , '0' , '1' , '2' , '3' , '4' , '5' ,
     '6' , '7' , '8' , '9' , 'A' , 'B' , 'C' , 'D' ,
     'E' , 'F' , 'G' , 'H' , 'I' , 'J' , 'K' , 'L' ,
     'M' , 'N' , 'O' , 'P' , 'Q' , 'R' , 'S' , 'T' ,
     'U' , 'V' , 'W' , 'X' , 'Y' , 'Z'
     )

def get_hash_key(long_url):
 hkeys = []
 hex = get_md5(long_url)
 for i in xrange(0, 4):
   n = int(hex[i*8:(i+1)*8], 16)
   v = []
   e = 0
   for j in xrange(0, 5):
     x = 0x0000003D & n
     e |= ((0x00000002 & n ) >> 1) << j
     v.insert(0, code_map[x])
     n = n >> 6
   e |= n << 5
   v.insert(0, code_map[e & 0x0000003D])
   hkeys.append(''.join(v))
 return hkeys

if __name__ == '__main__':
 print get_hash_key('http://www.pythontab.com')

方法二:使用libsurl库

libsurl 是一个用来生成短URL的C和Python库,支持 bit.ly 和 tinyurl 等短url 服务网站。

标签:Python
0
投稿

猜你喜欢

  • 基于Python实现微博抓取GUI程序

    2021-06-01 10:59:29
  • js将table的每个td的内容自动赋值给其title属性的方法

    2023-08-07 18:34:54
  • ASP.NET连接 Access数据库的几种方法

    2024-01-25 15:31:09
  • CentOS下安装Jenkins的完整步骤

    2022-12-13 16:43:34
  • pygame外星人入侵小游戏超详细开发流程

    2021-06-15 05:15:47
  • 利用Python进行数据可视化常见的9种方法!超实用!

    2021-10-05 23:11:58
  • python实现一次创建多级目录的方法

    2021-10-20 11:37:31
  • python和pywin32实现窗口查找、遍历和点击的示例代码

    2023-04-06 19:01:23
  • python线程信号量semaphore使用解析

    2023-02-08 08:47:24
  • vue监听页面中的某个div的滚动事件并判断滚动的位置

    2024-05-09 15:08:49
  • Python安装并操作redis实现流程详解

    2023-06-15 00:17:22
  • Vscode ChatGPT插件使用(无需代理注册)

    2023-05-13 18:25:01
  • Mysql join连接查询的语法与示例

    2024-01-15 07:34:48
  • Sql Server datetime问题

    2024-01-27 03:06:25
  • python基于turtle绘制几何图形

    2023-06-22 22:44:43
  • SQL Server并行操作优化避免并行操作被抑制而影响SQL的执行效率

    2024-01-23 10:55:50
  • Linux下修改MySQL数据库数据文件路径的步骤

    2024-01-19 13:53:41
  • python实现一个围棋小游戏

    2022-02-02 18:52:50
  • asp如何创建目录?

    2009-11-14 20:51:00
  • Python unittest单元测试框架及断言方法

    2023-10-29 12:07:48
  • asp之家 网络编程 m.aspxhome.com