请帮我向Facebook api提出正确的请求。现在我有了:
https://graph.facebook.com/me/albums?fields=photos
结果我得到了非常大的Json,有很多不必要的信息。我试着做这样的事情:
https://graph.facebook.com/me/albums?fields=photos?fields=source,name,id
或者像这样:
https://graph.facebook.com/me/albums?fields=photos&fields=source,name,id
但是graph api explorer,返回了相同的大回复,或者我发现了一个错误。 任何想法如何只用必要的信息做更紧凑的响应?
答案 0 :(得分:28)
实际上有一种更好的方法来实现这一点,嵌套请求
将相册作为参数传递,然后从您想要的连接照片中过滤字段,例如,此处我从相册和照片中获得了所需的一切,此结果也可能有限
me?fields=albums.fields(id,name,cover_photo,photos.fields(name,picture,source))
答案 1 :(得分:10)
您只能将fields
与对象存在的属性一起使用。
通过向下一个网址发出GET请求,您只会获得相册ID列表:
https://graph.facebook.com/me/albums?fields=id&access_token=...
通过在FQL
表上运行下一个album
查询,可以实现同样的效果:
SELECT aid FROM album WHERE owner=me()
实际上albums
的{{1}}连接并不真正包含photo
个对象的列表,而是album
(具有user
个连接的对象)。因此,要获得用户拥有的照片,您需要遍历其所有对象并获取每张专辑的照片。您可以再次使用photos
参数来限制结果数据。如果使用batch requests,则可以更快地完成此操作。
或使用FQL
可以这样做(涉及两个表photo
和album
):
fields
答案 2 :(得分:3)
另一种可能的解决方案是首先获取专辑ID,然后对其进行迭代以进行此API调用:
<ALBUM-ID>/photos?fields=name,source,id
我在图形浏览器中对此进行了测试,并检索了一个合理的(可读的)json对象
答案 3 :(得分:2)
对于照片网址:
确保您是Facebook页面的管理员。
在API Navigator中,您可以看到“/ me”会显示您自己的基本信息。
尝试输入“/ me / accounts”以查看是否可以看到任何内容。它应该给你一个错误。
点击“获取访问令牌”
会弹出一个窗口。导航到“扩展权限”
选择“manage_pages”
点击“获取访问令牌”
现在再次尝试“/ me / accounts”。您应该在查看窗口中看到一个组列表。
选择您想要的页面,然后单击“id”字段
接下来,在左侧窗口中,您可以看到“节点:”和+号。单击+号以查看您有哪些选项。
点击+号并向下滚动到“连接”并选择“相册”
儿童级别,选择“照片”
“照片”子级别,选择“来源”
现在点击右侧的“提交”。您将看到与Facebook页面中所有照片的网址一起返回的JSON。
复制网址 - https://graph.facebook.com/?fields = albums.fields(photos.fields(source))并将其插入浏览器。您应该看到所有照片的JSON。
答案 4 :(得分:2)
每张专辑都是像facebook中的用户对象一样的对象,要获取该特定专辑中的照片,您必须要求下面的内容
http://graph.facebook.com/{ALBUM_ID}?fields=photos&access_token="xxxxx"
答案 5 :(得分:1)
获取专辑列表类型:
me?fields=albums
之后的类型:
album_id/photos?fields=source
获取该特定专辑的照片
答案 6 :(得分:1)
function showMsg(id) {
if(!id){
return false
}
//doing some task
return id;
}
console.log(showMsg('hi')) //with argument
console.log(showMsg()) //without argument
它会显示包含说明的相册和该相册不同分辨率的照片。
这需要访问令牌
答案 7 :(得分:0)
为什么数据不必要?它是否会返回这样的内容:
{
"data": [
{
"id": "ID",
"from": {
"name": "Hadrian de Oliveira",
"id": "100000238267321"
},
"name": "Cover Photos",
"link": "https://www.facebook.com/album.php?fbid=FBID&id=ID&aid=AID",
"cover_photo": "ID",
"privacy": "everyone",
"count": 2,
"type": "normal",
"created_time": "2011-10-06T01:31:24+0000",
"updated_time": "2012-02-22T17:29:50+0000",
"can_upload": false
},
答案 8 :(得分:0)
获取ALBUM_ID
if((FBSDKAccessToken.current()) != nil)
{
FBSDKGraphRequest(graphPath: "me/albums", parameters: ["fields" : "id"], httpMethod: "GET").start(completionHandler: { (connection, result, error) -> Void in
if (error == nil)
{
let data:[String:AnyObject] = result as! [String : AnyObject]
self.arrdata = data["data"]?.value(forKey: "id") as! [String ]
}
})
}
使用上面的代码,您将获得album_Id,然后使用该ID,我们可以获得如下图像: 从ALBUM_ID获取图像
FBSDKGraphRequest(graphPath: "\(album_Id)/photos", parameters: ["fields": "source"], httpMethod: "GET").start(completionHandler: { (connection, result1, error) -> Void in
if (error == nil)
{
let data1:[String:AnyObject] = result1 as! [String : AnyObject]
let arrdata:[String] = data1["data"]?.value(forKey: "source") as! [String ]
for item in arrdata
{
let url = NSURL(string: item )
let imageData = NSData(contentsOf: url! as URL)
let image = UIImage(data: imageData! as Data)
self.imgArr.append(image!)
}
}
})
答案 9 :(得分:0)
loginButton.setReadPermissions(“public_profile”,“email”,“user_friends”,“user_photos”);
此要求必须
答案 10 :(得分:0)
用于 Swift 5
首先获得这样的相册ID
func getAlbumsData()
{
GraphRequest.init(graphPath: "me", parameters: ["fields":"id,name,albums{name,picture}"]).start(completionHandler: { (connection, userResult, error) in
if error != nil {
print("error occured \(String(describing: error?.localizedDescription))")
}
else if userResult != nil {
print("Login with FB is success")
print()
let fbResult:[String:AnyObject] = userResult as! [String : AnyObject]
self.albumsPhotos = (fbResult["albums"] as! [String:AnyObject])["data"] as? [[String:AnyObject]]
self.tblFbAlbums.reloadData()
}
})
}
然后使用此方法获取相册图片
func fetchalbumsPhotosWithID() {
let graphRequest : GraphRequest = GraphRequest(graphPath: "\(album_Id)/photos", parameters: ["fields": "source"] )
graphRequest.start(completionHandler: { (connection, result, error) -> Void in
if ((error) != nil)
{
// Process error
print("Error: \(error)")
}
else
{
print("fetched user: \(result)")
let data = result as! [String:Any]
}
})
}
专辑编号是您从getAlbumsData()获得的数字
答案 11 :(得分:-1)
for android
new GraphRequest(
facebookToken,
String.format("/%s/photos", idAlbum),
parameters,
HttpMethod.GET,
response -> {
try {
JSONArray photoArray = response.getJSONObject().getJSONArray("data");
photosAlbumAfterPagination = response.getJSONObject().getJSONObject("paging").getJSONObject("cursors").getString("after");
Gson gson = new Gson();
Type type = new TypeToken<List<FacebookPhotoResponse>>() {
}.getType();
List<FacebookPhotoResponse> list = gson.fromJson(photoArray.toString(), type);
} catch (JSONException e) {
e.printStackTrace();
}
}
).executeAsync();