3

我正在尝试在imgur中列出来自单个用户的专辑。据我在 API 中阅读,有关专辑的信息只能使用经过身份验证的 API获取,这是一个非常奇怪的决定,因为您可以使用匿名 API 上传图像和消息,但无法获取列表等公共信息的专辑。

无论如何,看起来 auth API 使用OAuth。我一直在试图找到一种让它工作的方法,但没有运气。一个原因是我的主机不提供官方的 PHP 的 oauth 扩展,所以我需要一个外部库。

你有任何使用 imgur 和 oauth 的例子吗?

4

2 回答 2

7

有一些不错的纯 PHP OAuth 选项值得一提。为了了解它们的优点和缺点,有必要了解 OAuth 的工作原理。我们来复习。

在这个例子中,Provider 是 Imgur,Consumer 是你的 code,User 是用户。

  1. Provider 向 Consumer 发布 Consumer Key 和 Consumer Secret。
  2. 用户向消费者发出请求。
  3. 消费者向提供者询问请求令牌和请求秘密。这些通常存储在用户的会话中。
  4. 消费者使用请求令牌将用户重定向到提供者。网络上的大多数示例现在将用户的会话状态设置为“1”。
  5. 用户通过提供者授权消费者访问。
  6. 提供者使用(另一个?)请求令牌将用户发送回消费者。
  7. Consumer 将返回的 Request Token 和之前发送的 Request Secret 发送给 Provider。
  8. 提供者返回一个访问令牌和访问密钥。这些通常存储在用户的会话中,但它们可能是持久的,并且可能值得更好的长期存储位置。
  9. 从消费者到提供者的进一步请求需要消费者密钥、消费者秘密、访问令牌和访问秘密。

当我们点击第 9 步时,代码中的 OAuth 对象拥有执行请求所需的一切。关键的关键部分是OAuth 对象必须自己处理 API 请求,以便它可以正确地对通过网络发送的数据进行签名。

有两个不错的选择供您选择,有些不太好。让我们回顾一下好的:

首先是PEAR 的 HTTP_OAuth,它使用HTTP_Request2作为底层 HTTP 库。虽然它工作正常,但 HTTP_OAuth_Consumer_Request 充当请求对象的网关,但不会从它继承。这意味着您不能对它做所有可以对 HTTP_Request2 做的事情。这可能很烦人。

其次,有Zend Framework 的 Zend_Oauth,它使用Zend_Http_Client作为底层 HTTP 库。虽然它是更大的 Zend 框架的一部分,但这两个组件在很大程度上是独立的,并且可以与其他框架很好地工作......或者没有框架。与 PEAR 库不同,Zend_Oauth_Consumer 实际上返回一个派生自 Zend_Http_Client 的类。这并不是说它没有做自己奇怪的事情。它不是要求您在会话中隐藏令牌和机密,而是希望您序列化一个包含令牌和机密的状态令牌对象。它完成了工作,但这很奇怪。

忽略疣,两者都是你的好选择。它们都是在自由开源许可证下发布的,因此将它们与代码捆绑在一起不会有问题。*

在不太好的类别中,有oauth-php。我不在乎在图书馆工作,太多的分心和让我恼火的小事。还有PECL 的 oauth 扩展。虽然它使用 CURL,但不可能从中获取 CURL 句柄来发出您自己的理智请求。您还提到您没有安装它,这就是为什么它属于不太好的类别。

至于与 Imgur 的接口……它只是普通的 JSON。抛开PHP的本机json_encodejson_decode你根本不会有问题。API 文档非常好。

*我不是律师,您可能想咨询一位。(这个答案的一部分是从我开始编写的一个不完整
的 Imgur API 库中逐字复制的。不幸的是,我没有实现任何关于专辑的内容,否则我只会链接它。一旦它完成了我需要它做的事情,我停了。对不起。)

于 2012-01-27T18:21:39.467 回答
2

我不知道 Imgur。但是关于 oauth api 和代码的一些很好的链接.. oauth 几乎适用于所有服务..

http://oauth.net/code/

http://oauth.net/core/1.0/ 因为我的声望不到 10,我只能给你发 2 个超链接

于 2012-01-31T09:54:02.873 回答