6.7 Flickr API

Flickr API概述及範例參考 

使用Flickr API 前建議先閱讀 http://www.flickr.com/services/api/

而較為簡便的方式則為使用第三方所編寫的可讓各種程式語言引用的函式庫。

如較多人使用的PHP,就有phpflickr。

使用這些開發工具,您可簡單的利用自己所熟悉的程式語言來以新的、不同的方式呈現公開的 Flickr 資料 (如相片、標籤、個人設定檔或社群)。

而Flickr API也如同其他許多Web API一般,需要申請API Key。 

Flickr api使用時包含method指定呼叫方法、api key以及format用於指定回傳格式,

Flickr希望所有的編碼皆使用UTF-8。 

Flickr的api key 中包含auth_token 和 api_sig參數。若需使用write權限則需驗證auth_sig。

Flickr的相片中包含兩個日期:拍攝日期與發表日期。
如拍攝日期可從EXIF中讀取則顯示exif中的拍找日期,否則以上傳日期代表。
日期時間的格式為mysql時間日期格式傳送。如:2004-11-29 16:01:26

Flickr可支援的回應格式:REST、XML-RPC、SOAP、 JSON、PHP

 

flickr php的開發工具 phpflickr

flickr api http://www.flickr.com/services/api/

使用前要先申請一個key只要key丟在 $f = new phpFlickr("API Key");裡面 就可以省掉一大堆的驗證程序

phpflickr http://phpflickr.com/

作者網站上有一些範例可供參考

下載完後 是一個名為phpflickr的文件夾只要把php檔案丟在此文件夾內 就可以使用

用phpflickr的時候 要把flickr刪掉 以及把. 替換成 _例如:我要用到 flickr.urls.getUserPhotos 這個api使用phpflickr的時候就變成 urls_getUserPhotos

回傳的格式及傳入的參數 可以自己做測試 在網頁最下方API 發掘: flickr.urls.getUserPhotos

如果用到的api是要傳入多個參數 在phpflickr裡面有readme 裡面有範例說明如何使用傳入多個參數 

只要把flickr的回傳對照作者範例 就可以知道如何抓取flickr的回傳

例如

讀取某張照片所在經緯度(要給照片id)

flickr的回傳

我的實驗內容

 


以及結果

 

利用phpFlickr使用Flickr API的搜尋功能範例

這次的Term Project有用到Flickr API

所以這邊就稍微簡介一下我使用Flickr API的心得...

以下是我預計所做出的效果︰
使用者可以傳入所要搜尋的地點傳至Flickr搜尋出10張相關的照片

Flickr的API驗證部份就請各位自行上網搜尋資料
在這就不一一介紹其步驟...

另外由於如果想直接使用Flickr本身所提供的API來設計將會相當複雜
因此網路上也很許多不同語言的API Kits來協助開發
像是︰.NET, PHP, Java, Perl... etc
我們只要選擇使用其中一個API Kits便可省去許多像是需要驗證或自行撰寫Request, Response的功能
在此我們選用phpFlickr來做為範例:

首先我們必須先下載phpFlickr的函式庫
Download 2.3.0.1

其實phpFlickr的函式庫就只是個php檔而已
我們只是將其php檔include到我們的php中
並呼叫他所幫我們寫好的Flickr函式
有興趣的的人可以一一對照Flickr API和其phpFlickr的functions

下載好後將檔案解壓縮到我們的php網頁的資料夾中
首先我們要先include其php檔到我們的php網頁中
因此在我們的php頁面中我們打上:require_once("phpFlickr-2.3.0.1/phpFlickr.php");
(其中phpFlickr-2.3.0.1是我所存放phpFlickr.php的資料夾)
如此便可使用其phpFlickr所提供的functions了...

再來就是先建立一個phpFlickr的物件:$f = new phpFlickr("你的Flickr API Key");
phpFlickr便會自動幫你完成Flickr API所需要驗證的程序
而此後只需再利用其物件呼叫phpFlickr的functions...

例如如果我們想呼叫Filckr中的flickr.photos.search()這個API
我們只要利用phpFlickr的photos_search()這個function即可:
$search_result = $f->photos_search(array("text"=>$search_place));

此時photos_search()所回傳的陣列是相對應於Flickr API文件中所回傳的xml格式:

因此如果我們想要取用其所回傳的陣列元素
只需依照其xml的格式一一擷取即可,例如:
//建立照片的html tag
$photo_context = $f->photos_getInfo($search_result['photo'][$count]['id']);
$photo_html = $photo_html . "<a href=" . $photo_context['urls']['url']['0']['_content'] . ">";
//透過buildPhotoURL()來取得該照片的原始路徑(src),並以'square'(小方塊)的方式來顯示
$photo_html = $photo_html .  "<img border='0' alt='" .$search_result['photo'][$count]['title'] . "' src=" .$f->buildPhotoURL($search_result['photo'][$count], 'square') .">";
$photo_html = $photo_html . "</a>";

(其中$count為目前所取的陣列元素索引值)
第四行中我們就利用了photos_search()所回傳到變數:$search_result['photo'][$count]['title']來取得目前照片的title內容
而我們亦可利用其他的functions來更進一步的取得其他的相關資訊,並建立其照片的html tag
像是第二行中所呼叫的getInfo()來取得該照片的細部資訊
其回傳內容可參考flickr.photos.getInfo所回傳的xml格式:

如此便可透過陣列來一一取得各個照片的相關資訊
並在透過第四行中的buildPhotoURL()這個function來取得該照片的原始路徑(src),並以'square'(小方塊)的方式來顯示
而其他資訊亦可參考其xml格式來一一透過陣列元素取得,以此類推...

最後再將其function所回傳的html嵌入至你所想要顯示照片的地方就可以顯示了~
(像我就是嵌入到我的GMarkers中...)
至於要做到怎樣的程度就看各位的創意和需求嚕!!

參考資料:
Flickr Services:http://www.flickr.com/services/
phpFlickr:http://phpflickr.com/