Nouvelles Du Monde

node.js – Comment obtenir un jeton d’accès à l’API Twitter en JavaScript

node.js – Comment obtenir un jeton d’accès à l’API Twitter en JavaScript

J’essaie de convertir une application Python que j’ai créée il y a quelques années en une (meilleure) implémentation NodeJS. La fonction en question obtient un jeton d’accès de l’API Twitter à attacher aux futures requêtes, mais mon implémentation renvoie 403 requêtes incorrectes. Voici une implémentation Python fonctionnelle.

def get_bearer_header():
    uri_token_endpoint="https://api.twitter.com/oauth2/token"
    key_secret = f"{twitter_creds.CONSUMER_KEY}:{twitter_creds.CONSUMER_KEY_SECRET}".encode('ascii')
    b64_encoded_key = base64.b64encode(key_secret)
    b64_encoded_key = b64_encoded_key.decode('ascii')

    auth_headers = {
        'Authorization': 'Basic {}'.format(b64_encoded_key),
        'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'
        }

    auth_data = {
        'grant_type': 'client_credentials'
        }

    auth_resp = requests.post(uri_token_endpoint, headers=auth_headers, data=auth_data)
    bearer_token = auth_resp.json()['access_token']

    bearer_header = {
        'Accept-Encoding': 'gzip',
        'Authorization': 'Bearer {}'.format(bearer_token),
        'oauth_consumer_key': twitter_creds.CONSUMER_KEY 
    }
    return bearer_header

et voici l’implémentation de JS jusqu’à présent.

export const getBearerHeader = async () => {
    const keyAndSecret = btoa(`${config.twitterApi.consumerKey}:${config.twitterApi.consumerKeySecret}`)
    const buff = Buffer.from(keyAndSecret, 'utf-8');
    const b64KeyAndSecret = buff.toString('base64');
    const body = new URLSearchParams({
        'grant_type': 'client_credentials'
    })
    const url = config.twitterApi.oauthTokenEndpoint
    const headers =  {
        'Authorization': `Basic ${b64KeyAndSecret}`,
        'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'
    }

    const resp = await axios.post(url, body, headers)
    console.log("RESPONSE.data")
    console.log(resp.data)
}

la demande semble correcte selon les documents Twitter, mais ma réponse indique 403 !

Toute aide appréciée !

Facebook
Twitter
LinkedIn
Pinterest

Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.

ADVERTISEMENT