我正在构建一个移动应用程序,我想使用wordpress.com api从我的wordpress.com网站上获取帖子。通常,您可以按照此处的说明操作:https://developer.wordpress.com/docs/api/getting-started/。但是,在这种情况下,我尝试访问的wordpress.com网站设置为“私人”。
当我尝试发出api get请求时,收到403错误消息“用户无法访问此私人博客”。
是否可以使用wordpress.com api从私人wordpress.com博客加载帖子?
我希望当有人控制应用程序发出api请求并控制目标私有站点(如此处的情况)时,这是可能的。这似乎是api的一个很好的用例。
我现在不想将网站更改为私有网站。我也不希望应用程序的用户必须在任何地方输入登录凭据。我希望应用程序本身能够在加载帖子时提供相关凭据。
我已经完成了各种oauth操作,例如获取client_id,client_secret_key和令牌,但我没有看到任何实际从私有站点加载帖子的方法。
我之前已经看过问题,没有回答,例如:https://wordpress.stackexchange.com/questions/180637/fetching-private-posts-or-custom-post-types-via-wp-api-with-basic-authentication 和 How to retrieve private posts from wordpress using JSON rest api?
答案 0 :(得分:1)
我能够(大部分)想出这个。是的,绝对可以使用wordpress.api从私人wordpress.com网站加载帖子。
为了做到这一点,你对私人网站(get,post等等)进行的任何api调用都需要在标题中包含oauth2令牌以及请求。您从wordpress.com获得令牌。
请注意,此描述是关于wordpress.com api,而不是wordpress.org api。
要获取该令牌,您可以按照此处的步骤操作:https://developer.wordpress.com/docs/oauth2/。您可以获得需要定期刷新的短期令牌或永久令牌。您从服务器端代码方法获得永久令牌。
有几种不同的方法可以做到这一点:
所有这些都要求您在wordpress.com上注册一个单独的网址:https://developer.wordpress.com/apps/。在该网站上,您可以创建一个新的应用程序"这将要求许可。如果您有一个网站,或者只是您在开发中使用的本地主机站点,该应用程序可以使用您的URL(如果您不在开发中使用它,甚至只是一个本地主机端口URL)关键是获取client_id和在请求过程中使用它)。在那里,您将获得这些步骤所需的client_id和client_secret_code。从那里:
1)您可以使用curl代码查询api并获取auth代码,然后使用该auth代码获取另一个查询以获取令牌。请注意,wordpress.com oauth2文档中的curl代码是PhP(非纯卷曲)。
2)您可以直接在应用中提供获取令牌的方法,如上面链接的wordpress oauth2 doc中所述。对于离子应用程序,这可能需要使用inappbrowser插件,转到api应用程序授予您权限的页面。
3)另一种可能性:wordpress建立一个相当简单的基于节点的流程来获取令牌:转到https://github.com/Automattic/node-wpcom-oauth,在那里下载代码,然后按照步骤操作。一个非常有用的教程是:http://haiku2.com/2015/11/how-to-setup-a-wordpress-com-oauth-token/。它已经有几年了,但到现在仍然有效。
获得令牌后,您可以将其包含在标头中以进行通话。例如,使用来自@ 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(交叉起源)问题。
如果它似乎无法正常工作,或者您收到有关结果为空的错误,则令牌无效,或者没有“访问控制 - 允许 - 来源”#39;标题存在,CORS很有可能成为问题。
在离子 - 也许是其他基于Web的工具 - 您可能需要配置您的设置以使用wordpress.com端点作为代理服务器。有关信息,请访问:https://blog.ionicframework.com/handling-cors-issues-in-ionic/。
对于离子和ios - 当你想将应用程序放到设备或模拟器上时,由于离子2017年后期WKWebView的实施,在最近的离子版本中存在一组单独的CORS问题。
以下是有关详细信息:https://blog.ionicframework.com/wkwebview-for-all-a-new-webview-for-ionic/。要克服ios设备上的CORS问题,您必须绕过CORS。 Ionic目前的建议是使用Ionic Native http插件。现在的实现似乎有些不一致,但这是我到目前为止看到的唯一解决方案。