某プロジェクトでRuby on Rails使うっていぅんで 「アジャイルWebアプリケーション開発」本なんて買ってチュートリアルとかやってます。 ただ、Ruby自体なにも分からないので、Rails覚えてもどれだけできるかがよく分からなす。 ってことでRubyを勉強する!と先ほど書いてみた4つのスクリプトをご紹介。間違ってたらツッコミよろしくおくんなまし。 とはいえ簡単なやつだよ!でも新しいおっぱいダウンロードスクリプトもあるよ!
open-uri.rb
まずは、Perlで言うLWP的なもの、つまりHTTPクライアントでこの日記のHTMLを取得してみるよー。 あら、簡単だねっ。
require "open-uri"
html = open("http://yusukebe.com/").read;
p html
twitter-search.rb
お次に「お得意の」APIを叩く系をやってみる。Twitter Search APIが簡単なので、 そこから「ruby」という発言を取ってきて表示させます。 Perlで言うURIモジュールの「query_form」メソッドが欲しかったので、Addressable::URIを使いましたぉ。
require "addressable/uri"
require "open-uri"
require "json"
uri = Addressable::URI.parse('http://search.twitter.com/search.json')
uri.query_values = { :q => "ruby", :lang => "ja" }
json = open(uri).read
ref = JSON.parse(json)
ref["results"].each do |tweet|
puts "@" + tweet["from_user"] + " : " + tweet["text"]
end
sinatra-oauth.rb
今度はWebアプリもつくっちゃおう!sinatra使ってFoursquareのOAuth v2なログインを試してみるよ。 sinatraのsessionを有効にするために「enable :sessions」しなくてはいけないところにハマったけど、 OAuthとかは、APIのドキュメントをしっかり読めばすぐ出来たよ。
require "sinatra"
require "addressable/uri"
require "pit"
require "open-uri"
require "json"
enable :sessions, :logging
config = Pit.get('foursquare.com')
get '/' do
@name = nil
if session[:access_token]
uri = Addressable::URI.parse('https://api.foursquare.com/v2/users/self')
uri.query_values = {
:oauth_token => session[:access_token]
}
json = open(uri).read
@name = JSON.parse(json)["response"]["user"]["firstName"]
logger.info @name
end
erb :index
end
get '/login' do
uri = Addressable::URI.parse("http://foursquare.com/oauth2/authenticate")
uri.query_values = {
:client_id => config["client_id"],
:response_type => 'code',
:redirect_uri => request.base_url + '/callback',
}
redirect uri.to_s
end
get '/logout' do
session[:access_token] = nil
redirect "/"
end
get '/callback' do
code = params[:code]
uri = Addressable::URI.parse('https://foursquare.com/oauth2/access_token')
uri.query_values = {
:client_id => config["client_id"],
:client_secret => config["client_secret"],
:grant_type => 'authorization_code',
:redirect_uri => request.base_url + '/callback',
:code => code,
}
json = open(uri).read
data = JSON.parse(json)
session[:access_token] = data["access_token"]
redirect '/'
end
__END__
@@ index
<% if @name %>
Hi, <%= @name %> <br />
<a href="/logout">Logout</a>
<% else %>
<a href="/login">Login</a>
<% end %>
yahoo-oppai.rb
最後はお待ちかね、おっぱいダウンロードスクリプトだよ。 今回、ちょっと工夫していて、まずYahooのプレミアムなんちゃらイメージサーチってのを使いつつ、 Tumblrからの画像に絞って検索をかけてるよー。こうすることで、高品質なおっぱい画像が集まると思うんだ。
*追記*
sugamasaoさんからツッコミいただきまして、インクリメント的な書き方は count += 1 でおkらしいです! count = count + 1 とださく書いていたのを修正しておきました。
# -*- coding: utf-8 -*-
require "pit"
require "addressable/uri"
require "open-uri"
require "xmlsimple"
require "digest/md5"
require 'pathname'
dir = Pathname.new('./data')
config = Pit.get("yahoo-api")
count = 1
page = 1
loop do
uri = Addressable::URI.parse("http://search.yahooapis.jp/PremiumImageSearchService/V1/imageSearch")
uri.query_values = {
:appid => config["appid"],
:query => 'おっぱい',
:results => 20,
:adult_ok => 1,
:format => 'jpeg',
:site => 'tumblr.com',
:start => (page - 1) * 20 + 1
}
res = open(uri) rescue break
xml = res.read
data = XmlSimple.xml_in(xml)
break unless data["Result"]
data["Result"].each do |item|
url = item["Url"][0]
filename = Digest::MD5.hexdigest(url) + '.jpg'
filepath = dir + filename
puts "#{count} : Download #{url} ..."
res = open(url) rescue next
open(filepath,'w').print res.read
count += 1
end
page += 1
end
実行すると... 1000枚ほどのおっぱい画像が集まったー!
ベストプラクティス的なことが分からないけれど、なんとか出来たよ!Rubyいいね!
宣伝
メルマガやってます→ ゆーすけべーラジオ