Wordpress API : Get posts from private wordpress. 网站

标签 wordpress api oauth-2.0 ionic2 wordpress.com

我正在构建一个移动应用程序,我想使用 wordpress.com api 从我的 wordpress.com 网站获取帖子。通常,您可以按照此处的说明进行操作:https://developer.wordpress.com/docs/api/getting-started/ .但是,在这种情况下,我尝试访问的 wordpress.com 站点被设置为“私有(private)”。

当我尝试发出 api get 请求时,我收到 403 错误消息“用户无法访问此私有(private)博客”。

是否可以使用 wordpress.com api 从私有(private) wordpress.com 博客加载帖子?

我希望当有人控制发出 api 请求的应用程序并且还控制目标私有(private)站点(就像这里的情况)时,这是可能的。这似乎是 api 的一个很好的用例。

我暂时不想将站点更改为私有(private)。我也不希望应用程序的用户必须在任何地方输入登录凭据。我希望应用程序本身能够在加载帖子时提供相关凭据。

我已经完成了各种 oauth 操作,例如获取 client_id、client_secret_key 和 token ,但我没有看到任何从私有(private)站点实际加载帖子的方法。

我看到之前问过的问题,没有答案,比如:https://wordpress.stackexchange.com/questions/180637/fetching-private-posts-or-custom-post-types-via-wp-api-with-basic-authenticationHow to retrieve private posts from wordpress using JSON rest api? .

最佳答案

我能够(大部分)解决这个问题。是的,绝对可以使用 wordpress.api 从私有(private) wordpress.com 站点加载帖子。

为了做到这一点,您对私有(private)站点进行的任何 api 调用(get、post 等)都需要在请求头中包含一个 oauth2 token 。您从 wordpress.com 获得 token 。

请注意,此描述是关于 wordpress.com api,而不是 wordpress.org api。

要获得该 token ,您可以按照此处的步骤操作:https://developer.wordpress.com/docs/oauth2/ .您可能会获得需要定期刷新的短期 token 或永久 token 。您从服务器端代码方法中获取永久 token 。

有几种不同的方法可以做到这一点:

所有这些都要求您在 wordpress.com 注册一个单独的 url,此处:https://developer.wordpress.com/apps/ .在该站点,您创建一个新的“应用程序”,它将请求许可。如果您有网站,该应用程序可以使用您的 url,或者仅使用您在开发中使用的本地主机站点(如果您不在开发中使用它,甚至可以使用本地主机端口 url——关键是获取 client_id 并使用它在请求过程中)。在那里,您将获得执行这些步骤所需的 client_id 和 client_secret_code。从那里:

1) 您可以只使用 curl 代码查询 api 并取回授权代码,然后使用该授权代码进行另一个查询以获取 token 。请注意,wordpress.com oauth2 文档中的 curl 代码是在 PhP 中(不是纯 curl)。

2) 您可以直接在您的应用中提供获取 token 的方法,如上面链接的 wordpress oauth2 文档中所述。对于 ionic 应用程序,这可能需要使用 inappbrowser 插件,才能转到 api 应用程序授予您权限的页面。

3) 另一种可能性:wordpress 设置了一个相当简单的基于节点的过程来获取 token :转到 https://github.com/Automattic/node-wpcom-oauth ,在那里下载代码,然后按照步骤操作。一个非常有用的教程位于:http://haiku2.com/2015/11/how-to-setup-a-wordpress-com-oauth-token/ .它已经有几年历史了,但现在仍然有效。

获得 token 后,将其包含在 header 中以进行调用。例如,使用来自@angular/common/http 的 HttpClient(对于 ionic/angular/typescript 应用程序):

var token = 'YOUR TOKEN'
var url = 'THE API ENDPOINT'
return new Promise((resolve) => {  
        let headers = new HttpHeaders();
        headers.append('Authorization', 'Bearer ' + token)
        this.http.get(url, {headers: headers}) 
        .subscribe(data => {
            console.log(data)
            }, err => {
            console.log(err);
        });
 });

这应该都有效...除非您遇到 CORS(跨源)问题。

如果它似乎不起作用,或者如果您收到有关结果为空、 token 无效或不存在“Access-Control-Allow-Origin” header 的错误,则很有可能是 CORS是问题所在。

在 ionic 和其他基于 Web 的工具上,您可能需要配置您的设置以使用 wordpress.com 端点作为代理服务器。有关信息在这里:https://blog.ionicframework.com/handling-cors-issues-in-ionic/ .

对于 ionic 和 ios——当您想将应用程序放到设备或模拟器上时,由于 ionic 在 2017 年晚些时候实现了 WKWebView,因此在较新的 ionic 版本中存在一组单独的 CORS 问题。

这里有更多详细信息:https://blog.ionicframework.com/wkwebview-for-all-a-new-webview-for-ionic/ .要克服 ios 设备上的 CORS 问题,您必须绕过 CORS。 Ionic 目前的建议是使用 Ionic Native http 插件。现在的实现似乎有点不一致,但这是我目前看到的唯一解决方案。

关于Wordpress API : Get posts from private wordpress. 网站,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48470417/

相关文章:

wordpress - 如何在 WordPress 中正确断行包含 CJK 和英文字符的行?

wordpress - Algolia - WordPress - 编辑帖子模板(图片)

javascript - Etsy API 列表(按类别)

javascript - Google Plus One Button - 如何添加回调?

java - 如何为 OAuth2RestTemplate 设置 HTTP header

wordpress - 如何在没有过滤器的情况下运行 WordPress wp_query?

python - 使用python查询访问行中的特定数据

android - 禁用插件并使用 ./gradlew :app:dependencies 检查你的依赖关系树

objective-c - 修改Google OAuth2登录页面

oauth-2.0 - Keycloak: Missing parameter: code, 如何使用POST请求获取Keycloak中的code