SQLの窓

2010年01月09日


Ruby : 根本的なエラー処理 / 標準エラー出力の出力先を標準出力に変更する

>$stderr には $deferr という別名がありますが、 $deferr は非推奨([[unknown:obsolete]])
>になったので、新しいコードでは常に $stderr を使ってください。
variable $deferr : Ruby 1.8.7 リファレンスマニュアル

実行して、CGI エラー( 500系 )になる場合はどうしようも無いですが、
何も表示されない場合は有効です。普通に行指定されたエラー内容が
表示されます
▼
errtest.rb:10:in `require': no such file to load -- abc (LoadError)
	from errtest.rb:10
#!/usr/local/bin/ruby
print "Content-type: text/html\n\n"

# 標準エラー出力の出力先を標準出力に変更
$stderr = $stdout

# ファイルの場合
#$stderr = File.open("./err.log", "w")

require 'abc'

print "ok" 





タグ:ruby
posted by lightbox at 2010-01-09 19:26 | Ruby | このブログの読者になる | 更新情報をチェックする

Ruby : ココログのアクセス解析ページの当日データの取得

いろいろなブログの管理情報を取得しようと思っているのですが、
まずは確実なココログからアクセス解析のテストを行いました。
( Seesaa はもう既に実運用しています )

Seesaa は、複数のブログがあるので、CRON で5分毎に呼び出して、
呼び出されるたびにDBを更新してカウントアップし、その値によって
各ブログのアクセス解析数を取得して再びDBに更新しています。
ですから、一つのブログの更新間隔は、1時間毎くらいでちょうどいいです。

今回、ココログを追加しようとテストしてみました。

※ rb は、utf-8n の lf 改行です( 改行は lf でないとエラーになっています )
#!/usr/local/bin/ruby
print "Content-Type: text/html; Charset=utf-8\n\n";

# ▼FORM からデータを引き渡す場合に必要
#require "cgi"
#cgi = CGI.new

ENV['GEM_HOME']="/home/lightbox/gems"
$LOAD_PATH.push('/home/lightbox/lib')

require 'rubygems'
require 'mechanize'

agent = WWW::Mechanize.new
#@nifty にログイン
page = agent.get("https://login.nifty.com/service/login")
form = page.forms.first
form["username"] = 'ユーザーID'
form["password"] = 'パスワード'
page = form.submit

# アクセス解析ページへアクセス
page = agent.get('http://app.cocolog-nifty.com/t/app/control/stats')
#fp = open("./log_01.txt", "w") 
#fp.puts(page.body) 
#fp.close 

# この手順でアクセスする必要があります
page = agent.get('http://app.cocolog-nifty.com/t/app/control/stats?nwsThough=1')


/アクセス数:.+right">(\d+?)<\/td>.+訪問者数:.+right">(\d+?)<\/td>/m =~ page.body 
print $1 + "," + $2  + "<br>\n"


#print page.body
print 'ココログ当日アクセス数';

直接関連する記事
Ruby : ココログギャラリーの設定から、Ruby の基本処理




タグ:ruby ココログ
posted by lightbox at 2010-01-09 17:47 | Ruby | このブログの読者になる | 更新情報をチェックする

2010年01月06日


Ruby : メソッド定義で URLエンコード

PHP で比較テストしています

特別な理由が無ければ、URI.escape で問題無いと思いますが、
ざっと使って以下のようになっていました
■スペースが%20 に変換される 
■/がそのまま
そこで、正規表現で置換しています。
( 他の文字はテストしていませんので、正式なテストではありません )

def は、メソッド定義でトップレベルでは「関数」のようなものですが、
単純なインタープリタのようなので、C言語と同じく前方参照でした。定義してから
でないと実行できません。

gsub は全て置き換える処理で、sub だと一つだけになります。
他の言語での /パターン/g と書かれる事のある処理ですね、
(ちょっと解りにくい)


#!/usr/local/bin/ruby
print "Content-type: text/html; Charset=euc-jp\n\n"

require 'uri'

a = "日本/語A B /表示%"

print a + "<br>"

#トップレベルならばどこからでも呼べるメソッド
#このようなメソッドは結果として他の言語における
#「関数」のように使えます
# ■ 但し、前方参照
def urlencode(s)

	s = s.gsub(/ /,'+')
	s = URI.escape(s)
	s = s.gsub(/\//,'%2F')
	return s

end

print urlencode(a) + "<br>"





タグ:ruby
posted by lightbox at 2010-01-06 23:40 | Ruby | このブログの読者になる | 更新情報をチェックする

2010年01月04日


Ruby : Seesaa の複数のブログの現在の訪問者数とページビューの一覧

実際10以上作ってますが、良く使っているのは6つくらい。
でも、順番にアクセス解析見て行くのはとても面倒なので作りました。

以下のサンプルだけで言えば、ループ処理にできますが、
実際今後の運用では個別になると思うのであえてそのままです。

テストの為今日時々実行してみましたが、
※ さすがに混んでる時間帯はサーバーエラーになりますね

実際は、ひとつづつ CRON に登録して、ログを見るように
したほうが良いです。でないと、一つでもかなり待つ事になります。
#!/usr/local/bin/ruby
print "Content-type: text/html; Charset=shift_jis\n\n"

require "cgi"
cgi = CGI.new

ENV['GEM_HOME']="/home/lightbox/gems"
$LOAD_PATH.push('/home/lightbox/lib')

require 'rubygems'
require 'mechanize'

agent = WWW::Mechanize.new
#seesaa にログイン
page = agent.get("https://ssl.seesaa.jp/www/pages/welcome/login/input")
form = page.forms.first
form["member__email"] = "メールアドレス"
form["member__password"] = "パスワード"
form.submit

print "<pre>"


# 対象ブログのページ
page = agent.get('http://blog.seesaa.jp/pages/my/blog/home/?blog_id=ブログ番号')
page = agent.get('http://blog.seesaa.jp/pages/my/blog/access_log/report/index?log_type=file')

/log\-total\-text.+log\-total\-num">.+?>(.+?)<.+log\-total\-num">.+?>(.+?)</m =~ page.body
print "logical error   " +  $1 + "/" + $2 + "\n"

# 対象ブログのページ
page = agent.get('http://blog.seesaa.jp/pages/my/blog/home/?blog_id=ブログ番号')
page = agent.get('http://blog.seesaa.jp/pages/my/blog/access_log/report/index?log_type=file')

/log\-total\-text.+log\-total\-num">.+?>(.+?)<.+log\-total\-num">.+?>(.+?)</m =~ page.body
print "ARGUS   " +  $1 + "/" + $2 + "\n"

# 対象ブログのページ
page = agent.get('http://blog.seesaa.jp/pages/my/blog/home/?blog_id=ブログ番号')
page = agent.get('http://blog.seesaa.jp/pages/my/blog/access_log/report/index?log_type=file')

/log\-total\-text.+log\-total\-num">.+?>(.+?)<.+log\-total\-num">.+?>(.+?)</m =~ page.body
print "手パレ   " +  $1 + "/" + $2 + "\n"

# 対象ブログのページ
page = agent.get('http://blog.seesaa.jp/pages/my/blog/home/?blog_id=ブログ番号')
page = agent.get('http://blog.seesaa.jp/pages/my/blog/access_log/report/index?log_type=file')

/log\-total\-text.+log\-total\-num">.+?>(.+?)<.+log\-total\-num">.+?>(.+?)</m =~ page.body
print "画狼   " +  $1 + "/" + $2 + "\n"

# 対象ブログのページ
page = agent.get('http://blog.seesaa.jp/pages/my/blog/home/?blog_id=ブログ番号')
page = agent.get('http://blog.seesaa.jp/pages/my/blog/access_log/report/index?log_type=file')

/log\-total\-text.+log\-total\-num">.+?>(.+?)<.+log\-total\-num">.+?>(.+?)</m =~ page.body
print "琴線   " +  $1 + "/" + $2 + "\n"

# 対象ブログのページ
page = agent.get('http://blog.seesaa.jp/pages/my/blog/home/?blog_id=ブログ番号')
page = agent.get('http://blog.seesaa.jp/pages/my/blog/access_log/report/index?log_type=file')

/log\-total\-text.+log\-total\-num">.+?>(.+?)<.+log\-total\-num">.+?>(.+?)</m =~ page.body
print "アプリ   " +  $1 + "/" + $2 + "\n"


print "</pre>"

print "最新アクセスリスト一覧"

#print page.body

/m は、. と \s に改行コードをマッチさせる為に使用しています。
( ページ全体を一つの文字列として処理 )




タグ:ruby
posted by lightbox at 2010-01-04 15:36 | Ruby | このブログの読者になる | 更新情報をチェックする

2010年01月03日


Ruby : ココログギャラリーの設定から、Ruby の基本処理

関連する記事
Ruby : ココログアルバムの一括設定


チェックボックスのように、設定されない CGI の変数は、nil になります。
また、比較の仕方は直接比較演算でいいようです。とにかく、完全なマニュアル
が見当たらないので、細かいところは試すしかなく、サンプルが有用です。

if は、then を使用していますが、文法が以下のようになつているので書いています

--------------------------
if 式 [then]
  式 ...
[elsif 式 [then]
  式 ... ]
...
[else
  式 ... ]
end
--------------------------

またこうも書かれています
--------------------------
Ruby では false または nil だけが偽で、それ以外は 0 や空文字列も含め全て真です。 
--------------------------

つまり、条件部分に値だけを書くと予想外の結果になる可能性があります
#!/usr/local/bin/ruby
print "Content-Type: text/html; Charset=shift_jis\n\n";

require "cgi"
cgi = CGI.new

ENV['GEM_HOME']="/home/lightbox/gems"
$LOAD_PATH.push('/home/lightbox/lib')

require 'rubygems'
require 'mechanize'

agent = WWW::Mechanize.new
#@nifty にログイン
page = agent.get("https://login.nifty.com/service/login")
form = page.forms.first
form["username"] = cgi['username'][0]
form["password"] = cgi['password'][0]
page = form.submit

# 対象ギャラリーの設定ページ
page = agent.get('http://app.cocolog-nifty.com/t/app/gallery/configure?set_id='+cgi['gid'][0])

# 設定ページ
page = agent.get('http://app.cocolog-nifty.com/t/app/gallery/configure?set_id='+cgi['gid'][0]+'&nwsThough=1')

form = page.forms.first

# ギャラリー名
if cgi['name'][0] != '' then
	form["name"] = cgi['name'][0]
end

# ブログのサイドバーに表示する
if cgi['is_public'][0] == nil then
	form.checkbox_with(:name => 'is_public').uncheck 
else
	form.checkbox_with(:name => 'is_public').check 
end

# 写真のサムネイル横列数
if cgi['num_columns'][0] != '' then
	form["num_columns"] = cgi['num_columns'][0]
end

# サムネイルを正方形に揃える
if cgi['crop'][0] == nil then
	form.checkbox_with(:name => 'crop').uncheck 
else
	form.checkbox_with(:name => 'crop').check 
end

# サムネイルのサイズ
case cgi['combo1'][0]
when '1'
	form.radiobuttons_with(:name => 'thumb_size')[2].check 
when '2'
	form.radiobuttons_with(:name => 'thumb_size')[1].check 
when '3'
	form.radiobuttons_with(:name => 'thumb_size')[0].check 
end

# 写真の表示サイズ
form.field_with(:name => 'full_size').value = cgi['combo2'][0]

result = form.submit

#print result.body
print 'ココログ : アルバムの設定の更新を終了しました';






posted by lightbox at 2010-01-03 00:37 | Ruby | このブログの読者になる | 更新情報をチェックする

2009年12月28日


Ruby : Seesaa のブログ設定画面で、Form選択からコンボボックス、ラジオボタン、チェックボックスの設定

ブログを新しく作成した場合、初期設定がけっこうたいへんです。
Ruby に全部やらせてしまおうと以前から思ってましたので、手始めとして
ブログ設定の自動設定を作成しました。

全てうまくいったら WEB サービスして公開します
#!/usr/local/bin/ruby
print "Content-type: text/html\n\n"

require "cgi"
cgi = CGI.new

ENV['GEM_HOME']="/home/lightbox/gems"
$LOAD_PATH.push('/home/lightbox/lib')

require 'rubygems'
require 'mechanize'

agent = WWW::Mechanize.new
#seesaa にログイン
page = agent.get("https://ssl.seesaa.jp/www/pages/welcome/login/input")
form = page.forms.first
form["member__email"] = "メールアドレス"
form["member__password"] = "パスワード"
form.submit

# 対象ブログのページ
page = agent.get('http://blog.seesaa.jp/pages/my/blog/home/?blog_id=ブログ番号')

# 設定ページ
page = agent.get('http://blog.seesaa.jp/pages/my/blog/settings/basics/edit/input')

# 3番目のフォーム
form = page.form_with(:name => 'myform')

# カテゴリコンボボックスを IT/インターネット にセット
form.field_with(:name => 'blog_category_id').value = "41"
# form.field_with(:name => 'blog_category_id').options[1].value

# メールマガジン無し
form.checkbox_with(:name => 'blog__mailmag_text').uncheck
form.checkbox_with(:name => 'blog__mailmag_html').uncheck
form.checkbox_with(:name => 'blog__mailmag_summary').uncheck

# コメントを通知する
form.radiobuttons_with(:name => 'blog__alert_comment')[0].check
form["blog__alert_email"] = "メールアドレス"

# 共有ヘッダを無しでセット
form.radiobuttons_with(:name => 'blog_ext__common_header')[1].check

# 更新
page = form.click_button(form.buttons[1])

print "seesaa : settings_basics : update : ok"





タグ:ruby Mechanize
posted by lightbox at 2009-12-28 02:19 | Ruby | このブログの読者になる | 更新情報をチェックする
Seesaa の各ページの表示について
Seesaa の 記事がたまに全く表示されない場合があります。その場合は、設定> 詳細設定> ブログ設定 で 最新の情報に更新の『実行ボタン』で記事やアーカイブが最新にビルドされます。

Seesaa のページで、アーカイブとタグページは要注意です。タグページはコンテンツが全く無い状態になりますし、アーカイブページも歯抜けページはコンテンツが存在しないのにページが表示されてしまいます。

また、カテゴリページもそういう意味では完全ではありません。『カテゴリID-番号』というフォーマットで表示されるページですが、実際存在するより大きな番号でも表示されてしまいます。

※ インデックスページのみ、実際の記事数を超えたページを指定しても最後のページが表示されるようです

対処としては、このようなヘルプ的な情報を固定でページの最後に表示するようにするといいでしょう。具体的には、メインの記事コンテンツの下に『自由形式』を追加し、アーカイブとカテゴリページでのみ表示するように設定し、コンテンツを用意するといいと思います。


※ エキスパートモードで表示しています

アーカイブとカテゴリページはこのように簡単に設定できますが、タグページは HTML 設定を直接変更して、以下の『タグページでのみ表示される内容』の記述方法で設定する必要があります

<% if:page_name eq 'archive' -%>
アーカイブページでのみ表示される内容
<% /if %>

<% if:page_name eq 'category' -%>
カテゴリページでのみ表示される内容
<% /if %>

<% if:page_name eq 'tag' -%>
タグページでのみ表示される内容
<% /if %>
この記述は、以下の場所で使用します
container 終わり

フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
BUTTONS (CSS でボタン)
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり