某プロジェクトで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いいね!
宣伝
メルマガやってます→ ゆーすけべーラジオ