有没有办法通过Facebook API分页?

时间:2016-01-06 14:27:59

标签: javascript facebook facebook-graph-api

我想从Facebook下载我的所有照片,并按照上传日期对其进行排序。好吧,没有第三方工具或Facebook使用日期,所以我编写了自己的应用程序。这是一个简单的应用程序,循环遍历相册并获取每张照片的url,created_time和Id,存储在一个数组中,然后将数组传递给控制器​​。控制器获取图像数据,将其转换为图像,然后保存到我的文件系统。

我花了半天的时间学习facebook api,了解他们将每张照片的照片数量限制为100张,我觉得600次请求每600秒。

我很满意每600秒600个请求的限制,因为我可以在几天的时间内获得前100个,然后是第二个,第三个,依此类推等等。但是,我的主要问题是知道从哪里开始和停止(以编程方式)。

到目前为止,这是我所拥有的,为了简洁而没有任何单一功能:

Javascript:

function getPhotos(callback) {
        var allPhotos = [];
        var accessToken = '';

        login(function (loginResponse) {
            accessToken = loginResponse.authResponse.accessToken || '';
            getAlbums(function (albumResponse) {
                var i, album, deferreds = {}, listOfDeferreds = [];
                for (i = 0; i < 1; i++) { //albumResponse.data.length
                    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);
                        downloadPhoto(allPhotos);
                    }
                }, function (error) {
                    if (callback) {
                        callback(allPhotos, error);
                    }
                });
            });
        });

function downloadPhoto(allPhotos) {
        $.ajax({
            url: '/home/download/',
            type: 'POST',
            data: { allPhotos: allPhotos },
            success: function() {
                //alert('success');
            },
            error: function() {
                alert('error');
            }
        });
    }

function getPhotosForAlbumId(albumId, callback) {
        FB.api(
            '/' + albumId + '/photos',
            { fields: 'id,created_time' },
            function(albumPhotosResponse) {
                if (callback) {
                    callback(albumId, albumPhotosResponse);
                }
            }
        );
    }

控制器:

public ActionResult Download(List<Photo> allPhotos)
    {
        if (allPhotos != null)
        {
            var i = 0;
            foreach (var photo in allPhotos)
            {
                using (WebClient webClient = new WebClient())
                {
                    byte[] data = webClient.DownloadData(photo.url);

                    using (MemoryStream mem = new MemoryStream(data))
                    {
                        using (var yourImage = Image.FromStream(mem))
                        {
                            // If you want it as Png
                            //yourImage.Save("path_to_your_file.png", ImageFormat.Png);

                            // If you want it as Jpeg
                            string x = @"C:\Users\xxxx\Pictures\" + photo.added.ToString("yyyyMMddHHmmss") + "_" + i + ".jpg";
                            yourImage.Save(x, ImageFormat.Jpeg);
                            i++;
                        }
                    }

                }
            }
        }
        return Json(new { success = true });
    }

0 个答案:

没有答案