2016-05-10 4 views
-2

Ich verwende diesen Code, um Bilder der Benutzergalerie auf meiner Website zu speichern. Zuerst, wenn der Benutzer sich anmeldet, werden alle Bilder der Galerie geladen und wenn der Benutzer ein Bild auswählt, muss ich das Bild in einem Verzeichnis speichern. Das ist mein Code. Bild speichert mit dem Namen, aber die Bildgröße ist Null.Wie man facebook Benutzergaleriebild von URL zu Verzeichnis speichert?

$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); 

Dies ist der Code der Bildergalerie.

<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

Haben Sie versucht zu identifizieren, ob Sie etwas in $ Datei haben? Und was hat FB dir angetan? – xAqweRx

+0

Was ist '$ target_dir'? Verfügen Sie über Schreibrechte für das Verzeichnis, in dem Sie das Foto speichern möchten? Haben Sie die richtige '[Fb-Photo-ID]' und '[Access-Token]'? –

+0

Es zeigt nichts, wenn ich versuchte, $ Datei zu drucken. –

Antwort

0

Das Problem ist, dass Sie FB API in falscher Weise verwenden.

  1. sollten Sie haben Version Ihrer API-Anfrage
  2. Check access_token -> ob es richtig wright (user_photos)
  3. in einer solchen Art und Weise der Anfrage hat Sie nicht Bildinhalt erhalten. Sie können nur Links auf statische Bilder erhalten. dies wird zurückkehren JSON-Daten Art

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

    : -

  4. Also erst nach dem Bildempfang können Sie es

Ihr Link sein wie speichern sollte

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

read more here und Sie können zusätzliche Parameter für Daumen hinzufügen (aka "Bilder")

UPDATE

so im Weg würde es sein:

$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); 

ODER FB PHP SDK


UPDATE # 2

verwenden Wenn Sie empfangen Statische Verbindung zum Bild von JS => benutze es einfach, nicht die graphApi Anfrage. Es bedeutet, dass Sie bereits empfangene LINKS zur Serverseite SENDEN können. Und sie sollten wie https://scontent.xx.fbcdn.net/XXXXXX sein und nach dem Empfang auf der Serverseite können Sie sie einfach verwenden. und machen

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

Aber Link sollte nicht auf http://graph.facebook.com!


UPDATE 3

Ja, es ist richtig Anfrage (von) versteigert werden. JS-Code für Bilder mit statischem Pfad:

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); 
      } 
}); 

den Pfad von dort für Bild analysieren.

+0

Ich habe meinen JavaScript-Code auch hinzugefügt. Ich bekomme Bild-URL mit AccessStoken und Facebook ID. –

+0

@php_dev Wie ist Ihr JS mit PHP verbunden? – xAqweRx

+0

Wenn alle Bilder auf den Klick eines Bildes kommen, speichere ich den Wert im Eingangstyp und wenn der Benutzer das Formular abschickt, dann bekomme ich die Bild-URL. –

Verwandte Themen