文档章节

微薄短地址的实现-python

java-苦苦甜甜
 java-苦苦甜甜
发布于 2012/11/22 17:38
字数 481
阅读 208
收藏 2
几乎所有的微薄都提供了缩短网址的服务,其原理就是将一个url地址按照一定的算法生成一段字符串,然后加在一个短域名后面边成了一个新的url地址,数 据库中会存放这个短地址和原始的地址,当用户点击这个新的短地址后,短地址服务会根据短域名后面的几个字符串从数据库中读出原来的地址然后页面进行跳转 。
比如新浪微薄中的url 是 http://t.cn/xxxxxxx  t.cn是其域名 ,其后面跟着的是7位算出来的字符串
http://www.guokr.com/question/297490/ 这个url 经过短地址算法后就成了 http://t.cn/zWCRWpM 

现将自己的算法提供出来 使用python语言实现

#!/usr/bin/env python
#coding=utf-8
import hashlib


chars = (
"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 shorten(origin):
key = "fuck-gfw.ooxx.shorten"
#对传入网址进行MD5加密
hex = hashlib.md5(key + origin).hexdigest()
res = [0 for i in range(4)]
for i in range(4):
#把加密字符按照8位一组16进制与0x3FFFFFFF进行位与运算
hexint = 0x3FFFFFFF & int("0x" + hex[i * 8: i*8+8], 16)
outChars = ""
for j in range(7):
#把得到的值与0x0000003D进行位与运算,取得字符数组chars索引
index = 0x0000003D & hexint
#把取得的字符相加
outChars += chars[index]
#每次循环按位右移5位
hexint = hexint >> 5
#把字符串存入对应索引的输出数组
res[i] = outChars
return res

print shorten('http://www.google.com')
shorten(url) 这个方法会返回一个包含4个字符串的地址
上面代码返回的将是

['3IJJ7va', '6ZZfUfa', 'YNJniia', 'UFVRzea']

那麽这个短地址的形式将是 http://oo.xx/ 3IJJ7va

本文转载自: http://blog.163.com/minhao_123/blog/static/1219526201263152845566/

java-苦苦甜甜
粉丝 19
博文 157
码字总数 15880
作品 0
厦门
私信 提问
加载中

评论(1)

GankoTech
GankoTech
不能用
都说抖音是毒品软件?我用Python爬取了里面的小视频!

简介 抖音,是一款可以拍短视频的音乐创意短视频社交软件,该软件于2016年9月上线,是一个专注年轻人的15秒音乐短视频社区。用户可以通过这款软件选择歌曲,拍摄15秒的音乐短视频,形成自己的...

qq_42156420
2018/05/28
0
0
《Python Cookbook》第三版中文版发布

人生苦短,我用 python! 我一直坚持使用 python3,因为它代表了python的未来。虽然向后兼容是它的硬伤,但是这个局面迟早会改变的, 而且python3的未来需要每个人的帮助和支持。 目前市面上...

一刀
2015/12/29
7.1K
65
请教一个短网址转换的问题

经常碰到“t.cn”类型的短网址,在Python3下用urllib.request可以进行转换,得到真实的网址。代码如下: 短网址 http://t.cn/hOH39 还原后的真实地址是360安全卫士的下载地址: http://down....

从前是菜鸟
2016/02/21
379
4
[原]我为什么要学习python

引言:学习python近两年,谈谈我对于python的一点小理解,也从一些方面谈谈自己微薄的想法,也就是我为什么学习python 这里我不讨论python的一些有用的库或者框架,只从语言本身,最小支持的...

长平狐
2012/11/14
156
1
《Python Cookbook》第三版中文版

人生苦短,我用 python! 我一直坚持使用 python3,因为它代表了python的未来。虽然向后兼容是它的硬伤,但是这个局面迟早会改变的, 而且python3的未来需要每个人的帮助和支持。 目前市面上...

一刀
2015/01/07
58.7K
42

没有更多内容

加载失败,请刷新页面

加载更多

Jenkins World 贡献者峰会及专家答疑展位

本文首发于:Jenkins 中文社区 原文链接 作者:Marky Jackson 译者:shunw Jenkins World 贡献者峰会及专家答疑展位 本文为 Jenkins World 贡献者峰会活动期间的记录 Jenkins 15周岁啦!Jen...

Jenkins中文社区
20分钟前
6
0
杂谈:面向微服务的体系结构评审中需要问的三个问题

面向微服务的体系结构如今风靡全球。这是因为更快的部署节奏和更低的成本是面向微服务的体系结构的基本承诺。 然而,对于大多数试水的公司来说,开发活动更多的是将现有的单块应用程序转换为...

liululee
34分钟前
6
0
OSChina 周二乱弹 —— 我等饭呢,你是不是来错食堂了?

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @ 自行车丢了:给主编推荐首歌 《クリスマスの夜》- 岡村孝子 手机党少年们想听歌,请使劲儿戳(这里) @烽火燎原 :国庆快来,我需要长假! ...

小小编辑
今天
329
8
玩转 Springboot 2 之热部署(DevTools)

Devtools 介绍 SpringBoot 提供了热部署的功能,那啥是热部署累?SpringBoot官方是这样说的:只要类路径上的文件发生更改,就会自动重新启动应用程序。在IDE中工作时,这可能是一个有用的功能...

桌前明月
今天
5
0
CSS--列表

一、列表标识项 list-style-type none:去掉标识项 disc:默认实心圆 circle:空心圆 squire:矩形 二、列表项图片 list-style-img: 取值:url(路径) 三、列表项位置 list-style-position:...

wytao1995
今天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部