たくさんのテキストからURLを検出し、それらを自動的に短縮する方法がDjangoにあるかどうか疑問に思っていました。urlizeを使用してURLを検出できることは知っていますが、リンクを短くするために少しでも何かを使用できるかどうかはわかりません。
また、Pythonの代わりにjavascriptを使用してこのタスクを実行する方が良いでしょうか?その場合、どうすればよいですか?
たくさんのテキストからURLを検出し、それらを自動的に短縮する方法がDjangoにあるかどうか疑問に思っていました。urlizeを使用してURLを検出できることは知っていますが、リンクを短くするために少しでも何かを使用できるかどうかはわかりません。
また、Pythonの代わりにjavascriptを使用してこのタスクを実行する方が良いでしょうか?その場合、どうすればよいですか?
bit.lyの場合、URLを短縮したいだけなら、非常に簡単です。
最初にアカウントを作成してから、http://bitly.com/a/your_api_keyにアクセスしてAPIキーを取得します。
APIのshorterメソッドにリクエストを送信すると、結果は短縮URLになります。
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" %}
注:タグ内の位置引数はdjango1.4の機能です
bit.ly APIのすべての機能が必要な場合は、まずdev.bitly.com/get_started.htmlのドキュメントを読んでから、公式のPythonクライアントをダウンロードしてください。
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']
ただし、テンプレートで管理できなかったことが1つあります。
{% bitlyfy request.get_full_path %}
{% bitlyfy {{request.get_full_path}} %}
どちらも機能せず、解決方法がわかりません。どんな助けでも大歓迎です!
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