Сокращение длинного URL с помощью bit.ly v4 (переход с bit.ly v3) и пакета python 3.7 и bitlyshortener - PullRequest
1 голос
/ 04 мая 2019

У меня есть некоторый учебный код, который использует bit.ly API v3 для сокращения URL-ответа.Я хотел бы перенести этот код в API v4, но я не понимаю, как настроить правильную конечную точку API.По крайней мере, я думаю, что это моя ошибка, и документацию по API трудно понять и адаптировать для меня, поскольку я новичок.

У меня есть 2 файла для работы:

  1. bitlyhelper.py (необходимо перенести в bit.ly API v4)
  2. 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, но не удалось заставить его работать.

, например, просто изменение номера версии не работает.

SHORTEN = "/v4/shorten?access_token={}&longUrl={}"

Было быбыло бы здорово, если бы кто-то мог помочь с настройкой правильной конечной точки API.

Вот документация по API: https://dev.bitly.com/v4_documentation.html

Это важная часть, я думаю:

enter image description here

Ответы [ 2 ]

1 голос
/ 06 мая 2019

Я получил некоторую помощь и в итоге использовал 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()))

this does work perfectly fine, and bitlyshortener even adds the s to https://my_shortlink automagically.

thanks!
1 голос
/ 04 мая 2019

Имеет смысл, что ваш код v3 не работает с v4, основываясь на этом:

Аутентификация

Способ аутентификации в Bitly API изменился с V4. Ранее ваш токен аутентификации предоставлялся как параметр запроса access_token для каждого запроса. Вместо этого V4 требует, чтобы токен предоставлялся как часть заголовка авторизации для каждого запроса.

Вы захотите переместить свой токен из аргументов в заголовок.

Использование https://github.com/bitly/bitly-api-python может быть возможным, за исключением того, что прошло несколько лет с момента последнего обновления.

...