2017-07-03 5 views
0

こんにちは私のコードに小さなエラーがあります。コードに3つの関数があります。私はdownloadCSV関数からvideoidを取得したいのですが、私は同じvideoidをdownloadCSVVV関数に渡して取得する必要があります特定のビデオid.SOのすべてのコメントは、私はグローバル変数を宣言し、私はそれを渡している最初の関数は、downloadCSV function.NOw私はdownloadCSVVV関数で同じvideoidを渡している、私は取得している値その変数は定義されていません。あなたはこのうちから私を助けてもらえますか?下は私のコードです。RestAPIに変数を渡す

<!doctype html> 
<html> 

<head> 
    <script type="text/javascript" src="http://code.jquery.com/jquery-1.7.1.min.js"></script> 
</head> 

<body> 
    <a href='#' onclick='downloadCSV({ filename: "a.csv" }); downloadCSVV({ filename1:"b.csv"}); downloadCSVVV({ filename2:"c.csv"});'>Download CSV</a> 

    <script type="text/javascript"> 
     $(document).ready(function() {}); 
     var videos = []; 
     function convertArrayOfObjectsToCSV(args) { 
      var result, ctr, keys, columnDelimiter, lineDelimiter, data; 
      console.log("vid"+videos); 
      data = args.data || null; 
      if (data == null || !data.length) { 
       return null; 
      } 
      columnDelimiter = args.columnDelimiter || ','; 
      lineDelimiter = args.lineDelimiter || '\n'; 
      keys = Object.keys(data[0]); 
      result = ''; 
      result += keys.join(columnDelimiter); 
      result += lineDelimiter; 
      data.forEach(function(item) { 
       ctr = 0; 
       keys.forEach(function(key) { 
        if (ctr > 0) result += columnDelimiter; 
        result += item[key]; 
        ctr++; 
        console.log("columnDelimiter " + result); 
       }); 
       result += lineDelimiter; 
      }); 
      return result; 

     } 

     function downloadCSV(args) { 
       var youtubeData = []; 
      var data, filename, link,videos; 

      $.getJSON('https://www.googleapis.com/youtube/v3/search?part=snippet&q=laptops&maxResults=50&key=""', function(data) { 

       for(var i = 0; i < data.items.length; i++) { 
        videos = data.items[i].id.videoId; 

       youtubeData.push({ 
        "videoid": videos , 
        "Title": data.items[i].snippet.title 
       }); 
      } 
       var csv = convertArrayOfObjectsToCSV({ 
        data: youtubeData 
       }); 
       if (csv == null) return; 

       filename = args.filename || 'export.csv'; 

       if (!csv.match(/^data:text\/csv/i)) { 
        csv = 'data:text/csv;charset=utf-8,' + csv; 
       } 
       data = encodeURI(csv); 

       link = document.createElement('a'); 
       link.setAttribute('href', data); 
       link.setAttribute('download', filename); 
       link.click(); 
      }); 
     } 


     function downloadCSVVV(args) { 
      var items = []; 
      var youtubeData2 = []; 
      var data2, filename2, link,videos; 
      $.getJSON('https://www.googleapis.com/youtube/v3/commentThreads?key=""&textFormat=plainText&part=snippet,replies&videoId='+videos+'&maxResults=60', function(data2) { 
       for(var i = 0; i < data2.items.length; i++) { 
       youtubeData2.push({ 
        "videoid": data2.items[i].snippet.topLevelComment.snippet.videoId, 
        // "videoid": videos[0], 
        "Authordisplayname": data2.items[i].snippet.topLevelComment.snippet.authorDisplayName, 
        "Textdisplay": data2.items[i].snippet.topLevelComment.snippet.textDisplay, 
       }); 
       } 

       console.log(data2); 
       var csv = convertArrayOfObjectsToCSV({ 
        data: youtubeData2 
       }); 
       if (csv == null) return; 

       filename2 = args.filename2 || 'export.csv'; 

       if (!csv.match(/^data:text\/csv/i)) { 
        csv = 'data:text/csv;charset=utf-8,' + csv; 
       } 
       data2 = encodeURI(csv); 

       link = document.createElement('a'); 
       link.setAttribute('href', data2); 
       link.setAttribute('download', filename2); 
       link.click(); 
      }); 
     } 


     function downloadCSVV(args) { 
       var youtubeData1 = []; 
      var data1, filename1, link; 

      $.getJSON('https://www.googleapis.com/youtube/v3/videos?id=kmJM7Z6_DEw,zsvLai5jxCs,N9uMFDotJPg,OlTH_XPlFrw&key=""&part=snippet,statistics', function(data1) { 
       console.log(data1); 
       for(var i = 0; i < data1.items.length; i++) { 
       youtubeData1.push({ 
        "videoid": data1.items[i].id, 
        "Id": data1.items[i].snippet.categoryId, 
        "ChannelId": data1.items[i].snippet.channelId, 
        "Title": data1.items[i].snippet.title, 
        // "Description": data.items[i].snippet.description.replace("\n", ""), 
        "Commentcount": data1.items[i].statistics.commentCount, 
        "ViewCount": data1.items[i].statistics.viewCount, 
        "LikeCount": data1.items[i].statistics.likeCount, 
        "DislikeCount": data1.items[i].statistics.dislikeCount, 
        "FavoriteCount": data1.items[i].statistics.favoriteCount 
       }); 
      } 
       var csv = convertArrayOfObjectsToCSV({ 
        data: youtubeData1 
       }); 
       if (csv == null) return; 

       filename1 = args.filename1 || 'export.csv'; 

       if (!csv.match(/^data:text\/csv/i)) { 
        csv = 'data:text/csv;charset=utf-8,' + csv; 
       } 
       data1 = encodeURI(csv); 

       link = document.createElement('a'); 
       link.setAttribute('href', data1); 
       link.setAttribute('download', filename1); 
       link.click(); 
      }); 
     } 







    </script> 
</body> 

</html> 

答えて

0

あなたは別の1つの関数から呼び出し最初の1等からの第2の機能を値を渡したい場合は、同時にすべての機能を呼び出さないでください

HTML:

<a href='#' onclick='downloadCSV({ filename: "a.csv" });'>Download CSV</a> 

JS:

function downloadCSV(args) { 
    var youtubeData = []; 
    var data, filename, link,videos; 

    $.getJSON('https://www.googleapis.com/youtube/v3/search?part=snippet&q=laptops&maxResults=50&key=""', function(data) { 
     for(var i = 0; i < data.items.length; i++) { 
      videos = data.items[i].id.videoId; 
      youtubeData.push({ 
       "videoid": videos , 
       "Title": data.items[i].snippet.title 
      }); 
      // calling the dependent functions here 
      downloadCSVV({ filename1:"b.csv"},videos); 
      downloadCSVVV({ filename2:"c.csv"},videos); 

     } 
     var csv = convertArrayOfObjectsToCSV({ 
      data: youtubeData 
     }); 
     if (csv == null) return; 

     filename = args.filename || 'export.csv'; 

     if (!csv.match(/^data:text\/csv/i)) { 
      csv = 'data:text/csv;charset=utf-8,' + csv; 
     } 
     data = encodeURI(csv); 

     link = document.createElement('a'); 
     link.setAttribute('href', data); 
     link.setAttribute('download', filename); 
     link.click(); 
    }); 
} 

function downloadCSVV(args,videos){ 
    // your code 
    // now use videos here 
} 

function downloadCSVVV(args,videos){ 
    // your code 
    // now use videos here 
} 

注複数のビデオ-IDの

var videoIdArr=[]; 
for(var i = 0; i < data.items.length; i++) { 
    videos = data.items[i].id.videoId; 
    youtubeData.push({ 
     "videoid": videos , 
     "Title": data.items[i].snippet.title 
    }); 
    videoIdArr.push(videos); 
} 
// calling the dependent functions here with video is array 
downloadCSVV({ filename1:"b.csv"},videoIdArr); 
downloadCSVVV({ filename2:"c.csv"},videoIdArr); 

を更新:私は、これはサポートしていませんGoogleAPIs IDを動作することを確認していません。

+0

コードは動作していますが、100個のファイルがダウンロードされています。なぜか分かりませんか? –

+0

はい、あなたはループの中でダウンロード機能を保ちました。今、私はループの外にいました。今はうまくいきます。おかげです。 –

+0

はい、あなたはそれぞれの 'video-id'反復と私はその論理についてはありません。 –