Skip to content

Instantly share code, notes, and snippets.

@moonmilk
Last active November 29, 2023 01:48
Show Gist options
  • Save moonmilk/035917e668872013c1bd to your computer and use it in GitHub Desktop.
Save moonmilk/035917e668872013c1bd to your computer and use it in GitHub Desktop.
manually authorize a twitter app to a twitter account

So you're writting a twitterbot and you need to authorize your application to post to the account. You need an access token and secret for the account you're posting to. If the posting account is the same account that owns the application, no problem, you just push the button on your application's settings page to make the keys. But if you want to post to a different twitter account, there's no UI on apps.twitter.com to authorize it. So I made this bare-minimum node server to run through the authorization process. There's probably a much better way to do this, so please let me know what that way is!

ignore this and go down to the comments for better solutions

  • You'll need a server with node.js!
  • Make sure your application has a callback URL specified in its settings page, even if it's just a placeholder. If there's nothing in the callback URL slot, this method of authorization won't work.
  • In authorize.js, fill in your application's consumer key and secret, and the domain on which you'll be running this mini-server (I think it'll work with 'localhost' if you're running it on your laptop, but I haven't tested it that way).
  • Install the application (npm install)
  • Run the server (node authorize.js)
  • In a browser, make sure you're logged in to the account that you want to authorize, and then visit this server in the browser (e.g. http://localhost:3456)
  • Click "authenticate" and you should be sent to the Twitter app authorization page
  • When you authorize the app, you should see a page displaying your new access token and secret. Keep those safe!

If it doesn't work for you, I probably can't help you, but someone who understands this system better than I do will probably make a version of this process that works better.

var express = require('express');
var app = express();
var twitterAPI = require('node-twitter-api');
var twitter = new twitterAPI({
// application keys for your application
consumerKey: '...',
consumerSecret: '...',
callback: 'http://your domain or localhost:3456/auth'
});
var requestToken, requestTokenSecret;
// following instructions from https://www.npmjs.org/package/node-twitter-api
app.get('/', function(req, res){
twitter.getRequestToken(function(error, _requestToken, _requestTokenSecret, results){
if (error) {
res.send(error);
} else {
//store token and tokenSecret somewhere, you'll need them later; redirect user
requestToken = _requestToken;
requestTokenSecret = _requestTokenSecret;
res.send('<a href="' + twitter.getAuthUrl(requestToken) + '">authenticate</a>');
}
});
});
app.get('/auth', function(req, res) {
twitter.getAccessToken(requestToken, requestTokenSecret, req.query.oauth_verifier, function(error, accessToken, accessTokenSecret, results) {
if (error) {
res.send(error);
} else {
//store accessToken and accessTokenSecret somewhere (associated to the user)
res.send('accessToken: <b>' + accessToken + '</b><br/>accessTokenSecret: <b>' + accessTokenSecret + '</b>');
}
});
});
app.listen(3456);
{
"name": "twitter authorizing thingy",
"version": "1.0.0",
"description": "",
"main": "authorize.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"dependencies": {
"express": "^4.10.1",
"node-twitter-api": "^1.5.0"
}
}
@ColinJoMurphy
Copy link

This is a great solution to manually get access tokens for another Twitter account! Below is my updated version of @beaugunderson's PIN method using auth.access_token and auth.access_secret as suggested by @hugovk above. I also had to add the argument callback_url = 'oob' to tweepy.OAuthHandler() in order to get my Chrome browser to show the pin after authorizing the app with the generated url.

#!/usr/bin/env python

import tweepy

# From your app settings page
CONSUMER_KEY = "YOUR_API_KEY_HERE"
CONSUMER_SECRET = "YOUR_API_SECRET_HERE"

auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET, callback = 'oob')
auth.secure = True
auth_url = auth.get_authorization_url()

print ('Please authorize: ' + auth_url)

verifier = input('PIN: ').strip()

auth.get_access_token(verifier)

print ("ACCESS_KEY = " + auth.access_token)
print ("ACCESS_SECRET = " +  auth.access_token_secret)

@juandpr
Copy link

juandpr commented Dec 21, 2022

Not working for me, any clue?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment