Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
/*
A simple Twitter bot that posts random images.
Tutorial: https://botwiki.org/resource/tutorial/random-image-tweet/
*/
const fs = require( 'fs' ),
path = require( 'path' ),
Twit = require( 'twit' ),
config = require( path.join( __dirname, 'config.js' ) ),
images = require( path.join( __dirname, 'images.js' ) );
/*
Your config.js file should have the following format:
const config = {
consumer_key: 'XXXXX',
consumer_secret: 'XXXXX',
access_token: 'XXXXX',
access_token_secret: 'XXXXX'
}
module.exports = config;
Here's a tutorial on how to get the API keys: https://botwiki.org/resource/tutorial/how-to-create-a-twitter-app/
And this is an example of an image.js file:
const images = [
{
file: '01.jpg',
source: 'http://www.example.com/01.jpg'
},
{
file: '02.jpg',
source: 'http://www.example.com/02.jpg'
},
{
file: '03.jpg',
source: 'http://www.example.com/03.jpg'
}
];
module.exports = images;
*/
const T = new Twit( config );
function randomFromArray( images ){
/* Helper function for picking a random item from an array. */
return images[Math.floor( Math.random() * images.length )];
}
function uploadRandomImage(){
/* Function for uploading a random image to Twitter and posting it. */
console.log( 'picking a random image...' );
const image = randomFromArray( images );
console.log( image );
const imagePath = path.join( __dirname, '/images/'+ image.file );
const imageSource = image.source
b64content = fs.readFileSync( imagePath, { encoding: 'base64' } );
console.log( 'uploading an image...' );
T.post( 'media/upload', { media_data: b64content }, function ( err, data, response ) {
if ( err ){
console.log( 'error:', err );
}
else{
console.log( 'image uploaded, now tweeting it...' );
T.post( 'statuses/update', {
status: imageSource,
media_ids: new Array( data.media_id_string )
},
function( err, data, response) {
if (err){
console.log( 'error:', err );
}
else{
console.log( 'posted an image!' );
/* After successfully posting an image, we can delete it.
Keep this part commented out if you want to keep the image and reuse it later. */
// fs.unlink( imagePath, function( err ){
// if ( err ){
// console.log( 'error: unable to delete image ' + imagePath );
// }
// else{
// console.log( 'image ' + imagePath + ' was deleted' );
// }
// } );
}
}
);
}
});
}
fs.readdir( __dirname + '/images', function( err, files ) {
/* Read the content of the images folder, and tweet a random image from it. */
if ( err ){
console.log( 'error:', err );
}
else{
let images = [];
files.forEach( function( f ) {
images.push( f );
} );
setInterval( function(){
uploadRandomImage( images );
}, 10000 );
}
} );
@jimmyeao

This comment has been minimized.

Copy link

@jimmyeao jimmyeao commented Apr 12, 2021

Thanks for this. I've created a Powershell script to help create the images.js file (because typing manually is tedious :) )
https://github.com/jimmyeao/twitterbotimgcreator

@fourtonfish

This comment has been minimized.

Copy link
Owner Author

@fourtonfish fourtonfish commented Apr 14, 2021

Nice, thank you for sharing!

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