/me/books.reads
返回书籍 [1] 。
它包括一系列书籍以及每本书的以下字段:
written_by
是现有的书籍字段。我试过了:
/me/books.reads?fields=data.fields(author)
要么
/me/books.reads?fields=data.fields(book.fields(author))
但错误响应是:
"Subfields are not supported by data"
books.reads
响应看起来像这样(只包含一本书):
{
"data": [
{
"id": "00000",
"from": {
"name": "User name",
"id": "11111"
},
"start_time": "2013-07-18T23:50:37+0000",
"publish_time": "2013-07-18T23:50:37+0000",
"application": {
"name": "Books",
"id": "174275722710475"
},
"data": {
"book": {
"id": "192511337557794",
"url": "https://www.facebook.com/pages/A-Semantic-Web-Primer/192511337557794",
"type": "books.book",
"title": "A Semantic Web Primer"
}
},
"type": "books.reads",
"no_feed_story": false,
"likes": {
"count": 0,
"can_like": true,
"user_likes": false
},
"comments": {
"count": 0,
"can_comment": true,
"comment_order": "chronological"
}
}
}
如果我获取一本书的ID,我可以从打开的图表中获取其元数据,例如http://graph.facebook.com/192511337557794返回如下内容:
{
"category": "Book",
"description": "\u003CP>The development of the Semantic Web...",
"genre": "Computers",
"is_community_page": true,
"is_published": true,
"talking_about_count": 0,
"were_here_count": 0,
"written_by": "Grigoris Antoniou, Paul Groth, Frank Van Harmelen",
"id": "192511337557794",
"name": "A Semantic Web Primer",
"link": "http://www.facebook.com/pages/A-Semantic-Web-Primer/192511337557794",
"likes": 1
}
回复包括~10个字段,包括written_by
,其中包含本书的作者。
奇怪的是,link
字段似乎映射到url
响应的books.reads
。但是,字段名称不同,所以我开始希望我能够在written_by
请求中询问books.reads
..
我发现/ me / books的唯一参考是https://developers.facebook.com/docs/reference/opengraph/object-type/books.book/
[1]我知道这要归功于How to get "read books"
答案 0 :(得分:0)
FQl看起来不太有希望 - 尽管你可以从books
表中请求user
,它似乎只提供一个字符串值,只有书名以逗号分隔。
您可以按page
搜索name
表 - 但我怀疑当子查询提供的只是一个格式为name in (subquery)
的字符串时,它将与'title 1,title 2,…'
一起使用。< / p>
现在无法真正测试这个,因为到目前为止我只读过一本书(啊,我在FB上设置的“我读过的书”,不是一般......) - 但是用它来搜索按名称的页面表已经提供了大量的页面,即使我将这个选项缩小了AND is_community_page=1
,我仍然会得到几个,所以没有真正说明哪个是正确的,我猜。
因此,使用Graph API和批处理请求似乎更有希望。
与FQL多查询类似,批处理请求还允许您批量引用先前“操作”中的数据,为操作提供“名称”,然后使用 JSONPath表达式格式(有关详细信息,请参阅Specifying dependencies between operations in the request。)
因此,对此的批量查询可能如下所示,
[
{"method":"GET","name":"get-books","relative_url":"me\/books?fields=id"},
{"method":"GET","relative_url":"?ids={result=get-books:$.data.*.id}
&fields=description,name,written_by"}
]
此处全部在一行中,以便于复制和粘贴,以便换行不会导致语法错误:
[{"method":"GET","name":"get-books","relative_url":"me\/books?fields=id"},{"method":"GET","relative_url":"?ids={result=get-books:$.data.*.id}&fields=description,name,written_by"}]
所以,测试一下:
转到Graph API Explorer
通过下拉菜单将方法更改为POST,并清除其旁边的字段中的任何内容
点击“添加字段”,然后输入名称batch
,并在值中插入行复制并从上方粘贴。
由于这也会为您提供许多您可能不感兴趣的“标题”,因此您可以添加一个字段,名称include_headers
和值false
以消除这些。
在结果中,您将获得一个名为body
的字段,其中包含第二个查询的JSON编码数据。如果您想要更多字段,请将它们添加到第二个查询的fields
参数中,或者如果您想要所有字段,请将该参数完全保留。
好的,经过一些反复试验后,我设法创建了一个direct link to Graph API Explorer to test this - 使用正确数量的网址编码有点狡猾地弄明白:-)
(我在这里省略了第二个操作的fields
参数,因此这将为您提供该书的所有信息。)
正如我所说,我只有一本关于FB的书,但这应该适用于拥有多本书的用户同样的方式(因为第二次操作只需要从第一次操作中获得许多ID)。
但我无法告诉你这对于很多书籍是如何工作的 - 当你设置一个高{{{}时,第二次操作可能会有多缓慢1}}为第一个。而且我也不知道这对于分页的行为方式,当limit
为用户提供大量书籍时,您可能会遇到这种情况。
但我认为这应该是一个很好的起点,你可以通过尝试更多数据的用户来解决问题。 HTH。
编辑:ISBN似乎不是图书社区页面信息的一部分,至少不是我检查的那些。而me/books
也是可选的 - 我的书没有它。因此,只有实际提供的信息才能获得。