我想从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 });
}