【发布时间】:2014-02-09 11:50:59
【问题描述】:
我是 Android 开发新手,我正在尝试制作一个应用程序,该应用程序将简单地显示来自 WordPress 网站的帖子类别和帖子。任何人都可以帮助我,拜托。
【问题讨论】:
-
有人请帮帮我
我是 Android 开发新手,我正在尝试制作一个应用程序,该应用程序将简单地显示来自 WordPress 网站的帖子类别和帖子。任何人都可以帮助我,拜托。
【问题讨论】:
您要做的是从您的 WordPress 创建某种 REST API,以将 JSON 响应返回到您的 Android HTTP 请求。为此,首先对于Android,您可以参考这篇文章:
Make an HTTP request with android
然后,对于服务器端(您的 WordPress),您必须添加一个插件来处理您的 API 请求。为此,请在您的 wp-content/plugins 中创建一个名为 api-endpoint.php 的文件并使用如下内容:
<?php
class API_Endpoint{
/** Hook WordPress
* @return void
*/
public function __construct(){
//Ensure the $wp_rewrite global is loaded
add_filter('query_vars', array($this, 'add_query_vars'), 0);
add_action('parse_request', array($this, 'sniff_requests'), 0);
add_action('init', array($this, 'add_endpoints'), 0);
}
/**
* Add public query vars
* @param array $vars List of current public query vars
* @return array $vars
*/
public function add_query_vars($vars){
$vars[] = '__api';
return $vars;
}
/**
* Add API Endpoints
* Regex for rewrites - these are all your endpoints
* @return void
*/
public function add_endpoints(){
//Get videos by category - as an example
add_rewrite_rule('^api/videos/?([0-9]+)?/?','index.php?__api=1&videos_cat=$matches[1]','top');
//Get products - as an example
add_rewrite_rule('^api/product/?([0-9]+)?/?','index.php?__api=1&product=$matches[1]','top');
}
/** Sniff Requests
* This is where we hijack all API requests
* If $_GET['__api'] is set, we kill WP and serve up rss
* @return die if API request
*/
public function sniff_requests(){
global $wp;
if(isset($wp->query_vars['__api'])){
$this->handle_api_request();
exit;
}
}
/** Handle API Requests
* This is where we handle off API requests
* and return proper responses
* @return void
*/
protected function handle_api_request(){
global $wp;
/**
*
* Do your magic here ie: fetch from DB etc
* then get your $result
*/
$this->send_response($result);
}
/** Response Handler
* This sends a JSON response to the browser
*/
protected function send_response(array $data){
header('content-type: application/json; charset=utf-8');
echo json_encode($data);
exit;
}
}
new API_Endpoint();
然后通过您的 WordPress 管理界面启用 API_Endpoint 插件,不要忘记刷新您的永久链接。
之后,您将能够向以下对象发出 API 请求:
http://example.com/api/videos/12
或
http://example.com/api/product/4
编辑
如需获取 WordPress 类别,请在此处参考 - http://codex.wordpress.org/Function_Reference/get_categories
【讨论】:
感谢格雷格拉帮助我。我找到了解决方案。 我在 wordpress 站点中安装了 WordPress 插件 JSON API 并将此链接 http://www.learn2crack.com/2013/10/android-json-parsing-url-example.html 引用到 Android 应用程序中的代码
【讨论】:
如果从 wordpress 将数据发送回 android 应用程序,使用 JSON APi 插件非常糟糕,虽然它给出了预期的结果,但你真的看到 json 查询的结果是什么吗? ?
检查一下,在浏览器中输入:www.yourwebsite.com/api/get_posts/
并检查您将获得什么,这将查询您在 wordpress 仪表板中设置为默认值的所有帖子或帖子数量,并将有关它们的所有数据作为 json 字符串发送,我尝试查询 10 个帖子和大小json 字符串的大小约为 150KB 想象一下,只有 10 个帖子,用户每次都必须下载所有这些帖子才能获得 10 个帖子。
解决方案:您应该在服务器端查询帖子并仅将您要使用的数据发送回安卓应用程序,例如:标题、缩略图、摘录......
怎么做?
1- 在您的 wordpress 目录中创建一个 php 文件并使其可访问
2- 在其中接收来自 android 的发布值(这些值将由您在 android 中设置,以了解您想要的查询类型,例如帖子数量和帖子类型...)
3- 根据第 2 部分中的查询实体使用 wordpress 函数查询帖子
4- 仅使用您要使用的数据生成您自己的 json 字符串。
5-将json字符串回显到android
现在如果我只想要 10 个帖子的标题和缩略图链接,json 字符串大小将约为 2KB
这很重要:-)
您可以使用 JSON API Auth 注册和登录用户,它易于/快速实现和使用。
【讨论】:
我觉得这样更好,要使用 wordpress rest api 你需要使用 Wordpress 4.7 或更高版本,或者在之前的版本中安装Rest Api plugin。然后你需要在 wordpress 中配置 Permalinks,这将使 rest api 端点工作。
为了减小大小和自定义输出 json,您可以安装 Rest api filter fields plugin,请参见以下示例:
获取指定数量的帖子
要获取指定数量的帖子,您可以使用每页帖子过滤器。以下 URL 将仅获取 3 个帖子。 http://your-blog-url/wp-json/wp/v2/posts?filter[posts_per_page]=3
获取特定帖子
您可以通过其 id 获取任何特定的帖子。 http://your-blog-url/wp-json/wp/v2/posts/67
这里 67 是帖子的 id。
过滤字段
正如您在上面的 JSON 数据中看到的,有几个字段是我们不需要的。因此,借助 REST API – Filter Fields 插件,您可以过滤一些字段。例如,您只想获取帖子的 id 和标题,则可以使用以下 URL 来完成。 http://your-blog-url/wp-json/wp/v2/posts?fields=id,title
【讨论】:
首先,您必须在您的 wordpress 上安装 WordPress Rest API v2。您可以通过以下 URL 获取有关您博客上所有帖子的信息。它将返回一个 JSON 响应,其中包含有关您的博客的所有信息。
http://your-blog-url/wp-json/wp/v2/posts
for example http://www.blueappsoftware.in/android/wp-json/wp/v2/posts
现在您可以使用改造 / volley / httpconnection 从 android 调用此 url。我会建议你使用改造。您可以在 android 上创建自己的自定义 UI 设计来显示博客文章。您可以从这里获得参考-http://www.blueappsoftware.in/android/blog/get-wordpress-post-in-android-app/
【讨论】: