Pixivのタイトル、タグ検索から一定数以上のブックマークがある画像だけを保存するスクリプト2
ページ取得処理を明確に分離しました。
続きを読むPixivのタイトル、タグ検索から一定数以上のブックマークがある画像だけを保存するスクリプト
これは何?
- スクリプトがある場所に検索ワード名のディレクトリを作成します
- 最後のページまで保存対象となる画像(一定ブックマーク数以上)を保存し続けます
Webサービス運営の面白さ
- パフォーマンス改善
- 利用者の存在
私が実際に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
とかやると認証しないと取れないでかい画像も取得して保存できます。
これを基礎にしていろいろ作ります。おわり。