JSON API

如果博客用在其他非WordPress的平台,或者使用静态化的插件,例如:WP-SuperCache,你又想让得到 WordPress 动态化的讯息、内容、文章。解决方法有2个或者更多:

  1. 使用 AJAX(异步的JavaScript与XML技术)
  2. 使用更好的服务器,资源多了,就可以省掉或者减少缓存插件的刷新时间间隔

第二个的解决方案太贵了,我们可以尝试第一个方案。我们只需要 WordPress 插件:JSON API,和一些 Javascript 知识。

下载插件:JSON API

名副其实,提供 WordPress 的应用程序接口(API)并用 JSON 格式输出(真确来说,应该是 REST 架构

使用

启用插件后,到后台 > 设置 > JSON API

根据个人需要,启动不同的控制器。

  • Posts – 创建、更新或者删除文章
  • Core – 提供基本需求:分类/标签/作者/日期索引、最近的文章、搜索结果
  • Widgets – 取回侧边栏小部件
  • Respond – 评论/引用

API 地址,默认是http://博客网址/api/

输入 http://博客网址/api/info/ 可以看到下面的返回的 JSON

{
    "status": "ok",
    "json_api_version": "1.1.1",
    "controllers": ["core"]
}

上面的例子是个友好的永久链接。另外还有,`隐式模式`或者`明确模式`来调用 API。

隐式模式 / Implicit mode

任何的网址后面添加?json=1 就可以让当前页/文章用 JSON 格式输出

例如:

  • http://www.example.org/?json=1
  • http://www.example.org/?p=47&json=1
  • http://www.example.org/tag/banana/?json=1

明确模式 / Explicit mode

  • 最近的文章 http://www.example.org/?json=get_recent_posts
  • 取回 ID = 47 的文章 http://www.example.org/?json=get_post&post_id=47
  • 取回 tag = banana 的文章 http://www.example.org/?json=get_tag_posts&tag_slug=banana

进阶操作 – 获取最新的文章

如果你在游览器打开这个网址 http://博客网址/api/get_recent_posts/,你就会看到下面

{
  "status": "ok",
  "count": 10,
  "count_total": 79,
  "pages": 7,
  "posts": [
    { ... },
    { ... },
    ...
  ]
}

返回了 79 篇文章,目前显示 10 篇,一共有 7 页

参数

  • count – 确定每页返回多少帖子(默认值是10)
  • page – 指定返回那一页
  • post_type – 用于取回自定义文章类型,默认:post

例子:

  • 每页返回 20篇文章:.../api/get_recent_posts/?count=20
  • 返回第5页:.../api/get_recent_posts/?page=5

默认返回的对象太多了

id, type, slug, url, title, title_plain, content, excerpt, date, modified, categories, tags, author, comments, attachments, comment_count, comment_status, thumnail, custom_fields....

我们可以用 include 或者 exclude 这些请求参数来限制一下返回的资料。究竟什么内容能 inlcude 或者 exclude,可以查看插件官方文件 – 响应对象

例如:

我们只想要文章的标题和URL,我们可以这样:.../api/get_recent_posts/?include=title,url

{
    "status": "ok",
    "count": 4,
    "count_total": 40,
    "pages": 14,
    "posts": [{
        "id": 1241,
        "url": "http:\/\/localhost\/2012\/01\/template-sticky\/",
        "title": "Template: Sticky"
    }, {
        "id": 1865,
        "url": "http:\/\/localhost\/2013\/09\/read-more\/",
        "title": "Read More"
    }, {
        "id": 1178,
        "url": "http:\/\/localhost\/2013\/01\/markup-html-tags-and-formatting\/",
        "title": "Markup: HTML Tags and Formatting"
    }, {
        "id": 1177,
        "url": "http:\/\/localhost\/2013\/01\/markup-image-alignment\/",
        "title": "Markup: Image Alignment"
    }]
}

JSON API 太强大了,还有很多高级的API没写到,我也不太知道怎样运用……

其他 API 的插件
* JetPack
* JSON REST API

JetPack 使用 WordPress 的 cdn,有可能访问不了。第二款的还在开发中,听说将来会加到 WordPress 内核,返回的对象跟 JetPack 一样多。但是 JSON API 是博客本身输出,可靠稳定。

Published by

Galovia

九十度博客站长。

5 thoughts on “JSON API”

    1. Garth, 提交评论需要开启评论控制器和下面4个条件

      1. post_id(文章 ID)
      2. name(名称)
      3. email
      4. content(评论内容)

      jQuery 可以很容易得到这些东西的,方法就跳过了.

      提交评论的操作方法跟 GET recentpost 一样,访问 API 网址

      http://博客网址/api/respond/submit_comment/?post_id=123456789&name=ABC&email=ABC@EXAMPLE.COM&content=MY CONTENT GOES HERE

      一切正常的话,就返回一些 JSON对象

      
      // 评论需要等待审核
      {
          "status": "pending",
          "id": 156,
          "name": "admin",
          "url": "http:\/\/localhost\/",
          "date": "2013-11-25 08:41:34",
          "content": "<p>test<\/p>\n",
          "parent": 0
      }
      
      // 评论 ok,可以显示
      {
          "status": "ok",
          "id": 155,
          "name": "admin",
          "url": "http:\/\/localhost\/",
          "date": "2013-11-25 08:36:42",
          "content": "<p>hello<\/p>\n",
          "parent": 0
      }
      

      JSON API 的官方文件有说到可以添加一些额外重定向参数
      redirect
      redirect_ok
      redirect_error
      redirect_pending

      例如重定向 post id 的文章,方法就在 URL 后面添加 &redirect=http://example.com?p=123456789

      PS:过几天再写个文章关于如何使用 JSON API 发表评论

      PS2:弄了个参考页

  1. 在使用JSON API时,还遇到几个问题。
    1、其实文章和评论放在一起不太好。通过文章的ID来获取评论数据更好。
    2、获取评论返回的数据不包含评论者的email地址,这样我就无法获取评论者的头像了,郁闷。

Comments are closed.