読者です 読者をやめる 読者になる 読者になる

ゆーすけべー日記

はてなBlogってどーなの!?

Rubyやってみる!(新おっぱいスクリプトもあるぉ)

Technologies Ruby

某プロジェクトで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枚ほどのおっぱい画像が集まったー!

スクリーンショット 2012-05-20 16.42.46.png




ベストプラクティス的なことが分からないけれど、なんとか出来たよ!Rubyいいね!

宣伝

メルマガやってます→ ゆーすけべーラジオ