/{user}/books.reads的附加字段(作者,isbn)

时间:2014-03-08 22:07:22

标签: facebook facebook-graph-api

简介

/me/books.reads返回书籍 [1]

它包括一系列书籍以及每本书的以下字段:

  • 标题
  • ID
  • URL

问题

  1. 我想至少得到作者姓名。我知道written_by是现有的书籍字段。
  2. 如果可能,我想获得ISBN。
  3. 现状

    我试过了:

    /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"

1 个答案:

答案 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也是可选的 - 我的书没有它。因此,只有实际提供的信息才能获得。