yahoo search apiで画像を取得

yahoo search apiで画像を取得したいなぁと前々から思っていたのを急に思い出して書いたスクリプトxmlの扱いが分からなくて四苦八苦。検索結果から最大50の画像ファイルを取得する。

・・それにしてもよくここまで見にくいスクリプトを書いたものだ。lambda便利だから多用する癖があるみたいだ。あとで書き直すかも。

  • 使い方

>>> import imageget
>>> imageget.fetch_seg(query, dir)

    • 今のところqueryにマルチバイト文字列は使えない
    • dirはかならずパスの区切り文字で終わらせる(win -> "\\", linux -> "/")
# imageget.py
appid = yourkey

def makeurl(query = "test", results = 50):
    base = "http://api.search.yahoo.co.jp/ImageSearchService/V1/imageSearch"
    id = "appid=" + appid
    query = "query=" + query
    results = "results=" + str(results)
    follow = "&".join([id, query, results])
    return base + "?" + follow

import urllib2

getxml = lambda query: urllib2.urlopen(makeurl(query)).read()

from xml.etree.cElementTree import XML, ElementTree
f = lambda x: x.getchildren()[3].text
g = lambda et: [f(x) for x in et.getchildren()]
h = lambda s: g(XML(s))
fetch = lambda query: h(getxml(query))

import urllib, urlparse, os
conv_base = lambda url: urlparse.urlparse(url)[2]
conv = lambda url: os.path.basename(conv_base(url))

fetch_seg = lambda query, dir: [urllib.urlretrieve(x, dir+conv(x)) for x in fetch(query)]