微薄短地址的实现-python

2012-11-22  来源:本站原创  分类:转贴的文章  人气:0 

几乎所有的微薄都提供了缩短网址的服务,其原理就是将一个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

相关文章
  • 微薄短地址的实现-python 2012-11-22

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

  • 短地址生成器接口 ShortUrlApi 2013-11-13

    ShortUrlApi 网站 : http://git.oschina.net/myaniu/ShortUrlApi 短地址生成器接口,目前仅实现了网易126.am的短地址生成器接口. 以后会慢慢添加其他短地址服务提供商的实现. 如何使用: Am126ShortUrlGenerater sug = new Am126ShortUrlGenerater(); //这个apikey需要在126.am网站上申请. sug.setApiKey("b4df5122444bb4198387f09"

  • C#实现类似新浪微博长URL转短地址的方法 2014-01-08

    这篇文章主要介绍了C#实现类似新浪微博长URL转短地址的方法,涉及C#操作正则表达式的相关技巧,非常具有实用价值,需要的朋友可以参考下 本文实例讲述了C#实现类似新浪微博长URL转短地址的方法.分享给大家供大家参考.具体如下: 一.前台判断用户输入URL的JS代码如下. function CheckInput() { var $txtLength = $("#inp_text").val().length; if ($txtLength > 10) { var url = $(&

  • C# URL短地址压缩算法及短网址原理解析 2014-01-30

    这篇文章主要介绍了C# URL短地址压缩算法及短网址原理解析,本文重点给出了算法代码,需要的朋友可以参考下 短网址应用已经在全国各大微博上开始流行了起来.例如QQ微博的url.cn,新郎的sinaurl.cn等. 我们在QQ微博上发布网址的时候,微博会自动判别网址,并将其转换,例如:http://url.cn/2hytQx 为什么要这样做的,原因我想有这样几点: 微博限制字数为140字一条,那么如果我们需要发一些连接上去,但是这个连接非常的长,以至于将近要占用我们内容的一半篇幅,这肯定是不能被允

  • php curl 获取google短地址问题解决 2012-11-13

    我们有个类微博应用 背景:测试员说其发表内容中链接应该是可点击的短链接 简单调试发现:在本地和服务器上都能获取到链接的短地址,唯独内网的测试地址: 192.168.1.111:81/app 不能获取短地址, 思考原因,获取短地址的流程是 匹配内容中的url,然后调用google的短址api, 首先我没有匹配出带端口号的url,没有匹配出localhost的url 就想偷懒直接匹配出以(http://|https://|ftp://)开头,至空格,引号(',",',",等隔断符,包含汉字

  • URL短地址压缩算法 微博短地址原理解析 (Java实现) 2014-07-29

    最近,项目中需要用到短网址(ShortUrl)的算法,于是在网上搜索一番,发现有C#的算法,有.Net的算法,有PHP的算法,就是没有找到Java版的短网址(ShortUrl)的算法,很是郁闷.同时还发现有不少网友在发帖求助,怎么实现Java版的短网址(ShortUrl)的算法.干脆一不做,二不休,参考了一下网上比较流行的PHP版短网址(ShortUrl)算法: 再根据自己的理解,用Java实现了该短网址(ShortUrl)的算法.(\(^o^)/YES!我还真厉害!) 先来废话一下,是在别人的

  • Python生成随机MAC地址 2015-03-08

    这篇文章主要介绍了Python生成随机MAC地址的相关资料,需要的朋友可以参考下 利用python代码生成一个随机的MAC地址,使用python网络编程时或可用上,如果使用scapy模块则可直接利用RandMAC()函数来生成MAC. python import random Maclist = [] for i in range(1,7): RANDSTR = "".join(random.sample("0123456789abcdef",2)) Maclist

  • 一个查询ip地址的小工具(python+pyqt) 2015-02-27

    我的个人博客( 肥龙的博客)发表了新文章了! 欢迎大家过来阅读,以下是文章的连接地址 http://www.comingcode.com/?p=267 使用python也会写出一些小功能了,但是感觉还是没有一个完整性,今天下午空闲时间想到做个ip查询工具,因为在做这个工具时候,将会使用到pyqt以及一些其他小功能.从这个小例子中,我学习到了: 1. python+pyqt的结合使用,如何在编写按钮点击事件处理代码 2. python中关于正则表达式的使用 3. python中使用urllib2发

  • Symbian短信酷 smsstore 2010-03-02

    smsstore 网站 : http://code.google.com/p/smsstore/ 短信酷是一款方便手机发短信.管理短信的软件.短信酷用Python编写,用于Symbian(S60)平台第一版和第二版的手机 授权协议: MIT 开发语言: C/C++ 操作系统: Symbian

  • 短网址服务 短点! 2012-09-24

    短点! 网站 : https://github.com/wendal/shortit 现有的短地址服务,各种河蟹,各种验证码,各种墙,而且只单独网址或文件的短地址服务!! Wendal我极度不爽!! 功能:网址/纯文本的短地址 拖拉式文件分享 授权协议: Apache 开发语言: Java 查看源码» 操作系统: 跨平台

  • python编写网页爬虫脚本并实现APScheduler调度 2013-10-15

    爬虫爬的页面是京东的电子书网站页面,每天会更新一些免费的电子书,爬虫会把每天更新的免费的书名以第一时间通过邮件发给我,通知我去下载 前段时间自学了python,作为新手就想着自己写个东西能练习一下,了解到python编写爬虫脚本非常方便,且最近又学习了MongoDB相关的知识,万事具备只欠东风. 程序的需求是这样的,爬虫爬的页面是京东的电子书网站页面,每天会更新一些免费的电子书,爬虫会把每天更新的免费的书名以第一时间通过邮件发给我,通知我去下载. 一.编写思路: 1.爬虫脚本获取当日免费书籍信息

  • php 短链接算法收集与分析 2013-12-29

    php 短链接算法收集与分析,需要的朋友可以参考下. 短链接就不说了,大家已经都清楚了,如下所示就是短链接: 新浪微博 http://t.cn/SVpONM 腾讯微博 http://url.cn/302yor Yun.io http://d.yun.io/PNri2v 短链接的好处:1.内容需要:2.用户友好:3.便于管理. 如何实现呢,大概有三个步骤: 1.定义一个URL映射算法,可以将长的URL映射成短字符串: 2.使用一个存储(数据库?NoSQL?)来存储完成的映射: 3.实现自己的URL

  • Python Socket编程入门教程 2014-04-15

    这篇文章主要介绍了Python Socket编程入门教程,本文包含一个客户端Socket编程实现和一个服务器端Socket编程例子,需要的朋友可以参考下 这是用来快速学习 Python Socket 套接字编程的指南和教程.Python 的 Socket 编程跟 C 语言很像. Python 官方关于 Socket 的函数请看 http://docs.python.org/library/socket.html 基本上,Socket 是任何一种计算机网络通讯中最基础的内容.例如当你在浏览器地址栏

  • Python中使用copy模块实现列表(list)拷贝 2014-07-11

    这篇文章主要介绍了Python中使用copy模块实现列表(list)拷贝,本文讲解了简单列表的复制和复杂列表复制的解决方法,需要的朋友可以参考下 引用是指保存的值为对象的地址.在 Python 语言中,一个变量保存的值除了基本类型保存的是值外,其它都是引用,因此对于它们的使用就需要小心一些.下面举个例子: 问题描述:已知一个列表,求生成一个新的列表,列表元素是原列表的复制 a=[1,2] b=a 这种做法其实并未真正生成一个新的列表,b指向的仍然是a所指向的对象.这样,如果对a或b的元素进行修改

  • Facebook内部邮箱地址改为"@fb.com" 2014-11-10

    Facebook在发布邮箱服务后,已经将该公司内部邮箱地址更改为"@fb.com". 周二,Facebook发布邮箱服务,启用"@facebook.com"邮箱地址.该邮箱整合了消息.电子邮件和即时通讯等多种通讯功能. 本月早些时候,Facebook从美国农场局(American Farm Bureau)购得了"@fb.com"邮箱地址. 这种用户使用较长地址.雇员使用较短地址的做法十分少见.目前,雅虎雇员使用的邮箱地址为"@yahoo

  • 动态语言IDE:Aptana Pydev和DLTK Python 2014-12-18

    Aptana正日益巩固着其在IDE市场的地位.在接管了Matt Kent和Kyle Shank的RadRails之后,他们也成了Fabio Zadrozny的雇主.Fabio Zadrozny是基于Eclipse的Pydev的主要开发者. 我们很荣幸地宣布,倍受欢迎的Python和Jython的IDE--Pydev--现在是Aptana产品家族的成员了.还有,Pydev的创建者Fabio Zadronzy将会作为Aptana团队的一员,继续改进Pydev. 我们采访了Fabio,来谈谈Pydev

  • Tinymail:保护Email地址的新方式 2013-11-11

    通常我们在公共网站上发布自已的Email地址时,经常利用 name # mail.com 这样的格式,这主要是为了预防垃圾邮件而采取的行为.而现在 TinyMail 为我们提供了一种新的Email地址保护方式. 当你在TinyMail上输入自已的Email地址并点击 Protect It 按钮后,系统会自动生成一个短地址.之后你可以把该地址直接发到需公布Email地址的页面上了. 而当有人点击该地址后,会进入一个验证码输入界面,只有当输入正确验证码后才会显示你的Email地址,这样就可以更有效的

  • selenium webdriver w/python learning 2012-02-16

    =========== install =========== 1.安装python2.7: 下载地址:http://python.org/getit/ 下载后直接点击就可以安装 2.安装setuptools 下载地址:http://pypi.python.org/pypi/setuptools#downloads (下载后直接点击就可以安装) 3.安装pip 下载地址:http://pypi.python.org/pypi/pip/1.0.2#downloads command: python

  • Python 的 Socket 编程教程 2012-10-25

    这是用来快速学习 Python Socket 套接字编程的指南和教程.Python 的 Socket 编程跟 C 语言很像. Python 官方关于 Socket 的函数请看 http://docs.python.org/library/socket.html 基本上,Socket 是任何一种计算机网络通讯中最基础的内容.例如当你在浏览器地址栏中输入 www.codeweblog.com 时,你会打开一个套接字,然后连接到 www.codeweblog.com 并读取响应的页面然后然后显示出来.

  • 百度 短网址 api 2013-04-10

    怎样调用百度短网址API? 生成短网址 请求:向dwz.cn/create.php发送post请求,发送数据包括url=长网址 返回:json格式的数据 status!=0 出错,查看err_msg获得错误信息(UTF-8编码) 成功,返回生成的短网址 tinyurl字段 自定义短网址 请求:向dwz.cn/create.php发送post请求,发送数据包括url=长网址&alias=自定义网址 返回:json格式的数据 Status!=0 出错,查看err_msg获得错误信息(UTF-8编码)