如何将facebook用户图库图像从url保存到目录


How to save facebook user gallery image from url to directory?

我正在使用此代码将用户图库图像保存在我的网站上。首先,当用户登录时,加载所有图库图像,当用户选择任何图像时,我需要将该图像保存在目录中。这是我的密码。正在使用名称保存图像,但图像大小为零。

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

问题是您使用FB API的方式不正确。

  1. 您应该拥有API请求的版本
  2. 检查access_token->是否有正确的wright(user_photos)
  3. 通过这种方式的请求,您将不会收到图像内容。您只能接收静态图像上的链接
  4. 因此,只有在收到图像后才能保存

你的链接应该是这样的:

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]"
  }
}

在这里阅读更多,你可以为拇指(又名"图像")添加额外的参数


更新

所以按照你的方式,它会是这样的:

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

或者使用FB PHP SDK


更新#2

如果您从JS=>收到到图像的静态链接,请使用它,而不是graphApi请求。这意味着您可以向服务器端发送已接收链接。他们应该像https://scontent.xx.fbcdn.net/XXXXXX在服务器端收到它们之后,您就可以直接使用它们了。并制作

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

但链接不应打开http://graph.facebook.com!


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

从那里解析图像的路径。