2017-03-09 1 views
0

내 트위터 봇에 버그를 수정하려고합니다. 기본적으로 폴더의 모든 파일 이름을 가진 배열이 있는데, 임의로 하나를 선택하여 게시하지만 가끔씩 게시합니다. 동일한 이미지를 다시 게시합니다. 어떻게 해결할 수 있습니까?랜덤 파일을 선택하고 node.js와 함께 이동

fs.js:640 
    return binding.open(pathModule._makeLong(path), stringToFlags(flags), mode); 
       ^

Error: ENOENT: no such file or directory, open 'D:\memesbot\memestorage\queue\645 (2).jpg' 
    at Error (native) 
    at Object.fs.openSync (fs.js:640:18) 
    at Object.fs.readFileSync (fs.js:508:33) 
    at Timeout.upload_random_image [as _onTimeout] (D:\memesbot\memes.js:29:23) 
    at ontimeout (timers.js:365:14) 
    at tryOnTimeout (timers.js:237:5) 
    at Timer.listOnTimeout (timers.js:207:5) 
: 여기

이 오류 메시지가 가끔 또 다시

... 
var filename = (random_file()); 
var pfile = ("posted"+random_file()); 
var imgPATH = path.join(__dirname, '/memestorage/queue/' + filename); 
var postedFile = path.join(__dirname, '/memestorage/posted/' + pfile); 
fs.rename(imgPATH, postedFile, function(err) { 
    if (err) console.log('ERROR: ' + err); 
}); 

//image selection and upload 
function upload_random_image(){ 
    console.log('Opening file...'); 
    var image_path = imgPATH, 
     b64content = fs.readFileSync(imgPATH, { encoding: 'base64' }); 
... 

그러나 게시물 같은 이미지 이상과 함께 시도, 또는 한 코드

var fs = require('fs'), 
    path = require('path'), 
    Twit = require('twit'), 
    set = require(path.join(__dirname, 'set.js')); 
    //array of files 
    files_memes = require(path.join(__dirname, 'files.js')) 

var currentdate = new Date(); 
var upl = "Subido: " 
      + currentdate.getHours() + ":" 
      + currentdate.getMinutes()+ " hs."; 

var setMin = 10; 
var T = new Twit(set); 

function random_file(){ 
    var allFiles = (files_memes)//array 
    return allFiles[Math.floor(Math.random() * allFiles.length)]; 
} 

var filename = (random_file()); 
var imgPATH = path.join(__dirname, '/memestorage/queue/' + filename); 


//image selection and upload 
function upload_random_image(){ 
    console.log('Opening file...'); 
    var image_path = imgPATH, 
     b64content = fs.readFileSync(image_path, { encoding: 'base64' }); 

    console.log('Uploading file...'); 
    T.post('media/upload', { media_data: b64content }, function (err, data, response) { 
    if (err){ 
     console.log('ERROR'); 
     console.log(err); 
    } 
    else{ 
     console.log('File loaded!'); 

     T.post('statuses/update', { 
     media_ids: new Array(data.media_id_string) 
     }, 
     function(err, data, response) { 
      if (err){ 
      console.log('Error!'); 
      console.log(err); 
      } 
      else{ 
      console.log('Tweeted!'); 
      console.log(upl); 
      console.log('Next tweet in ' + setMin + ' min.'); 
      } 
     } 
    ); 
    } 
    }); 
} 

//timer 

setTimeout(
     upload_random_image, 
     0 
    ); 
setInterval(
     upload_random_image, 
     1000*10 
    ); 

준다

누군가가 나를 도울 수 있기를 바랍니다, 감사합니다.

답변

0

코드는 시작시 (var filename = (random_file());) 랜덤 파일을 생성하고 있지만 실행시 upload_random_image()이 아닌 것으로 보입니다.

그래서, 파일을 무작위로 하나를 선택하고 upload_random_imagesetInterval

솔루션으로 여러 번 호출됩니다 방법 upload_random_image

var filename = (random_file()); 
var imgPATH = path.join(__dirname, '/memestorage/queue/' + filename); 
+0

아차 내부 행 아래

이동! 그걸 알아 채지 못 했어! 이제 완벽하게 작동합니다. –