使用 bit.ly v4(从 bit.ly v3 迁移)和 python 3.7 和 bitlyshortener 包缩短长 URL
Shortening a long URL with bit.ly v4 (migrate from bit.ly v3) and python 3.7 and bitlyshortener package
我确实有一些使用 bit.ly API v3 来缩短 URL 响应的教程代码。我想将此代码迁移到 v4 API,但我不明白如何设置正确的 API 端点。至少我认为这是我的错误,API 文档很难理解和适应我,因为我是初学者。
我有 2 个文件要处理:
- bitlyhelper.py(这个需要迁移到bit.ly API v4)
- views.py
这是与 URL 缩短相关的相关代码。
bitlyhelper.py
import requests
#import json
TOKEN = "my_general_access_token"
ROOT_URL = "https://api-ssl.bitly.com"
SHORTEN = "/v3/shorten?access_token={}&longUrl={}"
class BitlyHelper:
def shorten_url(self, longurl):
try:
url = ROOT_URL + SHORTEN.format(TOKEN, longurl)
r = requests.get(url)
jr = r.json()
return jr['data']['url']
except Exception as e:
print (e)
views.py
from .bitlyhelper import BitlyHelper
BH = BitlyHelper()
@usr_account.route("/account/createtable", methods=["POST"])
@login_required
def account_createtable():
form = CreateTableForm(request.form)
if form.validate():
tableid = DB.add_table(form.tablenumber.data, current_user.get_id())
new_url = BH.shorten_url(config.base_url + "newrequest/" + tableid)
DB.update_table(tableid, new_url)
return redirect(url_for('account.account'))
return render_template("account.html", createtableform=form, tables=DB.get_tables(current_user.get_id()))
代码在使用 v3 API 时运行良好 API。
我尝试了 API 端点的几种组合,但无法正常工作。
例如简单地更改版本号是行不通的。
SHORTEN = "/v4/shorten?access_token={}&longUrl={}"
如果有人可以帮助设置正确的 API 端点,那就太好了。
这是 API 文档:https://dev.bitly.com/v4_documentation.html
这是我认为的相关部分:
基于此,您的 v3 代码无法针对 v4 是有道理的:
Authentication
How you authenticate to the Bitly API has changed with V4. Previously your authentication token would be provided as the access_token query parameter on each request. V4 instead requires that the token be provided as part of the Authorization header on each request.
您需要将您的标记移出 args 并移入 header。
使用 https://github.com/bitly/bitly-api-python 可能是一种选择,
除了上次更新已经有几年了。
我得到了一些帮助,最终从这里使用了 bitlyshortener:https://pypi.org/project/bitlyshortener/
这样:
from bitlyshortener import Shortener
tokens_pool = ['bitly_general_access_token'] # Use your own.
shortener = Shortener(tokens=tokens_pool, max_cache_size=128)
@usr_account.route("/account/createtable", methods=["POST"])
def account_createtable():
form = CreateTableForm(request.form)
if form.validate():
tableid = DB.add_table(form.tablenumber.data, current_user.get_id())
new_urls = [f'{config.base_url}newrequest/{tableid}']
short_url = shortener.shorten_urls(new_urls)[0]
DB.update_table(tableid, short_url)
return redirect(url_for('account.account'))
return render_template("account.html", createtableform=form, tables=DB.get_tables(current_user.get_id()))
这确实工作得很好,bitlyshortener 甚至自动将 s 添加到 https://my_shortlink。
import requests
header = {
"Authorization": "Bearer <TOKEN HERE>",
"Content-Type": "application/json"
}
params = {
"long_url": form.url.data
}
response = requests.post("https://api-ssl.bitly.com/v4/shorten", json=params, headers=header)
data = response.json()
if 'link' in data.keys(): short_link = data['link']
else: short_link = None
首先,您要使用不记名令牌创建请求 header。
确保也设置内容类型。
设置 header 后,您必须提供 url 您想要缩短的
数据变量包含您的 201 请求。
我确实有一些使用 bit.ly API v3 来缩短 URL 响应的教程代码。我想将此代码迁移到 v4 API,但我不明白如何设置正确的 API 端点。至少我认为这是我的错误,API 文档很难理解和适应我,因为我是初学者。
我有 2 个文件要处理:
- bitlyhelper.py(这个需要迁移到bit.ly API v4)
- views.py
这是与 URL 缩短相关的相关代码。
bitlyhelper.py
import requests
#import json
TOKEN = "my_general_access_token"
ROOT_URL = "https://api-ssl.bitly.com"
SHORTEN = "/v3/shorten?access_token={}&longUrl={}"
class BitlyHelper:
def shorten_url(self, longurl):
try:
url = ROOT_URL + SHORTEN.format(TOKEN, longurl)
r = requests.get(url)
jr = r.json()
return jr['data']['url']
except Exception as e:
print (e)
views.py
from .bitlyhelper import BitlyHelper
BH = BitlyHelper()
@usr_account.route("/account/createtable", methods=["POST"])
@login_required
def account_createtable():
form = CreateTableForm(request.form)
if form.validate():
tableid = DB.add_table(form.tablenumber.data, current_user.get_id())
new_url = BH.shorten_url(config.base_url + "newrequest/" + tableid)
DB.update_table(tableid, new_url)
return redirect(url_for('account.account'))
return render_template("account.html", createtableform=form, tables=DB.get_tables(current_user.get_id()))
代码在使用 v3 API 时运行良好 API。
我尝试了 API 端点的几种组合,但无法正常工作。
例如简单地更改版本号是行不通的。
SHORTEN = "/v4/shorten?access_token={}&longUrl={}"
如果有人可以帮助设置正确的 API 端点,那就太好了。
这是 API 文档:https://dev.bitly.com/v4_documentation.html
这是我认为的相关部分:
基于此,您的 v3 代码无法针对 v4 是有道理的:
Authentication
How you authenticate to the Bitly API has changed with V4. Previously your authentication token would be provided as the access_token query parameter on each request. V4 instead requires that the token be provided as part of the Authorization header on each request.
您需要将您的标记移出 args 并移入 header。
使用 https://github.com/bitly/bitly-api-python 可能是一种选择, 除了上次更新已经有几年了。
我得到了一些帮助,最终从这里使用了 bitlyshortener:https://pypi.org/project/bitlyshortener/
这样:
from bitlyshortener import Shortener
tokens_pool = ['bitly_general_access_token'] # Use your own.
shortener = Shortener(tokens=tokens_pool, max_cache_size=128)
@usr_account.route("/account/createtable", methods=["POST"])
def account_createtable():
form = CreateTableForm(request.form)
if form.validate():
tableid = DB.add_table(form.tablenumber.data, current_user.get_id())
new_urls = [f'{config.base_url}newrequest/{tableid}']
short_url = shortener.shorten_urls(new_urls)[0]
DB.update_table(tableid, short_url)
return redirect(url_for('account.account'))
return render_template("account.html", createtableform=form, tables=DB.get_tables(current_user.get_id()))
这确实工作得很好,bitlyshortener 甚至自动将 s 添加到 https://my_shortlink。
import requests
header = {
"Authorization": "Bearer <TOKEN HERE>",
"Content-Type": "application/json"
}
params = {
"long_url": form.url.data
}
response = requests.post("https://api-ssl.bitly.com/v4/shorten", json=params, headers=header)
data = response.json()
if 'link' in data.keys(): short_link = data['link']
else: short_link = None
首先,您要使用不记名令牌创建请求 header。 确保也设置内容类型。 设置 header 后,您必须提供 url 您想要缩短的
数据变量包含您的 201 请求。