samwilson/phpflickr

PHP 对 Flickr API 的封装,包括 Oauth。

5.1.0 2023-04-26 07:52 UTC

README

PHP 对 Flickr API 的封装。

https://github.com/samwilson/phpflickr

Packagist

Build status

目录

安装

使用 Composer 安装

composer require samwilson/phpflickr

用法

包含 Composer 的自动加载后,创建一个 PhpFlickr 对象。例如

require_once 'vendor/autoload.php';
$flickr = new \Samwilson\PhpFlickr\PhpFlickr($apiKey, $apiSecret);

构造函数接受两个参数

  1. $apiKey — 这是 Flickr 在你 注册应用 时给你的 API 密钥。

  2. $secret — API 密钥是可选的,因为它仅用于执行认证请求(见下文)。当你注册应用时,它会与你一起给出。

phpFlickr 中已经实现了所有 API 方法。你可以在这里看到完整的列表和文档:http://www.flickr.com/services/api/

要调用一个方法,从名称中移除 "flickr." 部分,并将任何点替换为下划线。例如,而不是 flickr.photos.search,你会调用 $f->photos_search(),或者而不是 flickr.photos.licenses.getInfo,你会调用 $f->photos_licenses_getInfo()(是的,它区分大小写)。

所有函数的参数都按照它们在文档页面上的列表顺序实现(每个方法中都包含到该类的链接)。唯一的例外是 photos_search(),photos_getWithoutGeodata() 和 photos_getWithoutGeodata(),由于有很多可选参数,所以最好传递一个关联数组作为参数。有关更多信息,请参阅 phpFlickr.php 中 photos_search() 定义中的注释。

示例

examples/ 目录中有一些建议文件。要使用这些文件,首先将 examples/config.dist.php 复制到 examples/config.php,然后运行 php examples/get_auth_token.php 以获取访问令牌。将此访问令牌添加到你的 examples/config.php 中,然后你可以运行任何需要认证的示例(注意,并非所有示例都需要认证)。

认证

API 中只有一个用户认证方法可用,那就是 OAuth 1.0。只有在你执行需要它的操作时,例如上传或访问私人照片时,你才需要使用此方法。

此认证方法有些复杂,但它是安全的,并让你的用户在使用你的应用程序进行认证时感到更安全。你不必请求他们的用户名和密码。

阅读有关 Flickr 认证 API 的更多信息。

我们知道这个 API 乍看之下很复杂,所以我们试图让 phpFlickr 的用户尽可能透明。我们将讲解你使用此 API 需要执行的所有步骤。

为了让最终用户验证他们的账户

  1. 创建一个对象以临时存储认证令牌,并将其提供给 PhpFlickr。这必须是一个实现 TokenStorageInterface 的实现,通常是类型 Session(对于基于浏览器的流程)或 Memory(对于命令行流程)— 或者你可以创建自己的实现。

    $storage = new \OAuth\Common\Storage\Memory();
    $flickr->setOauthStorage($storage);
  2. 将用户发送到Flickr URL(通过重定向或告诉他们点击链接),他们将确认他们希望您的应用程序拥有您指定的权限(可以是readwritedelete)。

    $perm = 'read';
    $url = $flickr->getAuthUrl($perm, $callbackUrl);
  3. 一旦用户授权了您的应用程序,他们将被重定向回您网站上指定的URL(如上所述的回调URL),或者将获得一个九位数的代码,他们需要将其复制并粘贴到您的应用程序中。

    1. 对于基于浏览器的工流程,您的回调URL现在将有两个新的查询字符串参数:oauth_tokenoauth_verifier
    2. 对于命令行工流程,您需要从用户给您的字符串中删除除数字之外的所有内容(例如,删除代码中的前导和尾随空格和连字符)。
  4. 现在您可以请求最终的“访问令牌”

    1. 对于基于浏览器的工流程
      $accessToken = $flickr->retrieveAccessToken($_GET['oauth_verifier'], $_GET['oauth_token']);
    2. 对于命令行工流程,情况类似,但由于您仍然可以访问请求令牌,因此在运行此请求时可以省略它
      $verifier = '<9-digit code stripped of hyphens and spaces>';
      $accessToken = $flickr->retrieveAccessToken($verifier);
  5. 现在您可以保存访问令牌的两个字符串部分(您可以通过$accessToken->getAccessToken()$accessToken->getAccessTokenSecret()方法获取它们)并使用它来发起未来的请求。访问令牌不会过期,并且必须安全存储(关于如何安全存储的细节超出了PhpFlickr的范围)。

执行认证请求

一旦您有了访问令牌(见上面),您可以将其存储在安全的地方,并在以后使用它来发起认证请求。为此,首先创建一个存储对象(同样,在初始认证过程中,您可以选择不同的存储类型,但对于许多情况,内存存储就足够了),然后在该对象中存储您的访问令牌

// Create storage.
$storage = new \OAuth\Common\Storage\Memory();
// Create the access token from the strings you acquired before.
$token = new \OAuth\OAuth1\Token\StdOAuth1Token();
$token->setAccessToken($accessToken);
$token->setAccessTokenSecret($accessTokenSecret);
// Add the token to the storage.
$storage->storeAccessToken('Flickr', $token);

现在,您可以将存储传递给PhpFlickr,并开始发起请求

$flickr->setOauthStorage($storage);
$recent = $phpFlickr->photos()->getContactsPhotos();

请参阅用法部分以获取有关请求方法和examples/recent_photos.php文件的更多详细信息。

缓存

PhpFlickr可以与任何PSR-6兼容的缓存一起使用,例如symfony/cachetedivm/stash

要启用缓存,请将配置好的缓存对象传递给PhpFlickr::setCache($cacheItemPool)

所有请求都将缓存相同的持续时间,默认为10分钟。这可以通过PhpFlickr::setCacheDefaultExpiry()进行更改。

上传

上传新照片

上传很简单。除了认证(见认证部分)之外,您至少需要提供图像文件的路径。您可以按以下方式上传文件

$flickr->uploader()->upload('/path/to/photo.jpg');

其他上传参数在方法的docblock中有说明。其中一个有用的参数是$async标志,它允许异步上传,这意味着,而不是立即上传文件并返回,将返回一个“票据ID”,您可以使用它来获取上传的状态。您可以在Flickr的API文档中了解更多有关异步上传的信息。

替换现有照片

您还可以上传照片以替换现有照片。

$flickr->uploader()->replace('/path/to/photo.jpg', 44333812150);

此方法不允许设置任何照片元数据,但可以进行异步替换(在这种情况下将返回一个“票据ID”)。

用户代理

如果您在应用程序中使用PhpFlickr,设置一个自定义用户代理是一个好主意。这可以通过以下方式完成

$flickr->setUserAgent('MyVendor-MyApp/1.0.0');

代理服务器

PhpFlickr 可以与代理服务器或任何符合Flickr API的服务(例如 23 照片分享)一起使用。要使用此功能,在实例化 PhpFlickr 对象后传递代理服务器的基准URL。例如

$flickr->setProxyBaseUrl('http://localhost:8181/flickr');

之后,所有请求将通过您的代理服务器自动进行。

以下是一个配置此类代理服务的示例,适用于Apache网络服务器

ProxyRequests Off
SSLProxyEngine on
ProxyPass /flickr https://api.flickr.com/services
ProxyPassReverse /flickr https://api.flickr.com/services

致谢

这是一个Dan Coulter原始 phpFlickr 库的分支,由Sam Wilson维护。所有艰苦的工作都是Dan完成的!

此外,也感谢许多其他 贡献者

用于上传示例的 Agateware_Example.JPG 是由User:Anonymouse512通过维基媒体共享,遵循CC-BY-SA协议。