wampiedriessen / phpflickr
phpflickr 是 php-client-flickr 的官方客户端库。我在从 dan-coulter/phpflickr 分支后添加了 composer 文件。没有伤害官方许可证的意图
This package is not auto-updated.
Last update: 2024-09-26 18:57:42 UTC
README
由 Dan Coulter 编写
PHP 对 Flickr API 的封装。
安装
-
将安装包中的文件复制到您的服务器上的一个文件夹中。它们需要被您的 web 服务器读取。如果您愿意,可以将它们放入在您的 php.ini 文件中定义的 include 文件夹中,但这不是必需的。
-
现在您只需在 PHP 脚本中包含该文件并创建一个实例。例如:$f = new phpFlickr();
构造函数有三个参数
-
$api_key - 这是 flickr.com 给您的 API 密钥。此参数是必需的,您可以在:https://www.flickr.com/services/api/keys/ 获取 API 密钥
-
$secret - "秘密" 是可选的,因为不需要进行未经认证的调用,但对于新的认证 API(见下文认证部分)是绝对必需的。您将和 API 密钥一起获得一个。
-
$die_on_error - 这是一个布尔值,决定了当 API 返回错误语句时类是否停止(即停止操作)。默认为 false。如果 API 返回错误,每个方法都将返回 false。您可以使用 getErrorCode() 和 getErrorMsg() 方法访问错误信息。
-
-
我已经在我的类中实现了所有 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 只有一种认证方法可用。这种方法有些复杂,但更安全,可以让您的用户在认证您的应用程序时感觉更安全。您不再需要请求他们的用户名和密码。
我知道这个 API 在第一眼看起来很复杂,所以我已尽力使其在编码过程中尽可能透明。我将说明您需要使用此方法的步骤。auth.php 和 getToken.php 文件都需要在您可以使用之前输入您的 API 密钥和秘密。
为了让最终用户认证他们的账户
-
设置一个回调脚本。我包含了一个相当灵活的回调脚本。您可以在名为 "auth.php" 的包中找到它。
您需要访问 flickr,并将您的 api 密钥指向此文件作为回调脚本。一旦您这样做,在您希望最终用户认证他们的 flickr 账户到您的应用程序的任何页面上,只需调用 phpFlickr::auth() 函数并指定您需要使用的任何权限。
例如:$f->auth("write");
三种权限是“读取”、“写入”和“删除”。如果您将其留空,则该功能默认为“读取”。
调用此函数将发送用户的浏览器到Flickr页面以验证您的应用。一旦他们登录,它将将他们弹回您的回调脚本,该脚本将重定向回您从调用auth()函数的原始页面,并在设置会话变量以保存他们的身份验证令牌后返回。如果该会话变量存在,调用auth()函数将返回用户在Flickr页面上授予您的应用的权限,而不是重定向到外部页面。
-
用于验证应用以向您账户中显示您的私人图片(例如)
此方法将允许您让应用验证到特定账户,无论谁查看您的网站。这对于显示私人照片或照片集(等等)非常有用。
注意:以下方法可能有点难理解,因此我已设置了一个工具来帮助您:[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”)
-
如果您使用数据库缓存,您需要提供一个PEAR::DB风格的连接字符串。例如
$flickr->enableCache("db", "mysql://user:password@server/database");
第三个(可选)参数是缓存的过期时间(以秒为单位,默认为600)。第四个(可选)参数是您要存储缓存的表。默认为flickr_cache,如果表不存在,将尝试创建该表。
-
如果您使用文件系统缓存,您需要提供一个文件夹,其中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”,你可以用它来检查上传状态。异步上传速度快得多,但photo 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。
其他注意事项
-
许多方法都有可选参数。对于这些,我按照Flickr API文档中列出的顺序实现了它们。PHP允许在函数调用中包含可选参数,但如果你想要使用第三个可选参数,你必须先填写左侧的其他参数。你可以在实际参数的位置使用“NULL”值(不加引号)。例如
$f->groups_pools_getPhotos($group_id, NULL, NULL, 10);
这将从特定小组的池中获取前十张照片。如果你查看文档,你会看到还有一个参数,“page”。我把它省略了,因为它在“per_page”之后。
-
有些人需要从代理服务器后面使用phpFlickr。我实现了一个方法,允许你使用HTTP代理进行所有流量。假设你在本地服务器上运行一个端口为8181的代理服务器。这是你需要使用的代码
$f = new phpFlickr("[api key]"); $f->setProxy("localhost", "8181");
之后,所有的调用将通过你的代理服务器自动进行。