Recuperación de un token de solicitud de la API de Twitter con Python 3

Estoy intentando usar Python 3 para interactuar con la API de Twitter para devolver el enlace a una página que me da un número PIN para usar para solicitar tokens de acceso. Como se detalla aquí:https://dev.twitter.com/docs/auth/pin-based-authorization

La API de Twitter me responde diciéndome que no he autorizado correctamente mi solicitud POST devolviendo un 401. Mi mejor suposición es por qué no estoy codificando correctamente la firma HMAC en base64. Todo lo que forma parte de la solicitud POST que genero parece correcto según los ejemplos de solicitudes POST correctas que he examinado.

He pasado varios días trabajando en esto y espero que alguien pueda ayudarme a pasar la última parte.

Aquí están las partes más relevantes de los documentos de la API de Twitter:https://dev.twitter.com/docs/api/1/post/oauth/request_token

https://dev.twitter.com/docs/auth/authorizing-request

Este es el código que estoy usando:

<code>import urllib.parse, urllib.request, json
from hashlib import sha1
import hmac
import binascii
import time
import random
import sys

#Server Links
REQUEST_URL = "https://api.twitter.com/oauth/request_token";
ACCESS_URL = "https://api.twitter.com/oauth/access_token";
AUTHORIZE_URL = "https://api.twitter.com/oauth/authorize";

#Consumer keys
TOKEN = "Omitted"
TOKEN_SECRET = "Omitted"

#Access keys
ACCESS_TOKEN = ""
ACCESS_TOKEN_SECRET = ""

TWEET = ""

count = 1

while len(sys.argv) > count:
    TWEET += sys.argv[count] + " "
    count += 1

TWEET = TWEET[:-1] #Get rid of trailing space

print(TWEET + "\n")

#Build content header for POST to return request tokens

HEADER_TITLE = "Authorization:"

#Consumer key
HEADER = 'OAuth oauth_callback="oob" oauth_consumer_key="' + TOKEN + '", '

#Nonce
HEADER += 'oauth_nonce="'
NONCE = ""
for i in range(32):
    NONCE += chr(random.randint(97, 122))
HEADER += NONCE
HEADER += '", '

#Timestamp
TIMESTAMP = str(int(time.time()))

#Signature
HEADER += 'oauth_signature="'
PARAMETER_STRING = "include_entities=true&oauth_consumer_key=" + TOKEN + "&oauth_nonce=" + NONCE + "&oauth_signature_method=HMAC-SHA1&oauth_timestamp=" + TIMESTAMP + "&oauth_version=1.0"
BASE_STRING = 'POST&' + urllib.parse.quote(REQUEST_URL, '') + '&' + urllib.parse.quote(PARAMETER_STRING, '')
SIGNING_KEY = urllib.parse.quote(TOKEN_SECRET, '') + '&'
print("DEBUG : SIGNING KEY " + SIGNING_KEY + " BASE STRING " + BASE_STRING + "\n")
HEADER += str(binascii.b2a_base64(hmac.new(BASE_STRING.encode(), SIGNING_KEY.encode(), sha1).digest()[:-1]))#Note to self, we may not want to remove the last character...
HEADER += '", '

#Signature Method
HEADER += 'oauth_signature_method="HMAC-SHA1", '

#Timestamp
HEADER += 'oauth_timestamp="' + TIMESTAMP + '", '

#Version
HEADER += 'oauth_version="1.0"'

print(HEADER_TITLE + "\n" + HEADER)

print(urllib.request.urlopen(urllib.request.Request(REQUEST_URL, bytes(HEADER_TITLE+HEADER, 'utf-8'))).read())
</code>

Finalmente, me gustaría señalar que estoy al tanto de la existencia de los módulos Python OAuth y Twitter que ayudan en el desarrollo para esto. Sin embargo, como experiencia de aprendizaje, elijo no usarlos.

Muchas gracias de antemano por su tiempo y asistencia.

Respuestas a la pregunta(2)

Su respuesta a la pregunta