2016-05-10 10 views
-2

私はこのコードを使用して私のウェブサイトにユーザーギャラリーの画像を保存しています。ユーザーがログインしてからすべてのギャラリー画像がロードされ、ユーザーが画像を選択すると、その画像をディレクトリに保存する必要があります。これは私のコードです。画像は名前とともに保存されていますが、画像サイズはゼロです。URLからfacebookユーザーギャラリー画像をディレクトリに保存する方法は?

$file = file_get_contents('https://graph.facebook.com/[Fb-Photo-ID]/picture?width=378&height=378&access_token=[Access-Token]');  
$img = file_put_contents($target_dir['path'].'/'."facebook3.jpg",$file); 

これはイメージギャラリーのコードです。

<script> 
     /** 
     * This is the getPhoto library 
     */ 

     function makeFacebookPhotoURL(id, accessToken) { 
      //alert(id); 
      return 'https://graph.facebook.com/v2.6/' + id + '/picture?access_token=' + accessToken; 
     } 

     function login(callback) { 
      FB.login(function(response) { 
       if (response.authResponse) { 
        console.log('Welcome! Fetching your information.... '); 
        if (callback) { 
         callback(response); 
        } 
       } else { 
        console.log('User cancelled login or did not fully authorize.'); 
       } 
      },{scope: 'publish_actions,user_location,user_photos,email'}); 
     } 
     function getAlbums(callback) { 
      FB.api(
        '/me/albums', 
        {fields: 'id,cover_photo'}, 
        function(albumResponse) { 
         console.log(' got albums '); 
         if (callback) { 
          callback(albumResponse); 
          console.log(albumResponse); 
         } 
        } 
       ); 

     } 

     function getPhotosForAlbumId(albumId, callback) { 
        //alert(albumId); 
        console.log(albumId); 
      FB.api(
        '/'+albumId+'/photos', 
        {fields: 'id'}, 
        function(albumPhotosResponse) { 
         console.log(' got photos for album ' + albumId); 
         if (callback) { 
          callback(albumId, albumPhotosResponse); 

         } 
        } 
       ); 
     } 

     function getLikesForPhotoId(photoId, callback) { 
      FB.api(
        '/'+albumId+'/photos/'+photoId+'/likes', 
        {}, 
        function(photoLikesResponse) { 
        console.log(photoLikesResponse); 
         if (callback) { 

          callback(photoId, photoLikesResponse); 
         } 
        } 
       ); 
     } 

     function getPhotos(callback) { 

      var allPhotos = []; 

      var accessToken = ''; 

      login(function(loginResponse) { 
        accessToken = loginResponse.authResponse.accessToken || ''; 
        //console.log(accessToken); 
        getAlbums(function(albumResponse) { 
          var i, album, deferreds = {}, listOfDeferreds = []; 

          for (i = 0; i < albumResponse.data.length; i++) { 
           album = albumResponse.data[i]; 

           deferreds[album.id] = $.Deferred(); 
           listOfDeferreds.push(deferreds[album.id]); 
           getPhotosForAlbumId(album.id, function(albumId, albumPhotosResponse) { 
             var i, facebookPhoto; 
             for (i = 0; i < albumPhotosResponse.data.length; i++) { 
              facebookPhoto = albumPhotosResponse.data[i]; 
              allPhotos.push({ 
               /* 'id' : facebookPhoto.id, 
               'added' : facebookPhoto.created_time, */ 
               'url' : makeFacebookPhotoURL(facebookPhoto.id, accessToken) 
              }); 
             } 
             deferreds[albumId].resolve(); 
            }); 
          } 

          $.when.apply($, listOfDeferreds).then(function() { 
           if (callback) { 
            callback(allPhotos); 

           } 
          }, function(error) { 
           if (callback) { 
            callback(allPhotos, error); 
           } 
          }); 
         }); 
       }); 
     } 
    </script> 

    <script> 
     /** 
     * This is the bootstrap/app script 
     */ 

     // wait for DOM and facebook auth 
     var docReady = $.Deferred(); 
     var facebookReady = $.Deferred(); 

     $(document).ready(docReady.resolve); 

     window.fbAsyncInit = function() { 
      FB.init({ 
       appId  : '00000000000', 
       channelUrl : '//conor.lavos.local/channel.html', 
       status  : true, 
       cookie  : true, 
       xfbml  : true 
      }); 
      facebookReady.resolve(); 
     }; 

     $.when(docReady, facebookReady).then(function() { 
      if (typeof getPhotos !== 'undefined') { 
       getPhotos(function(photos) { 
        //console.log(photos); 
        var str= JSON.stringify(photos); 

        var contact=jQuery.parseJSON(str); 

        $.each(photos, function(index, value){ 
         $.each(value, function(index1, value1){ 

          console.log(value); 
            //console.log(index1+value1); 
            //console.log(index1+value1); 
            //console.log(index1+value1); 

         $("#images").append('<a href="javascript:;" class="myimg"><img height="100" width="150" src='+value1+' /></a>'); 

$("a.myimg img").click(function() 
        { 
         var imgSrc = $(this).attr('src'); 

         $("#fbimg").val(imgSrc); 

        }); 


           }); 
           }); 

       }); 
      } 
     }); 

    </script> 
+0

$ファイル内に何かがあるかどうかを確認しようとしましたか? FBに何が返ってきたのですか? – xAqweRx

+0

'$ target_dir'とは何ですか?写真を保存するディレクトリに書き込み権限がありますか?あなたは正しい[Fb-Photo-ID]と '[Access-Token]'を持っていますか? –

+0

$ファイルを印刷しようとしたときに何も表示されません。 –

答えて

0

FB APIを正しく使用していないという問題があります。あなたがイメージコンテンツを受信しません要求のように>それは正しいライト(user_photos)を持っているかどうか

  • -

    1. あなたは
    2. チェックaccess_tokenはあなたのAPIリクエストのバージョンを持っている必要があります。静的画像のリンクのみを受信できます。
    3. ので、画像のみの受信後に - あなたは

    あなたのリンクがあるべきそれを保存することができますように:

    https://graph.facebook.com/v2.6/[photo_Id]/picture?access_token=[access_token_with_wrights] 
    

    この返されたJSONデータの種類の:

    { 
        "data": { 
        "is_silhouette": false, 
        "url": "https://scontent.xx.fbcdn.net/[image_url]" 
        } 
    } 
    

    read more hereと親指用のパラメータを追加できます(別名「画像」)


    UPDATE

    ので、あなたのように、それは次のようになります:

    $jsonstring = json_decode(file_get_contents("https://graph.facebook.com/v2.6/[photo_Id]?fields=picture,images&access_token=[access_token_with_wrights] 
    ")); 
    
    $file = file_get_contents($jsonstring['images'][0]['source']) /* chose your size */ 
    $img = file_put_contents($target_dir['path'].'/'."facebook3.jpg",$file); 
    

    ORあなたが受け取った場合FB PHP SDK


    UPDATE#2

    を使用JSからの画像への静的リンク=> graphApiリクエストではなく、単にそれを使用します。つまり、サーバー側にが既に届きました。が届きました。そして、彼らはhttps://scontent.xx.fbcdn.net/XXXXXXのようになり、サーバー側で受信した後、それらを使うことができます。そして

    $file = file_get_contents("https://scontent.xx.fbcdn.net/"); 
    

    を作るしかし、リンクがhttp://graph.facebook.comにすべきではありません!


    UPDATE 3

    はい、それは(質問から)正しい要求です。静的経路を有する画像について JSコード:

    FB.api(
         '/' + albumId + '/photos', 
         { fields: 'id,images' }, /* main is images array in response */ 
         function (albumPhotosResponse) { 
          console.log(' got photos for album ' + albumId); 
          if (callback) { 
            callback(albumId, albumPhotosResponse); 
          } 
    }); 
    

    がそこから画像のパスを解析します。

  • +0

    私はjavascriptコードも追加しました。私はaccesstokenとfacebook idでイメージURLを取得しています。 –

    +0

    @php_dev JSとPHPの関係 – xAqweRx

    +0

    すべての画像が画像上でクリックされたとき入力値にその値を保存していて、ユーザーがフォームを送信したときにその入力タイプで画像URLを取得しています。 –

    関連する問題