分類
程式技術

利用YQL抓出Flickr相簿中的照片url

在 Flickr 中, 有許多照片(廢話), 而這些照片, 也有放在相簿集(set)裡, 如何把相簿集裡的相片的 url 取出來呢?

首先我們先來看一個工具, 叫做 YQL (Yahoo! Query Language): http://en.wikipedia.org/wiki/Yahoo!_query_language , 這個語言是望文生義, 就是用來進行查詢 Yahoo! 服務的語言, 而我們需要的功能, 剛好裡面有提供, 所以我們就利用這個查詢語言來進行查詢, 先來看看語法, 到這個 YQL Console 來看: http://developer.yahoo.com/yql/console/

來到這裡, 真是開發者的天堂, Yahoo! 的服務查詢, 這裡幾乎都有提供, 而今天我們要查找的正是這個 table: flickr.photosets.photos, 假設今天要查的 photo set 是這個 url: http://www.flickr.com/photos/okilyt/sets/72157600079438372/, 則 set_id 就是 72157600079438372, 於是輸入如下的語法:

select * from flickr.photosets.photos where photoset_id = 72157600079438372

就會生出如下的 xml:

<?xml version="1.0" encoding="UTF-8"?>
<query xmlns:yahoo="http://www.yahooapis.com/v1/base.rng"
    yahoo:count="10" yahoo:created="2010-08-06T11:19:06Z" yahoo:lang="en-US">
    <diagnostics>
        <publiclyCallable>true</publiclyCallable>
        <url execution-time="141"><![CDATA[http://api.flickr.com/services/rest/?method=flickr.photosets.getPhotos&photoset_id=72157600079438372&page=1&per_page=10]]></url>
        <user-time>142</user-time>
        <service-time>141</service-time>
        <build-version>8771</build-version>
    </diagnostics> 
    <results>
        <photo farm="1" id="460118008" isprimary="1" secret="4d856aaa72"
            server="239" title="DSC_3989"/>
        <photo farm="1" id="460125135" isprimary="0" secret="15a3d24484"
            server="208" title="DSC_3987"/>
        <photo farm="1" id="460117456" isprimary="0" secret="76bdfd928c"
            server="191" title="DSC_3986"/>
        <photo farm="1" id="460117112" isprimary="0" secret="515535f02e"
            server="253" title="DSC_3983"/>
        <photo farm="1" id="460116928" isprimary="0" secret="68286fc46a"
            server="200" title="DSC_3981"/>
        <photo farm="1" id="460116620" isprimary="0" secret="4245ef4c5a"
            server="183" title="DSC_3980"/>
        <photo farm="1" id="460123637" isprimary="0" secret="68351dfe14"
            server="236" title="DSC_3963"/>
        <photo farm="1" id="460123365" isprimary="0" secret="80edceee74"
            server="243" title="DSC_3961"/>
        <photo farm="1" id="460115832" isprimary="0" secret="80b8d482bf"
            server="246" title="DSC_3958"/>
        <photo farm="1" id="460122569" isprimary="0" secret="2ee7c9e00e"
            server="242" title="DSC_3954"/>
    </results>
</query> 

真是方便耶, 不過筆數好像只有十筆, 全部應該要有 18筆才對, 所以查了一下資料, http://developer.yahoo.com/yql/guide/paging.html , 發現可以在 table 後方加上 (0) 來進行全部查出, 於是調整一下語法如下:

select * from flickr.photosets.photos(0) where photoset_id = 72157600079438372

就可以方便地把整個 photo set 中的相片查找出來了, 而相片的 url 就可以利用這些 xml 來組合出來, 語法如下:

http://farm[farm].flickr.com/[server]/[id]_[secret].jpg

很容易吧! 這樣一來, 要取出某相簿的照片 url 就方便多了, 寫成小工具, 放在這裡: http://sample.diary.tw/flickrset/

參考資料: http://www.nakedtechnologist.com/?p=476

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。