2017-02-09 20 views
1

對於類的分配,我需要創建一個Siri類似的程序,它接受一個命令和一個參數並從API返回一些數據,或者在一個特定情況下,從文本文件讀取並執行該文件中的命令以獲取特定歌曲的數據。我知道如何使用FS模塊讀取文件,但是我不理解如何讓它實際使用返回的內容來使其成爲命令並執行(本質上是myPlayList(我想這樣)。到目前爲止,代碼被分成了Select Cases and Functions以及文本文件中的內容。這是我的第一篇文章,並且看到整個代碼將更好地給出正在發生的事情的上下文感謝您的時間和幫助。使用Node.JS從文本文件發出命令

var keys = require("./keys.js") 
var twitter = require("twitter"); 
var omdb = require("request"); 
var spotify = require("spotify"); 
var fs = require("fs"); 

var liriCommand = process.argv[2]; 
var searchTitle = process.argv[3]; 

var twitterKeys = keys.twitterKeys; 

var twitterUser = new twitter({ 
    consumer_key: twitterKeys.consumer_key, 
    consumer_secret: twitterKeys.consumer_secret, 
    access_token_key: twitterKeys.access_token_key, 
    access_token_secret: twitterKeys.access_token_secret 
}); 
//console.log(twitterUser); okay keys working 

//Switch cases to call function based on liriCommand entered. 
switch(liriCommand) { 
    case "my-tweets": 
    myTweets(); 
    break; 

    case "spotify-this-song": 
    myPlayList(); 
    break; 

    case "movie-this": 
    myMovie(); 
    break; 

    case "do-what-it-says": 
    randomPick(); 
    break; 
} 

//Function for pulling in last 20 tweets 

function myTweets(){ 
    twitterUser.get('search/tweets', {q: 'burgeoningbaker', count: 20}, function(error, tweet, response) { 
     if(error){ 
      console.log(error); 
     }else{ 
      console.log(tweet); 
     } 
    }); 
}; 

//Function for pulling in artist, song name, link to song and album with song via Spotify 
function myPlayList(){ 
    if (!searchTitle){ 
     searchTitle = 'The Sign'; 
    } 

    spotify.search({type: 'track', query: searchTitle}, function(err, data){ 
     if (err){ 
      console.log('Error occurred: ' + err); 
      return; 
     } 
     //Handle Data 
     var albumTrack = data.tracks.items; 

     for (i=0; i < albumTrack.length; i++){ 
     console.log("Artist: " + albumTrack[i].artists[i].name); 
     console.log("Album Title: " + albumTrack[i].album.name); 
     console.log("Spotify Link: " + albumTrack[i].preview_url); 
     console.log("Track Title: " + albumTrack[i].name); 
     // } else if (!data && !err){ 
     // myPlaylist('The Sign'); 
     } 
    }; 

}; 

//Function for using request to get OMDB movie information from movie object 
// Move Title, Year of release, Rating, Country, Language, Plot, Actors, Rotten Tomato Rating, URL 

function myMovie(){}; 

// Function to fire off if typed do what it says 

function randomPick(){ 
    fs.readFile("random.txt", "UTF-8", function(error, data){ 
     if (error){ 
      console.log(error); 
     } 
      console.log(data); 

    }); 
}; 

這是文本文件的內容

Spotify的,這首歌曲, 「我想要它那個方式」

回答

0

嗯..怪assignm ent指令 - 從文本文件中讀取的文本文件只是一個「命令」和一個參數。這是什麼任務要求,或者你解釋的方式?在我看來,這個應用程序更適合作爲命令行界面,在那裏你可以爲它提供歌曲名稱,而不是更新.txt文件,然後調用應用程序。

不管怎麼說,假設you want it that way你描述的,你的函數調用實際上從未傳遞歌曲的名字 - 發現你的函數調用火災myPlaylist()不帶參數:

case "spotify-this-song": myPlayList(); break;

和myPlaylist不帶任何參數:

function myPlayList(){ if (!searchTitle){ searchTitle = 'The Sign'; }

if語句將始終評估爲真,因爲您將n曾經通過searchTitle。請注意,在您定義var searchTitle = process.argv[3];的位置上方可能表示該應用程序應該設計爲命令行界面。

+0

是的,myPlayList的初始功能是獲取您想在Spotify API中搜索哪個軌道的命令行參數。如果發出的命令沒有歌曲標題,則默認搜索The Sign。最後一個案例是我關注的焦點。當它被調用時,它應該查看文本文件併發出那裏應該搜索我想要的軌道的命令。這樣。 我不想發佈實際的作業指導,但可以,如果它會使事情更清晰。 – Matthew

+0

right - 參考我以前的評論 - 您的myPlayList函數不能使用除命令行參數以外的參數。所以你的解決方案是修改它以便這樣做 – Conan

+0

如果是這樣的話,比我感覺它仍然循環回到試圖訪問該文件並在其中發出命令。這裏是應該做什麼的指示... node liri.js spotify-this-song'<歌名在這裏>' *這將顯示以下有關您的終端/ bash窗口中歌曲的信息 * Artist (s) *歌曲的名字 *如果沒有提供歌曲,那麼您的節目將默認爲 *「The Sign」由Ace的基地 – Matthew

相關問題