2016-07-25 3 views
-1

私はnodejsを学習しています。 モバイルアップロードアルバムからすべての写真をダウンロードしようとしました。 グラフのapiに 'fb' npmモジュールを使用しました。私は25枚しか写真を撮っていませんが、私のアルバムには300枚以上の写真があります。 どのように写真を手に入れることができますか?ありがとうfb graph apiとnodejsを使って、Facebookのアルバムからすべての画像を取得できないのですか?

+1

を動作しませんでしたrequestモジュールのFacebookのAPIを使用してしまった

var _ = require('underscore'); var request = require('request'); var FB = require('fb'); var fs = require('fs'); var my_token = "xyz"; FB.setAccessToken(mt_token); var urls = []; FB.api('/me/albums','get', function (res) { if(!res || res.error) { console.log(!res ? 'error occurred' : res.error); return; } var data = _.findWhere(res.data, {name:"Mobile Uploads"}); FB.api('/'+data.id+'/photos', 'get', (resp) => { if(!resp || resp.error) { console.log(!resp ? 'error occurred' : resp.error); return; } resp.data.forEach(function(element) { urls.push(element.source); }); for(var i = 0;i<urls.length;i++){ request(urls[i]).pipe(fs.createWriteStream('img/'+i+'.jpg')); console.log("Downloaded : "+i+'.jpg'); } }); }); 

enter image description here はい確かにわずか25のフィールドが返されます。次のページを取得するには、前後にページングカーソルを使用して管理する必要があります。 – Thomi

+1

https://developers.facebook.com/docs/graph-api/using-graph-api/#paging – CBroe

+0

私はページングについて知らなかった。ありがとう – MaxySpark

答えて

0

は最終的にそれは私のため

function downloadLoop(urls) { 
      for(i;i<urls.length;i++){ 
       request(urls[i]).pipe(fs.createWriteStream('img/'+(i+1)+'.jpg')).on('finish', function(response) {   
        console.log("Download Completed : "+(++j)+'/'+i); 
        }); 

      } 
} 

function download(next) { 
     request({ 
      url: next, 
      json: true 
     }, function(err, res, body) { 
      if(err) throw err; 
      for (var i = 0; i < body.data.length; i++) { 
       urls.push(body.data[i].images[0].source);       
      } 
      console.log("getting images... Total Image : "+ urls.length); 
      if(body.paging && body.paging.next) { 
      download(body.paging.next); 

     } else { 
       console.log("Completed"); 
      } 
downloadLoop(urls); 
     }); 
} 

Github Link

関連する問題