Skip to content

Instantly share code, notes, and snippets.

@aspick
Last active December 26, 2015 09:59
Show Gist options
  • Save aspick/7133078 to your computer and use it in GitHub Desktop.
Save aspick/7133078 to your computer and use it in GitHub Desktop.
tabetai_bot
/**
* Module dependencies.
*/
var express = require('express')
, routes = require('./routes')
, user = require('./routes/user')
, http = require('http')
, path = require('path')
, ImmortalNTwitter = require('immortal-ntwitter')
, Bing = require('binger')
, googleapis = require('googleapis')
, fs = require('fs')
, request = require('request')
, utils = require('./node_modules/immortal-ntwitter/node_modules/ntwitter/lib/utils');
var util = require("util");
var app = express();
// all environments
app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));
// development only
if ('development' == app.get('env')) {
app.use(express.errorHandler());
}
app.get('/', routes.index);
app.get('/users', user.list);
// http.createServer(app).listen(app.get('port'), function(){
// console.log('Express server listening on port ' + app.get('port'));
// });
var twitterOauthCredentials = {
consumer_key: '...',
consumer_secret: '...',
access_token_key: '...',
access_token_secret: '...'
};
var updateStatusWithMedia = function(status,filename,in_rep,callback){
var url = 'https://api.twitter.com/1.1/statuses/update_with_media.json';
var oauthParams = {
consumer_key: twitterOauthCredentials.consumer_key,
consumer_secret: twitterOauthCredentials.consumer_secret,
token: twitterOauthCredentials.access_token_key,
token_secret: twitterOauthCredentials.access_token_secret
};
var r = request.post({url:url, oauth:oauthParams}, callback);
var form = r.form();
form.append('status', status);
form.append('media[]', fs.createReadStream(filename));
form.append('in_reply_to_status_id', in_rep)
}
var gclient = [];
googleapis.discover('customsearch','v1').execute(function(err, client){
gclient = client;
});
Math.RandomInteger = function(n) {
var i = Math.random();
var num = Math.round(i * n);
return num;
};
var searchFoodImage = function(word,callback){
gclient.customsearch.cse.list({
q: '食べ物' + word,
cx:'...',
safe: 'medium',
searchType: 'image'
})
.withApiKey('...')
.execute(function(err,result){
var resultCount = result['items'].length;
if(resultCount == 0){
return;
}
var index = Math.RandomInteger(resultCount);
var url = result['items'][index]['image']['thumbnailLink'];
console.log("url is " + url);
callback(url);
});
}
var download = function(uri, filename, callback){
request.head(uri, function(err, res, body){
console.log('content-type:', res.headers['content-type']);
console.log('content-length:', res.headers['content-length']);
var r = request(uri);
r.pipe(fs.createWriteStream(filename));
r.on('end', callback);
});
};
var twit = ImmortalNTwitter.create(twitterOauthCredentials);
twit.immortalStream('user', null, function(immortalStream) {
immortalStream.on('data', function(data){
console.log('immortalData ' + util.inspect(data));
if(data['event'] === 'follow'){
twit.createFriendship(data['source']['id'],function(err,response){
console.log("[follow] " + util.inspect(response));
});
console.log('- follow ' + data['target']['screen_name']);
}
if(data['text'] && data['text'][0] === '@'){
return;
}
if(data['text'] && data['text'].indexOf('食べたい') > 0){
var foodWord = data['text'].substr(0, data['text'].indexOf('食べたい'));
searchFoodImage(foodWord,function(url){
download(url,'downloaded',function(){
updateStatusWithMedia("@" + data['user']['screen_name'] + " つ[" + foodWord + "]",
'downloaded',
data['id'],
function(err, response, body){
if(err){
console.log('[post tweet error] ' + util.inspect(err));
}
console.log('[post tweet] ' + util.inspect(response));
}
);
});
});
}
if(data['direct_message']){
// direct message handling
}
});
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment