できたよー!

いろいろ影響されて作ったけどなんで元ネタよりもコード長くなってしまうん?
まあいいです。

GUIに載せようと思ってチマチマしてたんですけど、.exeに固めるときに拡張ライブラリが使えないとか致命的なエラーを出したのでもうこれで公開。
そのうちGUIに載せます。

あくまでも「壁紙」検索ツールですが、場合によってはフィルタによって駆除されてしまう「壁紙」もあるかもと思って、フィルタも外しときましたよ^−^

    _  ∩
  ( ゚∀゚)彡 おっぱい!おっぱい!
  (  ⊂彡
   |   | 
   し ⌒J

ああ、そのまま使うと大変なことになるので、MAIN以下の値なんかを変えてください。適度に。
初めて実用的なアプリを作ったけど、初めてがこんなのでいいのかなorz

require 'open-uri'
require "rexml/document"
require 'kconv'
require 'net/http'
require 'uri'
require "cgi"
Net::HTTP.version_1_2

# ファイルを保存
def get_file(download_url, filename, key)
response = fetch(download_url,10)
if response.code == "200"
open("./img/"+key+"/"+filename, "w") do |file|
file.binmode
file.puts response.body
end
end
return filename
end

# HTTPリクエスト
def fetch( uri_str, limit = 10 )
raise ArgumentError, 'http redirect too deep' if limit == 0
response = Net::HTTP.get_response(URI.parse(uri_str))
case response
when Net::HTTPSuccess then response
when Net::HTTPRedirection then fetch(response['Location'], limit - 1)
else
#response.error!
end
return response
end

# yahoo!api関連まとめてここ
def get_img(key, start, res)
# ./img/検索キーワードを作成(ディレクトリ
path = File.dirname(__FILE__)+"/img/"
Dir::mkdir(path+key) unless FileTest.exist?(path+key)

# URL日本語エスケープ
query_key = CGI.escape(key)
start = 50 * (start.to_i-1) + 1
r = start
# yahoo!様ばんざい!
xml = REXML::Document.new(open("http://api.search.yahoo.co.jp/ImageSearchService/V1/imageSearch?appid=alto10000rpm&query=" + query_key + "&results=" + res + "&start=" + start.to_s + "&adult_ok=1"))
xml.elements.each("ResultSet/Result") {|line|
title = key + r.to_s+"."+line.elements["FileFormat"].text
r = r +1
# get_file(line.elements["ClickUrl"].text,Kconv.tosjis(line.elements["Title"].text),key)
get_file(line.elements["ClickUrl"].text, title, key)
}
end

def div_50(res)
start = res / 50
return start
end

def mod_50(res)
res = res % 50
return res
end

# Main
key = 'おっぱい'
res = 1000
start = div_50(res)
res = mod_50(res)
i = 1
if start.to_i > 0
while i <= start
get_img(key.to_s, i.to_s, '50')
i+=1
end
end
start = start + 1
if res.to_i > 0
get_img(key.to_s, start.to_s, res.to_s)
end
別におっぱい画像を落とすために頑張ってるわけじゃないです。

yahoo!のデベロッパーネットワークというところでyahoo!のコンテンツをapiで利用できるということで、目覚ましアプリなんか作ってられるか(前回の開発記事)とぶち切れて、apiを触ってみました。
yahoo!からは検索に関してWeb、画像、動画などなどapiが提供されているのですが、もちろん画像検索のapiを使ってみる。だから別におっぱい画像を(ry

rubyで書いてみた。
apiの利用は簡単だけどrubyが分からん('A`)
今は指定の検索ワードから画像を取得して保存するところまでできてます。
「できてんじゃんか!」
とかいう突っ込みはありがたいのですが、保存される画像が半開示状態('A`)
自分の作ったシステムに生殺しにされるとは!

というか、半端にruby使ってるから駄目だと思うんだ。
基礎から勉強してないのにさ。

以下ソースコード
----------------------------------------------
require 'open-uri'
require "rexml/document"
require 'kconv'
require 'net/http'
require 'uri'

Net::HTTP.version_1_2

# ファイルを保存
def get_file(download_url, filename)

response = fetch(download_url,10)

open(filename, "w") do |file|
file.puts response.body
end
return filename

end

# HTTPリクエスト
def fetch( uri_str, limit = 10 )
raise ArgumentError, 'http redirect too deep' if limit == 0

response = Net::HTTP.get_response(URI.parse(uri_str))
case response
when Net::HTTPSuccess then response
when Net::HTTPRedirection then fetch(response['Location'], limit - 1)
else
response.error!
end
return response
end

# Main
img_uri = ""
filename = ""
xml = REXML::Document.new(open("http://api.search.yahoo.co.jp/ImageSearchService/V1/imageSearch?appid=!!!Yahoo!IDを入れる!!!&query=baseball&results=1"))
xml.elements.each("ResultSet/Result") {|line|
# print line.elements["Url"].text + Kconv.toeuc(line.elements["Title"].text)+"\n"
img_uri = line.elements["Url"].text
filename =line.elements["Title"].text
}
get_file(img_uri,filename)
rubyにちょっと前から興味あったので、少しrubyを使ったソフトでも作ってみようかと。

とか、簡単に言ってみるけど、開発とか大学の講義以外でやったことない俺がいるorz
とりあえず、朝音楽を流す目覚ましソフトでも作ってみようかと思います。
大学の講義ではこういう遊び的なものは全然作ってないから、進め方さっぱりわからんです。
というか、ruby使って音楽とか流せるの?w

とりあえず、音楽流すのが難しそうだし、開発手順は音楽再生からかなぁ。

プログラミングってなんだっけ?状態からの脱却→言語仕様の理解→いきなり音楽再生モジュール?作成→タイマー部分の作成→GUIの作成(rubyでGUIとか作れんの?)→配布用パッケージ作成(こんなことできるの?)

開発プロセスはこんな感じ。GUI作れるとかは知らない。javaで確かGUI書いたことあるけど、あれjavaだったかなぁ。講義についていけなくなって、友達のソース移してたころだからできるかどうかわからんなw

とりあえず、今日はrubyのインストールからやってみんべw