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)]