Pixivのタイトル、タグ検索から一定数以上のブックマークがある画像だけを保存するスクリプト

これは何?

  1. スクリプトがある場所に検索ワード名のディレクトリを作成します
  2. 最後のページまで保存対象となる画像(一定ブックマーク数以上)を保存し続けます
続きを読む

Webサービス運営の面白さ

  1. パフォーマンス改善
  2. 利用者の存在

私が実際にWebサービスを運営していたころに、面白いと思ったことはこれぐらいです。
以下体験談。

パフォーマンス改善

Webサービス運営開始から数ヵ月後、人が多くなってきて想定していたパフォーマンスを維持できなくなってしまったことがありました。何らかの改善をしなければと思ったのですが、当時はプログラミングがあまりできなかったため、使用していた既存のスクリプトがどのように動いているのか分からず途方に暮れてしまいました。しかし、今やらなければ後でもっと酷くなると思い未知の領域への飛込みを決意しました。
そして、1週間かけて動きを理解して、また1週間かけてサービスに特化したスクリプトに作り変えることができました。結果としてパフォーマンスが大幅に改善したときの達成感は忘れられません。その後も何回か改善を行いましたが、時間を忘れて取り組むことができる作業でした。

利用者の存在

徐々に利用者が増えていき、掲示板で自サービスのアドレスを見かけるようになるのは嬉しいし面白いです。
最終的には特定の領域で空気のように利用されるサービスとなったので、これの面白さは無くなってしまいました。

運営してみて

上に挙げたこと以外にもたくさんの出来事がありました。
楽しいことだらけではなく、厳しい批判もありますが、私はまたたくさんの人が利用するWebサービスを運営したいです。

CentOS 5.3(coLinux 0.7.4)にRuby 1.9.1とRailsをインストール

  • 事前に以下のmkdirを実行しています
mkdir -p ~/work/tar && mkdir ~/work/src
  • Ruby 1.9.1をSourceからインストール
# wget ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.1-p129.tar.bz2 -P ~/work/tar
# tar jxvfC ~/work/tar/ruby-1.9.1-p129.tar.bz2 ~/work/src
# cd ~/work/src/ruby-1.9.1-p129
# ./configure
# make
# make install
  • 確認
# ruby -v
ruby 1.9.1p129 (2009-05-12 revision 23412) [i686-linux]
# ruby -e 'puts "Hello, world!"'
Hello, world!

インストールされ、動いている。

  • Railsをインストール
# gem install rake
# gem install rails
  • 確認
# gem list --local

 *** LOCAL GEMS ***

actionmailer (2.3.2)
actionpack (2.3.2)
activerecord (2.3.2)
activeresource (2.3.2)
activesupport (2.3.2)
rails (2.3.2)
rake (0.8.7)

インストールされている。


つまづきもなく簡単にできてしまった。

Pixivの認証が必要なところの物を取るスクリプト

プログラミング勉強中です。拙いですが公開。

  • 構成物
    • pixiv.rb
    • config.yaml

pixiv.rb

#! ruby
require 'net/http'
require 'uri'
require 'yaml'
# 設定ファイル
CONFIG_FILE = 'config.yaml'

class AccessPixiv
  # InitializeでCookieを取得しHeaderも構築する
  # 成功:Trueを返す
  # 失敗:Falseを返す
  def initialize
    config = YAML.load_file(CONFIG_FILE)

    Net::HTTP.start('www.pixiv.net', 80) do |http|
      response = http.post('/index.php',
                           'mode=login&pixiv_id=' + config['pixiv_id'] + '&pass=' + config['pixiv_pass'],
                           'User-Agent' => config['user_agent']
                          )
      if disp_error(response) == true
        cookie = response['Set-Cookie'].split(',')
        @header = {
          'User-Agent' => config['user_agent'],
          'Cookie' => cookie[1]
        }
        return true
      else
        return false
      end
    end
  end

  # uriで指定されたページ内容を取得する
  # 成功:対象URIの内容を返す
  # 失敗:Falseを返す
  def get(uri)
    site = URI.parse(uri)
    Net::HTTP.start(site.host, 80) do |http|
      response = http.get(site.request_uri, @header)
      if disp_error(response) == true
        return response.body
      else
        return false
      end
    end
  end

  private
  # エラー表示用
  def disp_error(response)
    case response
    when Net::HTTPBadRequest
      puts 'Error 400'
    when Net::HTTPUnauthorized
      puts 'Error 401'
    when Net::HTTPForbidden
      puts 'Error 403'
    when Net::HTTPNotFound
      puts 'Error 404'
    when Net::HTTPInternalServerError
      puts 'Error 500'
    when Net::HTTPServiceUnavailable
      puts 'Error 503'
    else
      return true
    end
    return false
  end
end

config.yaml

pixiv_id  : 'ゆーざあいでぃ'
pixiv_pass: 'ぱすわーど'
user_agent: 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)'

使い方

pixiv = AccessPixiv.new
puts pixiv.get('http://www.pixiv.net/mypage.php')

これで認証がされた状態のmypage.phpの内容が表示されます。

pixiv = AccessPixiv.new
f = open('pixiv.jpg', 'wb')
f.puts pixiv.get('がぞうのあどれす')
f.close

とかやると認証しないと取れないでかい画像も取得して保存できます。


これを基礎にしていろいろ作ります。おわり。