永らくお待たせいたしましたが、当選者発表です。
今回の抽選アルゴリズムですが、今回プレゼントの、ギートステートハンドブックの、ギートという言葉は、「グーグル・ニート」の合成語というところから、
応募者の皆さんのメールアドレスのドメイン名をグーグルで検索
そのヒット数で乱数を初期化
ギートステートの舞台が2045年であるところから、2045までの乱数を発生させて、数の多い順にソート
BB-SHOUTは、上位一名様、ギートステートハンドブックは、上位三名様にプレゼント!
という、意味があるんだかないんだか、妙に複雑なものにしました。
で、今回も私シン石丸が、Rubyの勉強も兼ねて、Rubyで抽選プログラムを作成しました。
作成したRubyのソースがこちら。
require 'mailread'
require "soap/wsdlDriver"
require 'nkf'
# googleで指定のキーワードで検索した結果のトータル数を返す
def getGoogleSearchCount( search_keyword )
wsdl = "./GoogleSearch.wsdl"
license_key = "ABCDEFGHIJKLMN" # ライセンスキー
google = SOAP::WSDLDriverFactory.new(wsdl).create_rpc_driver
# SOAPとRubyの型変換を有効にする(?)
google.generate_explicit_type = true
param = "-k " + search_keyword;
result = google.doGoogleSearch(
license_key, # ライセンスキー
param, # 検索キーワード
0, # 何件目から取得する?
10, # 一度に何件取得する?
true, # true:似たような結果を取り除く
"countryJP", # 制限情報
true, # true:安全な検索
# "lang_ja|lang_en", # 日本語または英語のページ
"lang_ja", # 日本語のページ
"UTF-8", # 文字コード(入力)
"UTF-8" # 文字コード(出力)
)
return result.estimatedTotalResultsCount.to_i
end
# 応募者クラス
class Applicant
def initialize( app_name, app_email )
#応募者名
@name = app_name.split("<")[0] + "さん"
#応募者メールアドレス
@email = app_email
#応募者ドメイン名
@domainname = app_email.split("@")[1]
#ドメイン名をgoogleで検索してヒットした数
@count = getGoogleSearchCount(@domainname)
#googleでのヒット数から乱数初期化、2045までの乱数取得
srand(@count)
@num = rand(2045)
end
def name
return @name
end
def email
return @email
end
def domainname
return @domainname
end
def count
return @count
end
def num
return @num
end
#メールアドレス、ドメイン名を*で隠した文字列を返す
def putAst(str)
dot_index = str.rindex(".");
at_index = str.index("@");
mail = "";
if at_index != nil
for i in 0..at_index
mail = mail + "*"
end
mail += "@"
else
at_index = 0
end
for i in at_index..dot_index
mail = mail + "*"
end
mail += str[dot_index, str.length]
return mail
end
#要素の表示関数
def show()
mail = putAst(@email)
domain = putAst(@domainname)
#domain = @domainname
print("Name:", @name, "\n");
#print("E-Mail:", @email, "\n");
print("E-Mail:", mail, "\n");
#print("Domain:", @domainname, "\n");
print("Domain:", domain, "\n");
print("SearchCount:", @count, "\n");
print("num:", @num, "\n");
end
end
# それぞれの応募メールをUNIX mbox形式でエクスポートしたファイルの読み込み
#mailbox = File.open('./CSC_GEET')
mailbox = File.open('./CSC_BB')
app_array = Array.new
until (m = Mail.new(mailbox)).header.empty?
#応募者のメールアドレス、名前をクラスに保存。クラスは配列に保存
app_name = NKF.nkf('-me', m['From'])
a = Applicant.new( app_name, m['X-Envelope-From'] )
a.show()
app_array << a;
# なんかあんまり連続でリクエストするとエラーがでるから適当に休み
sleep 10
end
#numの数値の大きい順に配列内の要素ソート
sorted = app_array.sort{ |a, b|
b.num <=> a.num
}
#結果表示
print("\n結果\n\n")
sorted.each{ |app|
app.show()
}
RubyからGoogle SOAP Search APIを使って、検索しとります。
さて、それでは結果発表!
まずは、ギートステートハンドブックから。
ギートステートハンドブックには、7名の方からご応募がありました。
さきほどのRubyスクリプトを動かすと、次のような結果になりました。
Name:"takeshi kito" さん
E-Mail:*******@*******.com
Domain:******.com
SearchCount:698000
num:1743
Name:大城 晶 さん
E-Mail:******@**************.jp
Domain:*************.jp
SearchCount:62
num:1554
Name:福井 香輔 さん
E-Mail:*************@*****.com
Domain:****.com
SearchCount:113000
num:1216
Name:藤岡和夫 さん
E-Mail:******@*************.jp
Domain:************.jp
SearchCount:24600
num:850
Name:林 直宏 さん
E-Mail:*****************@************.jp
Domain:***********.jp
SearchCount:610000
num:354
Name:秋山弘行 さん
E-Mail:*********@***************.jp
Domain:**************.jp
SearchCount:790
num:240
Name:湯浅 一誠 さん
E-Mail:**********@*********.jp
Domain:********.jp
SearchCount:7
num:175
当選は、"takeshi kito" さん、大城 晶 さん、福井 香輔 さんの、お三方です!
おめでとうございます。
ついで、トグサ氏作成のBB-SHOUT。
こちらには、11名の方からご応募がありました。
1/11の狭き門となりました。
で、実行結果がこちら!
Name:Yoshikazu Urabe さん
E-Mail:*********@**********.jp
Domain:*********.jp
SearchCount:742000
num:1866
Name:R SATO さん
E-Mail:*****************@*******.to
Domain:******.to
SearchCount:659
num:1831
Name:"Akira Matsuda" さん
E-Mail:***************@***********.net
Domain:**********.net
SearchCount:1960
num:1549
Name:SEKO Keisuke さん
E-Mail:*********@***********.jp
Domain:**********.jp
SearchCount:8500
num:1436
Name:藤岡和夫 さん
E-Mail:******@*************.jp
Domain:************.jp
SearchCount:24800
num:1047
Name:"Ryohei Arai" さん
E-Mail:***********@*******.com
Domain:******.com
SearchCount:456000
num:945
Name:ishii さん
E-Mail:********@*******.com
Domain:******.com
SearchCount:456000
num:945
Name:osten さん
E-Mail:*********@********.jp
Domain:*******.jp
SearchCount:110000
num:734
Name:"rihaku" さん
E-Mail:****************@*********.com
Domain:********.com
SearchCount:918000
num:450
Name:カシハラ さん
E-Mail:*******************@*****.com
Domain:****.com
SearchCount:107000
num:425
Name:後藤 昌幸 さん
E-Mail:***************@********.net
Domain:*******.net
SearchCount:7
num:175
当選は、Yoshikazu Urabeさんです!
おめでとうございます!
応募してくださった皆さん、ありがとうございました!!!