SQLの窓

2014年07月25日


Ruby(mechanize) で PHP からの JSON 経由でデータベース(MySQL)の値を取得

Ruby でデータベースの処理を直接するより、普通に PHP で処理して結果を mechanize で使うと簡単になります。PHP では 現在あらゆるデータベースに対してアクセスする為の情報が豊富なので、Windows 環境でほぼ困る事が無いので、Ruby をスクリプトとして運用で使うのは非常にメリットがあると思います。

json.php(MySQLにアクセスして JSONを返す)
<?php
header( "Content-Type: text/plain; Charset=utf-8" );
header( "pragma: no-cache" );
header( "Expires: Wed, 31 May 2000 14:59:58 GMT" );
header( "Cache-control: no-cache" );

$server = 'localhost';
$db_name = 'lightbox';
$user = 'root';
$password = 'パスワード';

// 接続
$connect = @ new mysqli($server, $user, $password, $db_name);
if ($connect->connect_error) {
	die('Connect Error (' . $connect->connect_errno . ') '
	. $connect->connect_error);
}

// クエリ
$result = $connect->query("select * from 社員マスタ where 社員コード = '0001'"); 
if ( !$result ) {
	die('クエリーに誤りがあります : ' . $connect->error );
}

// 読み出し
$row = $result->fetch_array(MYSQLI_BOTH);

// 開放
$result->close();

// 接続解除
$connect->close();

print json_encode($row);

?>


json_get.rb
#JSON 経由でデータベースの値を取得

require 'mechanize'

agent = Mechanize.new

agent.verify_mode = OpenSSL::SSL::VERIFY_NONE
agent.follow_meta_refresh = true
agent.user_agent = 'Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko'

page = agent.get("http://localhost/web/various/db_json/json.php")
obj = JSON.parse((page.body).force_encoding("utf-8"))

i = 0
while i < obj.length / 2
	print obj[i.to_s], "\n"
	i += 1
end

print obj["社員コード"],"\n"
print obj["氏名"],"\n"
print obj["フリガナ"],"\n"
print obj["所属"],"\n"
print obj["性別"],"\n"
print obj["作成日"],"\n"
print obj["更新日"],"\n"
print obj["給与"],"\n"
print obj["手当"],"\n"
print obj["管理者"],"\n"
print obj["生年月日"],"\n"




posted by lightbox at 2014-07-25 13:03 | Ruby | このブログの読者になる | 更新情報をチェックする

2014年07月19日


Ruby(mechanize) で Seesaa のエクスポート



本来は、HTA で画面を作って入力パラメータも設定して連携させたいですが、最新月をバックアップしたいのならばこれで十分です。

引数は、cgi に引き渡される(cgi['no'])ので、#{cgi['no']} で文字列内に埋め込んで展開させます。

seesaa_backup.rb
#Seesaa エクスポート

require "cgi"
cgi = CGI.new(:accept_charset => 'utf-8')

require 'mechanize'

agent = Mechanize.new

agent.verify_mode = OpenSSL::SSL::VERIFY_NONE
agent.follow_meta_refresh = true
agent.user_agent = 'Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko'

page = agent.get("https://ssl.seesaa.jp/www/pages/welcome/login/input")
form = page.form_with(:name => 'authpost')
form["member__email"] = "メールアドレス"
form["password"] = "パスワード"
page = form.submit

# 対象ブログのページ
page = agent.get("http://blog.seesaa.jp/cms/home/switch?blog_id=#{cgi['no']}")

# エクスポートページ
page = agent.get('http://blog.seesaa.jp/cms/tools/mt/export/input')

form = page.forms[1]

page = form.submit

print page.body

実行時は、Ruby 用のコマンドプロンプトから以下のように実行させます

ruby seesaa_backup.rb no=ブログ番号 > export.log

関連する記事


posted by lightbox at 2014-07-19 23:17 | Ruby | このブログの読者になる | 更新情報をチェックする

2014年07月18日


Ruby(Mechanize) : ココログギャラリー名の変更

Ruby 2.0.0-p481 を Windows にインストールしてコマンドプロンプトから処理しています。

昔同様の処理を行っていましたが、NIFTY のログインの仕様が変わっていました。また、agent.follow_meta_refresh を使って Mechanize がページを取得するようになっています。結局は、とても短い簡潔なコードで更新できました
# ココログのギャラリー名の変更

require 'mechanize'

agent = Mechanize.new

agent.verify_mode = OpenSSL::SSL::VERIFY_NONE
agent.follow_meta_refresh = true
agent.user_agent = 'Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko'

page = agent.get("https://sso.nifty.com/pub/login.cgi?service=cocologin&back=https%3a%2f%2fwww.cocolog-nifty.com%2fdispatch%2f&am=1.2.0")

# FORM に name 属性が設定されていたので、それで選択
form = page.form_with(:name => 'login')
form["username"] = "ユーザ"
form["password"] = "パスワード"
page = form.submit

# ギャラリー名の変更ページ
# set_id に番号をセット
page = agent.get("http://app.cocolog-nifty.com/t/app/gallery/configure?set_id=508074")

# FORM がひとつしか無かったので .first
form = page.forms.first
form["name"] = "ギャラリーA"
page = form.submit

print "update OK!"

以下は、昔さくらインターネットで動作していたコードです。

1) ENV の中は 環境変数( HTTP_* 等 )
2) sub は 1回 gsub は 全て
3) 式の改行は前の行に継続として演算子を残す
#!/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
#@nifty にログイン
page = agent.get("https://login.nifty.com/service/login")
form = page.forms.first
form["username"] = "ユーザID"
form["password"] = "パスワード"
page = form.submit

fp = open("./log_01.txt", "w")
fp.puts(page.body)
# 環境変数等を読みやすい形で出力
str = ENV.inspect
str = str.gsub(/,/,"\n")
fp.puts(str)
fp.close

# ************************************
# return : 
# <html><meta http-equiv="Refresh" content="0;URL=http://www.nifty.com/"></html>
# ************************************
print "login<br>"


# 対象ギャラリーの設定ページ
page = agent.get('http://app.cocolog-nifty.com/t/app/gallery/configure?set_id='+
	cgi['no'][0])
fp = open("./log_02.txt", "w")
fp.puts(page.body)
fp.close

# ************************************
# return : 
# <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
# <head>
# <meta http-equiv="Content-Type" content="text/html;charset=utf-8"></meta>
# <META
# 	HTTP-EQUIV="Refresh"
# 	CONTENT="0;URL=http://app.cocolog-nifty.com/t/app/gallery/configure?set_id=ギャラリー番号&amp;nwsThough=1"
# ></META>
# </head>
# <body>
# <!--result=ターゲット URL(CONTENTと同じ)-->
# </body>
# </html>
# ************************************
print "request target page<br>"

# 設定ページ
page = agent.get('http://app.cocolog-nifty.com/t/app/gallery/configure?set_id='+
	cgi['no'][0]+
	'&nwsThough=1')
fp = open("./log_03.txt", "w")
fp.puts(page.body)
fp.close

print "response real page<br>"

# 更新処理
form = page.forms.first
form["name"] = "_"+cgi['gn'][0]
form.submit
関連する記事


タグ:ruby Mechanize
posted by lightbox at 2014-07-18 10:59 | Ruby | このブログの読者になる | 更新情報をチェックする

2014年07月17日


Ruby : Seesaa の設定ページの「最新の情報に更新」ボタンを Ruby の mechanize で押す

コマンドプロンプトからのバッチ処理でテストしています。
( 32ビット Windows へのインストールは簡単に行えました )

概要

Seesaa では、一つのアカウントで複数のブログを作成できますが、ブログの設定を複数行う場合は結構面倒です。一度設定してしまえば、変更する機会はあまり多くはありませんが、それでも「設定」ページの最新の情報に更新はしばしば実行が必要になります

初期導入時で言えば、「設定」ページ以外にもいろいろ設定する場所も多く、一度に全て設定できるとしたら、Ruby の mechanize でしょう。

テストしてみるといとも簡単にできましたので、トップページ表示件数の更新部分も含めたサンプルです。
#Seesaa 設定ページの『最新の情報に更新』

require 'mechanize'

agent = Mechanize.new

agent.verify_mode = OpenSSL::SSL::VERIFY_NONE
agent.follow_meta_refresh = true
agent.user_agent = 'Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko'

page = agent.get("https://ssl.seesaa.jp/www/pages/welcome/login/input")
form = page.form_with(:name => 'authpost')
form["member__email"] = "メールアドレス"
form["password"] = "パスワード"
page = form.submit

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

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

form = page.form_with(:name => 'myform')

page = form.click_button(form.buttons[0])

# 以下は設定ページの「トップページ表示件数」の更新
#form["blog__index_page_cnt"] = "2"
#page = form.click_button(form.buttons[1])

print "seesaa : update : ok"

関連する記事


posted by lightbox at 2014-07-17 16:11 | Ruby | このブログの読者になる | 更新情報をチェックする

2010年06月07日


Ruby : 日本語の正規表現はバイナリで

Ruby 内で、日本語の正規表現を正しく動作させる為に、先頭に
#!/usr/local/bin/ruby -Ke

というような記述をすると良いと・・・言ってるのをみかけましたが、
対象文字列が SHIFT_JIS で書かれていて、ソースが EUC-JP ではどう
にもならなかったので、以下のように普通にバイナリ指定しました。

このほうが確実のような気がします。
というか、Ruby は飛び道具という認識しか無いので動作する事が
大前提で、WEB アプリケーションは他の言語にまかせたほうがいい
と思います。

以下は、Seesaa の投稿処理です。
# **********************************************************
# Seesaa 処理関数
# $agent はグローバル変数
# **********************************************************
def seesaaAction(blog_id,blog_nm,opt) 


	# ブログ選択
	page = $agent.get($seesaa_select_blog + blog_id)
	# アクセス解析デフォルトページ( ページ別 )
	page = $agent.get($seesaa_access_default)

	# 合計の 訪問者数 と ページビュー を取得する正規表現( m は "." が改行にマッチ )
	/log\-total\-text.+log\-total\-num">.+?>(.+?)<.+log\-total\-num">.+?>(.+?)</m =~ page.body
	# Ruby 側確認用表示
	$ucnt = $1
	$vcnt = $2

	if opt == '1' then
		# 実際のアクセス数の計算用
		page = $agent.get($seesaa_access_os)
		# SHIFT_JIS で不明の先頭コードである \x95 を処理
		/log\-total\-num">(.+?)<.+?\x95.+?align="right".+?nbsp;(.+?)</m =~ page.body

		$realcnt = ($1.to_i-$2.to_i).to_s
	else
		$realcnt = 0.to_s
	end

	print blog_nm + "   " +  $ucnt + "/" + $vcnt + "<br>\n"
	print "realaccess : " +  $realcnt + "<br>\n"

	# DB 更新用 php 呼び出し
	$agent.get($seesaa_dbupdate+blog_id+'&ucnt='+$ucnt+'&vcnt='+$vcnt+'&realcnt='+$realcnt)


end

# **********************************************************
# Seesaa 定数
# **********************************************************
$seesaa_select_blog	= "http://blog.seesaa.jp/pages/my/blog/home/?blog_id="
$seesaa_access_default	= "http://blog.seesaa.jp/pages/my/blog/access_log/report/index?log_type=file"
$seesaa_access_os	= "http://blog.seesaa.jp/pages/my/blog/access_log/report/index?log_type=os"
$seesaa_dbupdate	= "http://.../seesaa_create_log.php?blog_id="


関連する記事

Ruby+Mechanize : Seesaaアクセス解析情報


タグ:トラブル
posted by lightbox at 2010-06-07 20:27 | Ruby | このブログの読者になる | 更新情報をチェックする

2010年02月06日


Mechanize : クラスのメソッドをオーバライドしてヘッダーを送れるようにしてiPhoneとしてサーバに認識させる

このサンプルの処理では、iPhone である必要は無いのですがあくまで
サンプルとして処理されています。実際は、Seesaa の自分のブログを
呼び出して、iPhone 用のページが返される事を確認しました

post メソッドは元々のメソッドのコードからファイルアップロード
の機能を省いてヘッダーを渡すようにしただけです。

post_form は、元々ヘツダーを渡せるのですが、プライベートメソッド
なのでこのような使い方になります。
#!/usr/local/bin/ruby
print "Content-type: text/html; Charset=shift_jis\n\n"

# エラーを出力する為の処理
$stderr = $stdout

# Ruby 本体をWEBアプリとして使う時の為の定義
# ( ここでは使っていません )
require "cgi"
cgi = CGI.new
require 'uri'

# さくらインターネットで WWW::Mechanize をインストールして
# 利用するのに必要だった定義
ENV['GEM_HOME']="/home/lightbox/gems"
$LOAD_PATH.push('/home/lightbox/lib')

require 'rubygems'
require 'mechanize'
# **********************************************************
# 処理本体
# **********************************************************

# WWW::Mechanize の post メソッドをオーバーライド
# ※ ファイルのアップロードは使わないので削除しています
# ※ カスタムヘッダーを渡せるようにしています
class WWW::Mechanize 
	def post(url, query= {}, headers = {}) 
		node = {} 
		# Create a fake form 
		class << node 
			def search(*args); []; end 
		end 
		node['method'] = 'POST' 
		node['enctype'] = 'application/x-www-form-urlencoded' 
 
		form = Form.new(node) 
		query.each { |k,v| 
			form.fields << Form::Field.new(k.to_s,v) 
		} 
		post_form(url, form, headers) 
	end 
end 

agent = WWW::Mechanize.new

# 呼び出しタイムアウト設定
# ( \ で継続行 )
agent.open_timeout \
	= 60 * 10
# ( = 演算子で継続行 )
agent.read_timeout =
	60 * 10

url = 'WEBアプリケーションのURL'
fld = {}
fld['SendButton'] = '一括'
fld['CommandField'] = 'パスワード'
fld['mid'] = 'CprogBase'

custom_header = {}
custom_header['User-Agent'] = 
'Mozilla/5.0 ' \
'(iPhone; U; CPU iPhone OS 3_0 like Mac OS X; en-us)' \
' AppleWebKit/528.18 ' \
'(KHTML, like Gecko) Version/4.0 Mobile/7A341 Safari/528.16'

page = agent.post(url, fld, custom_header)

print "ok"

関連する記事

Ruby : 自作WEBアプリケーションの呼び出しに使って機能を拡張する




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

Ruby : 自作WEBアプリケーションの呼び出しに使って機能を拡張する

Ruby の Mechanize を使って自分が作った WEBアプリケーションの機能拡張を比較的簡単に実装できます。この例のアプリケーションの処理がある分類毎なので、それをある程度一括で処理してしまおうというものです。運用上の処理として、対象が多くなると手作業では大変になりますので、利用してみました。

注意するのは、この場合サーバから Perl の cgi を呼び出すので、あまり大量の処理を行うとサーバーに負荷をかけすぎる事になるので、注意して数を調整する配慮は必要となります。

ここで指定しているタイムアウトは、CPU の負荷では無く、一回の呼び出しがネットワークなのでそのタイムアウトになります。

ここで利用している agent.post は、標準のメソッドですが、これを拡張する方法もあります。

※ 以下のサンプルコードでは、継続行の使い方のガイドラインも示しています
#!/usr/local/bin/ruby
print "Content-type: text/html; Charset=shift_jis\n\n"

# エラーを出力する為の処理
$stderr = $stdout

# Ruby 本体をWEBアプリとして使う時の為の定義
# ( ここでは使っていません )
require "cgi"
cgi = CGI.new
require 'uri'

# さくらインターネットで WWW::Mechanize をインストールして
# 利用するのに必要だった定義
ENV['GEM_HOME']="/home/lightbox/gems"
$LOAD_PATH.push('/home/lightbox/lib')

require 'rubygems'
require 'mechanize'
# **********************************************************
# 処理本体
# **********************************************************

agent = WWW::Mechanize.new

# 呼び出しタイムアウト設定
# ( \ で継続行 )
agent.open_timeout \
	= 60 * 10
# ( = 演算子で継続行 )
agent.read_timeout =
	60 * 10

# ループ処理用配列
mid = [ 
'CprogBase' \
,'CommonSpec' 
]

# 以下だと継続行はいりません
mid = [ 
'CprogBase',
'CommonSpec' 
]

p mid
print "<br>"

# 配列の要素ぶんの繰り返し処理
(mid.length).times { |i|
	agent.post('WEBアプリケーションのURL', 
		{ 
			'SendButton' => '一括', 
			'CommandField' => 'パスワード', 
			'mid' => mid[i] 
		})
	print "#{mid[i]}<br>"
}

print "ok"

関連する記事

Mechanize : クラスのメソッドをオーバライド
してヘッダーを送れるようにしてiPhoneとしてサーバに認識させる




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

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 %>
この記述は、以下の場所で使用します


Windows
container 終わり

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

Android SDK ポケットリファレンス
改訂版 Webデザイナーのための jQuery入門
今すぐ使えるかんたん ホームページ HTML&CSS入門
CSS ドロップシャドウの参考デモ
Google Hosted Libraries
cdnjs
BUTTONS (CSS でボタン)
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり