carlos-mg89 / phpflickr
PHP 对 Flickr API 的包装,包括 OAuth。
Requires
- php: ^8.0
- ext-curl: *
- ext-json: *
- ext-libxml: *
- ext-simplexml: *
- carlos-mg89/oauth: ^0.8.14
- psr/cache: ^3.0
Requires (Dev)
- mediawiki/minus-x: ^1.1
- php-parallel-lint/php-parallel-lint: ^1.3
- phpunit/phpunit: ^9.5
- squizlabs/php_codesniffer: ^3.0
This package is auto-updated.
Last update: 2024-09-10 12:55:55 UTC
README
PHP 对 Flickr API 的包装。
https://github.com/samwilson/phpflickr
目录
安装
使用 Composer 安装
composer require samwilson/phpflickr
用法
包含 Composer 的自动加载器后,创建一个 PhpFlickr 对象。例如
require_once 'vendor/autoload.php'; $flickr = new \Samwilson\PhpFlickr\PhpFlickr($apiKey, $apiSecret);
构造函数接受两个参数
-
$apiKey
— 这是 Flickr 在您 注册应用程序 时提供的 API 密钥。 -
$secret
— API 秘密是可选的,因为它只用于进行身份验证请求(见下文)。注册应用程序时,它会与您的 API 密钥一起提供。
所有 API 方法都已实现于 phpFlickr。您可以在以下位置查看完整列表和文档: http://www.flickr.com/services/api/
要调用一个方法,移除名称中的 "flickr." 部分,并将任何点替换为下划线。例如,而不是 flickr.photos.search,您将调用 $f->photos_search() 或而不是 flickr.photos.licenses.getInfo,您将调用 $f->photos_licenses_getInfo()(是的,它是区分大小写的)。
所有函数的参数都按照其文档页面上的列表顺序实现(每个方法中包括到 phpFlickr 类的链接)。唯一的例外是 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 的用户尽可能透明。我们将介绍您需要执行的步骤来使用它。
让最终用户验证他们的账户
-
创建一个对象以临时存储身份验证令牌,并将其提供给 PhpFlickr。这必须是 TokenStorageInterface 的实现,通常是类型
Session
(对于基于浏览器的流程)或Memory
(对于基于命令行的流程)——或者您可以创建自己的实现。$storage = new \OAuth\Common\Storage\Memory(); $flickr->setOauthStorage($storage);
-
将用户发送到Flickr URL(通过重定向或告诉他们点击链接),在那里他们会确认他们希望您的应用程序拥有您指定的权限(这可能是
read
、write
或delete
)。$perm = 'read'; $url = $flickr->getAuthUrl($perm, $callbackUrl);
-
一旦用户已经授权了您的应用程序,他们将被重定向回您网站上指定的URL(如上所述的回调URL),或者会得到一个九位数的代码,他们需要将其复制并粘贴到您的应用程序中。
- 对于基于浏览器的流程,您的回调URL现在将有两个新的查询字符串参数:
oauth_token
和oauth_verifier
。 - 对于CLI流程,您需要从用户提供给您的字符串中去除除了数字之外的所有内容(例如,代码的前导和尾随空格以及代码中的连字符)。
- 对于基于浏览器的流程,您的回调URL现在将有两个新的查询字符串参数:
-
您现在可以请求最终的“访问令牌”
- 对于基于浏览器的流程
$accessToken = $flickr->retrieveAccessToken($_GET['oauth_verifier'], $_GET['oauth_token']);
- 对于CLI流程,它与基于浏览器的流程大致相同,但由于您仍然可以访问请求令牌,因此在运行此请求时可以省略它
$verifier = '<9-digit code stripped of hyphens and spaces>'; $accessToken = $flickr->retrieveAccessToken($verifier);
- 对于基于浏览器的流程
-
现在,您可以保存访问令牌的两个字符串部分(您可以通过
$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();
有关请求方法的更多详细信息,请参阅上方的使用部分,以及有关示例的文件。
缓存
PhpFlickr可以与任何PSR-6兼容的缓存一起使用,例如symfony/cache或tedivm/stash。
要启用缓存,请将配置好的缓存对象传递给PhpFlickr::setCache($cacheItemPool)
。
所有请求都将缓存相同的时间段,默认为10分钟。这可以通过PhpFlickr::setCacheDefaultExpiry()
进行更改。
上传
上传新照片
上传很简单。除了认证(见上方的认证部分)之外,您必须提供的最基本的是图像文件的路径。您可以通过以下方式上传文件
$flickr->uploader()->upload('/path/to/photo.jpg');
其他上传参数在方法文档中有说明。其中一个有用的参数是$async
标志,它允许异步上传,这意味着而不是立即上传文件并在返回之前,将返回一个“票据ID”,您可以用它来随后获取上传的状态。您可以在Flickr的API文档中了解更多有关异步上传的信息。
替换现有照片
您也可以上传一张照片作为现有照片的替换。
$flickr->uploader()->replace('/path/to/photo.jpg', 44333812150);
此方法不允许设置任何照片元数据,但您可以进行异步替换(在这种情况下,将返回一个“票据ID”)。
代理服务器
PhpFlickr可以与代理服务器或任何符合Flickr API(如23 Photo Sharing)的服务一起使用。要使用此功能,请将代理服务器的基本URL在实例化PhpFlickr对象之后传递。例如
$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由用户:Anonymouse512提供,授权协议为CC-BY-SA,通过维基共享资源。