ゆーすけべー (@yusukebe) さんが出版した「Webサービスのつくり方」を読みました。献本ありがとうございます!

Webサービスのつくり方 ~「新しい」を生み出すための33のエッセイ (Software Design plus)

この本は5章構成になっています。それぞれの内容は以下の通りです。

1章 - 心構えと下準備
2章 - 企画
3章 - 設計
4章 - 開発
5章 - プロモーションと運用

2章や3章も面白いのですが、個人的には1章、2章、5章が普段なかなか聞くことの無い話で面白かったです。Webサービスを作るときの考え方からプロモーションの方法まで、一通りまとまっていて参考になりました。特にWebサービスを自分で作ったことないけど作ってみたい、みたいな人はぜひ一度読んでみると良いと思います。

中でも興味深かったのが「いかにして大量のおっぱい画像をダウンロードするか」というコーナー。参考としてPerlのコードが載っていたので あくまで勉強のために コードの写経をしてみた、、、のですが、なぜかうまく動かず。(後でわかったのですが、認証時のパスワードが間違っていたっぽい><)

Perlは久しぶりで弄るの難しかったので、Rubyで同様の処理をするコードを書いて動作を確認してみました。無事動作しましたよ!!本の中でもおっぱい画像をダウンロードするスクリプトを見てPerlを勉強したっていう高校生の話が載ってたし、このコードを読んでそういう若者が出てくると良いですね :)

require 'cgi'
require 'net/https'
require 'open-uri'
require 'rubygems'
require 'json'

Dir.mkdir('oppai') unless File.exist?('oppai')

account_key = YOUR_ACCOUNT_KEY

def build_params(page_count)
  {
    'Query' => CGI.escape("'おっぱい'"),
    'Market' => "'ja-JP'",
    'Adult' => "'off'", # 重要
    '$format' => 'JSON',
    '$top' => 50,
    '$skip' => page_count * 50
  }
end

page_count = 0

loop do
  query_string = build_params(page_count).map {|k,v| "#{k}=#{v}" }.join('&')
  req = Net::HTTP::Get.new("/Bing/Search/Image?#{query_string}")
  req.basic_auth('', account_key) # パスワードは空でおk

  https = Net::HTTP.new('api.datamarket.azure.com', '443')
  https.use_ssl = true # httpsでアクセスするときには必須
  https.verify_mode = OpenSSL::SSL::VERIFY_NONE # 証明書を確認しない

  https.start do |http|
    res = http.request(req)
    JSON.parse(res.body)['d']['results'].each do |result|
      filename = File.basename(result['MediaUrl'])
      begin
        open("oppai/#{filename}", 'wb') do |f|
          open(result['MediaUrl']) do |image_data|
            puts "Now downloading... #{filename}"
            f.write(image_data.read)
          end
        end
      rescue TimeoutError, StandardError
        next
      end
    end
  end

  sleep 5
  page_count += 1
end

rescue節にクラスを指定しないと StandardError とそのサブクラスのエラーをキャッチしてくれるんですが、TimeoutError はInterrupt のサブクラスであって StandardError のサブクラスではないので、rescue節で明示的に指定しないとキャッチできません。ここだけ注意です〜。

あと、コードの中の YOUR_ACCOUNT_KEY の部分だけは各自置き換えてください。この値はWindows Azure Marketplaceにユーザ登録すると手に入ります。こんな感じ。

account_key


最後に印象に残った言葉をいくつか抜粋します。良い言葉や。

Shut the fuck up and write some code(ぐだぐだ言ってないでコードを書けよ、ハゲ)

そこに1,000人いたとして、アイデアを思いつくのが100人、アイデアを実現するのが10人、アイデアで成功するのが1人

車輪の再発明はしてもいいけど、仕事のときは絶対駄目だよ

There's More Than One Way To Do It(やり方は一つじゃない)
このエントリーをはてなブックマークに追加