Javascript 有没有一种方法可以通过Facebook的API来翻页照片?
我想从Facebook上下载我所有的照片,并按上传日期排序。嗯,没有第三方工具或Facebook使用日期,所以我写了自己的应用程序。它是一个简单的应用程序,可以循环浏览相册,获取每个照片的url、创建时间和Id,存储在一个数组中,然后将数组传递给控制器。控制器获取图片数据,将其转换为图像,然后保存到我的文件系统 我花了半天时间学习facebook api,了解到他们将每次通话的照片数量限制在100张,我认为每600秒有600个请求 我可以接受每600秒600个请求的限制,因为我可以在几天内得到前100个,然后是第二个,第三个,等等。然而,我的主要问题是知道从哪里开始和停止(以编程方式) 这就是我到目前为止所做的,为了简洁起见,没有任何一个函数: Javascript:Javascript 有没有一种方法可以通过Facebook的API来翻页照片?,javascript,facebook,facebook-graph-api,Javascript,Facebook,Facebook Graph Api,我想从Facebook上下载我所有的照片,并按上传日期排序。嗯,没有第三方工具或Facebook使用日期,所以我写了自己的应用程序。它是一个简单的应用程序,可以循环浏览相册,获取每个照片的url、创建时间和Id,存储在一个数组中,然后将数组传递给控制器。控制器获取图片数据,将其转换为图像,然后保存到我的文件系统 我花了半天时间学习facebook api,了解到他们将每次通话的照片数量限制在100张,我认为每600秒有600个请求 我可以接受每600秒600个请求的限制,因为我可以在几天内得到前
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);
}
}
);
}
函数getPhotos(回调){
var-allPhotos=[];
var accessToken='';
登录(功能(loginResponse){
accessToken=loginResponse.authResponse.accessToken | |“”;
getAlbums(函数(albumResponse){
变量i,相册,延迟={},listOfDeferreds=[];
对于(i=0;i<1;i++){//albumResponse.data.length
album=albumResponse.data[i];
延迟[album.id]=$.Deferred();
listOfDeferreds.push(延迟[album.id]);
getPhotosForAlbumId(album.id,函数(albumId,albumPhotosResponse){
var i,facebookPhoto;
对于(i=0;ipublic 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 });
}
公共行动结果下载(列出所有照片)
{
如果(所有照片!=null)
{
var i=0;
foreach(所有照片中的var照片)
{
使用(WebClient WebClient=new WebClient())
{
byte[]data=webClient.DownloadData(photo.url);
使用(MemoryStream mem=新的MemoryStream(数据))
{
使用(var yourImage=Image.FromStream(mem))
{
//如果你想把它变成Png
//Save(“path_to_your_file.png”,ImageFormat.png);
//如果你想要它的Jpeg格式
字符串x=@“C:\Users\xxxx\Pictures\”+photo.added.ToString(“yyyyMMddHHmmss”)+““+i+”.jpg”;
保存(x,ImageFormat.Jpeg);
i++;
}
}
}
}
}
返回Json(新的{success=true});
}
您应该使用API响应中提供的分页URL。请求“上一个”一个,直到没有更多数据为止。我从相册响应中获取了分页数据,但不是相册中的照片。请检查何时不再获取“下一个”分页链接,或者数据数组为空。您应该使用API响应中提供的分页URL。请求“上一个”一个,直到没有更多的数据为止。我从相册响应中获得了分页数据,但不是相册中的照片。请检查何时不再获得“下一个”分页链接,或者数据数组为空。