zgetro/phpflickr

phpflickr 是 php-client-flickr 的官方客户端库。我在从 dan-coulter/phpflickr 分支之后添加了 composer 文件,没有意图侵犯官方许可证。

安装: 240

依赖者: 0

建议者: 0

安全: 0

星级: 1

关注者: 1

分支: 128

类型:

dev-master 2016-04-18 07:29 UTC

This package is auto-updated.

Last update: 2024-08-28 22:42:26 UTC


README

Dan Coulter 提供

PHP 对 Flickr API 的包装。

安装

  1. 将安装包中的文件复制到您的服务器上的一个文件夹中。这些文件需要您的 web 服务器可读。如果您喜欢,可以将它们放入 php.ini 文件中定义的 include 文件夹,但这不是必需的。

  2. 现在您只需在 PHP 脚本中包含该文件并创建一个实例即可。例如:$f = new phpFlickr();

    构造函数有三个参数

    1. $api_key - 这是 flickr.com 给您的 API 密钥。此参数是必需的,您可以在:https://www.flickr.com/services/api/keys/ 获取 API 密钥。

    2. $secret - "秘密" 是可选的,因为不需要进行未认证的调用,但对于新的认证 API(见下面的认证部分)是绝对必需的。您将得到一个与您的 API 密钥一起分配的密钥。

    3. $die_on_error - 这接受一个布尔值,并确定如果 API 返回错误语句,类是否会终止(即停止操作)。默认为 false。如果 API 返回错误,每个方法都将返回 false。您可以使用 getErrorCode() 和 getErrorMsg() 方法访问错误消息。

  3. 我已经在我的类中实现了所有 API 方法。您可以在以下位置查看完整列表和文档: 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() 定义的注释。

认证

截至本版 phpFlickr 类,API 只有一种认证方法可用。此方法有些复杂,但更安全,并允许您的用户在认证到您的应用程序时感到更安全。您不再需要请求他们的用户名和密码。

Flickr 认证 API

我知道这个 API 乍一看很复杂,所以我已尽力使其对编码过程更透明。我将说明您需要使用此方法的步骤。auth.php 和 getToken.php 文件在使用之前都需要您输入 API 密钥和密钥。

让最终用户认证他们的账户

  1. 设置一个回调脚本。我已经包含了一个相当灵活的回调脚本。您将在名为 "auth.php" 的包中找到它。

    您需要前往Flickr,并将API密钥指向此文件作为回调脚本。完成此操作后,在您希望用户进行认证的任何页面上,只需使用所需的权限调用phpFlickr::auth()函数。

    例如:$f->auth("write");

    三种权限是“读取”、“写入”和“删除”。如果留空,则函数默认为“读取”。

    调用此函数会将用户的浏览器发送到Flickr页面进行认证。一旦登录,它将跳转回您的回调脚本,在设置会话变量以保存认证令牌后,将您调用auth()函数的原始页面重定向回。如果该会话变量存在,则调用auth()函数将返回用户在Flickr页面上授予您的应用程序的权限,而不是跳转到外部页面。

  2. 为了认证应用程序以展示您的私人照片(例如)

    此方法允许您使应用程序认证到特定的一个账户,无论谁访问您的网站。这对于展示私人照片或照片集(等等)很有用。

    注意:以下方法理解起来可能有些困难,因此我已设置了一个工具来帮助您:[http://www.phpflickr.com/tools/auth/](http://www.phpflickr.com/tools/auth/)。

    首先,您需要使用Flickr设置一个回调脚本。完成之后,编辑包含getToken.php文件的第12行,以反映应用程序所需的权限。然后浏览到该页面。一旦您使用Flickr认证了应用程序,它将带您回到该页面,您将获得一个类似以下的令牌:1234-567890abcdef1234。前往创建phpFlickr实例的文件(我建议使用包含文件),在创建实例后,将令牌设置为使用:$f->setToken(""); 此令牌永远不会过期,因此您不必担心需要定期登录。

缓存

缓存对于项目来说可能非常重要。仅仅调用几次Flickr API可能就足够让普通用户感到无聊(取决于您所进行的调用)。我已经内置了缓存,它将访问数据库或您的文件系统中的文件。要启用缓存,请使用phpFlickr::enableCache()函数。此函数需要至少两个参数。第一个参数将是您使用的缓存类型("db"或"fs")

  1. 如果您使用数据库缓存,则需要提供一个PEAR::DB样式的连接字符串。例如

    $flickr->enableCache("db", "mysql://user:password@server/database");
    

    第三个(可选)参数是缓存的过期时间(以秒为单位,默认为600)。第四个(可选)参数是您希望存储缓存的表。默认为flickr_cache,如果不存在将尝试创建表。

  2. 如果您使用文件系统缓存,则需要提供一个Web服务器有写权限的文件夹。例如

    $flickr->enableCache("fs", "/var/www/phpFlickrCache");
    

    第三个(可选)参数与数据库缓存相同,是缓存过期时间(以秒为单位)。

    注意:与数据库缓存相比,文件系统缓存可能会慢一些。我没有对此进行过测试,但如果您有大量的调用,清理旧调用的过程可能会对您的服务器造成困难。

    您可能不希望允许全世界查看在缓存过程中创建的文件。如果您想隐藏这些信息,请确保您的权限设置正确,或者禁用Web服务器显示*.cache文件。在Apache中,您可以在配置文件或使用以下指令的 .htaccess 文件中指定:

    <FilesMatch "\.cache$">
        Deny from all
    </FilesMatch>
    

    或者,您可以指定一个位于Web服务器文档根之外的目录。

上传

上传非常简单。除了需要认证(参见认证章节)外,您至少需要提供您PHP服务器上图像文件的路径。您可以按照以下方式执行同步或异步上传

synchronous:    sync_upload("photo.jpg");
asynchronous:   async_upload("photo.jpg");

基本区别在于,同步上传会等待Flickr处理照片并返回PhotoID。异步上传只是上传图片并获取一个“ticketid”,您可以使用它来检查上传状态。虽然异步上传更快,但照片ID不会立即可用。您可以在此处了解更多关于异步上传的信息

http://www.flickr.com/services/api/upload.async.html

这两个函数都接受相同的参数,如下

照片:要上传的文件路径。
标题:照片的标题。
描述:照片的描述。可以包含一些有限的HTML。
标签:应用于照片的标签列表,以空格分隔。
is_public:设置为0表示否,1表示是。
is_friend:设置为0表示否,1表示是。
is_family:设置为0表示否,1表示是。

替换照片

Flickr已发布API支持上传替换照片。要使用此新方法,只需在phpFlickr中使用“replace”函数。在您替换照片之前,您需要使用“write”权限认证您的脚本。参数如下

照片:要上传的文件路径。
照片ID:您想要替换的照片的Flickr数字ID。
Async(可选):设置为0表示同步调用,1表示异步。

如果您使用异步调用,它将返回ticketid而不是photoid。

其他说明

  1. 许多方法都有可选参数。对于这些,我按照Flickr API文档中列出的顺序实现了它们。PHP允许在函数调用中使用可选参数,但如果您想使用第三个可选参数,您必须先填写左侧的参数。您可以在实际参数的位置使用“NULL”值(不带引号)。例如

    $f->groups_pools_getPhotos($group_id, NULL, NULL, 10);
    

    这将获取特定组池中的前十张照片。如果您查看文档,您将看到还有一个参数“page”。我将其省略,因为它在“per_page”之后。

  2. 有些人需要在代理服务器后面使用phpFlickr。我实现了一个方法,允许您使用HTTP代理处理所有流量。假设您在本地服务器上运行一个端口为8181的代理服务器。这是您将使用的代码

    $f = new phpFlickr("[api key]");
    $f->setProxy("localhost", "8181");
    

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