Django中的URL检测和缩短

时间:2012-08-22 05:58:19

标签: javascript python django

我只是想知道Django是否有办法从一堆文本中检测URL然后自动缩短它们。我知道我可以使用urlize来检测网址,但我不确定我是否可以使用点滴或其他东西来缩短链接。

用javascript代替python完成这项任务会更好吗?如果是这样的话我该怎么办呢?

3 个答案:

答案 0 :(得分:5)

对于bit.ly,如果你只是想缩短网址,那很简单:

首先创建一个帐户,然后访问http://bitly.com/a/your_api_key以获取您的API密钥。

向API的shorten method发送请求,结果是缩短的网址:

from urllib import urlencode
from urllib2 import urlopen

ACCESS_KEY = 'blahblah'
long_url = 'http://www.example.com/foo/bar/zoo/hello/'
endpoint = 'https://api-ssl.bitly.com/v3/shorten?access_token={0}&longUrl={1}&format=txt'
req = urlencode(endpoint.format(ACCESS_KEY, long_url))
short_url = urlopen(req).read()

您可以将其包装到模板标签中:

@register.simple_tag
def bitlyfy(the_url):
    endpoint = 'https://api-ssl.bitly.com/v3/shorten?access_token={0}&longUrl={1}&format=txt'
    req = urlencode(endpoint.format(settings.ACCESS_KEY, the_url))
    return urlopen(req).read()

然后在你的模板中:

{% bitlyfy "http://www.google.com" %}

注意:标签中的位置参数是django 1.4的一个特性

如果您需要bit.ly API的所有功能,请先阅读dev.bitly.com/get_started.html处的文档,然后下载官方python client

答案 1 :(得分:0)

如果您想使用Bitly API,模板标签应该变为:

from django import template from django.conf import settings

import bitly_api import sys import os

register = template.Library()

BITLY_ACCESS_TOKEN="blahhhh"

@register.simple_tag def bitlyfy(the_url):
    bitly = bitly_api.Connection(access_token=BITLY_ACCESS_TOKEN)
    data = bitly.shorten(the_url)
    return data['url']

我的模板中有一件事我无法管理:

{% bitlyfy request.get_full_path %}
{% bitlyfy {{request.get_full_path}} %}

这些都不起作用,不知道如何解决它。 欢迎任何帮助!

答案 2 :(得分:0)

If you are using bit.ly then the best code to shorten url is:

import urllib
import urllib2
import json


link = "http://www.example.com/foo/bar/zoo/hello/"
values = {'access_token' : BITLY_ACCESS_TOKEN,
          'longUrl'      : link}
url = "https://api-ssl.bitly.com/v3/shorten"

data = urllib.urlencode(values)
req = urllib2.Request(url,data)
response = (urllib2.urlopen(req).read()).replace('\/', '/')
bitly_url = (json.loads(response))['data']['url']
return bitly_url