前端时间公司出钱买书,我定了本<Programming Ruby>,拿回家了,每天看一点点,半个月的时间也有了点收获.
下面星期天在家里写的一个小程序,起源于我想买个.com域名,心血来潮,想看看还有哪些拼音短域名没被注册过,说不定可以捡个漏呢,哈哈.
程序的关键之处在于词库和拼音,还好有人做好了:http://open-phrase.googlecode.com/files/phrase_pinyin_freq_sc_20090402.txt.bz2
这也是ibus所用的词库.
词库中含有中文,拼音以及词频,非常合用.
运行环境:linux,unix,freebsd,macos
#!/usr/bin/ruby
# author tedeyang
# 2010-8-2
#
# A script for running whois command to detect which pinyin can be used for ".com" domain (like:zhongguo.com),the phrases are parsed from ibus phrase lib.
#
class ReadPhrase
attr_reader :all
def initialize(file,lengthRange)
@file = file
@range = lengthRange
@count = 0
@runcount = 0
@askcount = 0
@all = Array.new()
@work = File.new("work-#{@range.}.log","w")
@get = File.new("domain-#{@range}.log","w")
@nowPid = 0
@ask = ""
end
def initFromFile
phraseFile = File.new(@file,'r')
keystore = Hash.new
phraseFile.each{|line|
phrase,pinyin,freq = line.split
two = (pinyin =~ /^\w+('\w+){0,2}$/) != nil
pinyin.gsub!("'","")
if pinyin.length <=8 && two
# p "#{pinyin} #{phrase} (词频:#{freq})"
previousPinyin = @all[keystore[pinyin]] if keystore.has_key?(pinyin)
if previousPinyin == nil
@all << [pinyin,freq.to_i,phrase]
keystore[pinyin] = @count
@count = @count + 1
else
@all[keystore[pinyin]] = [pinyin,freq.to_i+previousPinyin[1],previousPinyin[2]+","+phrase]
end
end
}
puts "read done!"
puts "there are #{@count} phrases in file"
@all.sort!{|p1,p2|
p1[0].length - p2[0].length
}
puts "sort done by phrase 's length!"
end
def unregisted?(phrasePy)
@askcount += 1
domain = phrasePy + ".com"
@work.puts "#{@askcount}-----run whois #{domain}---------------------------begin with #{Time.new}"
@ask = "whois #{domain}"
whois = IO.popen(@ask,"r") do |pipe|
@nowPid = pipe.pid
result = pipe.read
@nowPid = 0
good = (/\s*(No match for).+/ =~ result) != nil
@work.puts "#{@askcount}-----run whois #{domain}------------#{good}------------end with #{Time.new}"
@work.flush
good
end
return whois
end
#start a thread for timeout check
def startTimeoutKiller
th = Thread.start {
while 1
pid1 = @nowPid.to_i
sleep(3) #wait for n seconds
pid2 = @nowPid.to_i
if pid1==pid2 && pid1>0
Process.kill 'TERM',pid1
p "kill a timeout whois , pid=#{pid1},is '#{@ask}'"
end
end
}
end
def tryall
@get.puts "begin "+ Time.new().to_s
@work.puts "begin "+ Time.new().to_s
@all.each{|p|
if @range===p[0].length && self.unregisted?(p[0])
puts "Now get domain : "+p.join(' ')
@get.puts "#{p[0]} #{p[2]} #{p[1]} order[#{@askcount}]"
@get.flush
@runcount += 1
end
# sleep(3) if @askcount % 10 ==9
# break if @runcount >1
}
puts "done with #{@runcount}!(#{Time.new()}),see run.log"
end
end
parser = ReadPhrase.new("phrase_pinyin_freq_sc_20090402.txt",6..6)
parser.initFromFile
parser.startTimeoutKiller
# p parser.unregisted?('qidian')
parser.tryall
代码写得散乱,textmate用得不顺手,缩手缩脚,一点没有用eclipse写java那般行云流水的手感,没办法,写代码也是个经验活,和开车一样,写着写着就有感觉了嘛.
代码没用多线程,只开了个线程检查超时,因为怕whois命令太多导致被封IP,呵呵,机器开了一整夜才跑完1万多个5字母拼音域名.
还有3,4百个汉语拼音没被注册的,有价值的也很少了.
譬如"xieca.com",xieca与"鞋擦"同音,也许对浙江的小商品市场还有那么一丁点商业价值,呵呵,6字母的就太多了,不过双音节的不多.
以后还可以写个多线程版本,从godaddy,net.cn查询,效率应该可以提高不少.
分享到:
相关推荐
非常多的JAVA初学者测试简单小程序非常多的JAVA初学者测试简单小程序非常多的JAVA初学者测试简单小程序非常多的JAVA初学者测试简单小程序非常多的JAVA初学者测试简单小程序非常多的JAVA初学者测试简单小程序非常多的...
"Ruby Trap"这个标题暗示了这是一本关于Ruby编程中常见问题和陷阱的电子书,旨在帮助初学者避免在学习过程中遇到的困扰。下面,我们将深入探讨一些可能涵盖在书中的Ruby编程知识点。 1. **变量和常量**: - Ruby有...
标题中的“用ruby写的采集程序”表明这是一个使用Ruby编程语言编写的网络数据采集脚本。Ruby是一种面向对象的、动态类型的编程语言,以其简洁、优雅的语法和强大的元编程能力而受到开发者喜爱。在Web开发领域,Ruby...
此时我对初学者一些总结
本资源包含近百个微信小程序的模板,每个模板都包含了完整的源码,这对于开发者来说是一份非常宝贵的参考资料,无论是初学者还是经验丰富的开发者,都能从中受益。 一、小程序模板的价值 1. 学习参考:这些模板覆盖...
本资源包“134个小程序源码打包下载”提供了丰富的学习和实践材料,涵盖多种功能类型,无论是对新手还是有经验的开发者,都能从中受益。 首先,源码是理解编程和软件开发最直接的方式。通过分析这些小程序源码,你...
ruby初学者必备,和java api一样,很强大。
15个经典的小程序,帮助我很多,希望也可以给你带来一些帮助。
总的来说,"微信小程序模板(几十个)"这个资源对于初学者和开发者来说都是宝贵的工具,它们不仅可以快速启动项目,还可以作为学习和参考的对象,帮助提升微信小程序的开发技能。通过深入研究和实践,你可以掌握从...
这本面向初学者和高级读者的指南旨在全面介绍Ruby编程语言的基础及其高级特性,因此我们将从多个角度来解析这些内容。 ### 一、Ruby编程语言简介 #### 1.1 Ruby语言的历史与发展 Ruby是一种动态、面向对象的脚本...
MongoDB的Ruby驱动程序,即`mongo-ruby-driver`,是用于与MongoDB数据库进行交互的一个关键组件。这个驱动程序允许Ruby开发者利用MongoDB的强大功能,包括文档存储、分布式数据处理以及灵活的数据模型。在本文中,...
在本项目中,"微信小程序+后台(.net)+sql server数据库"组合形成一个完整的开发环境,适合初学者了解和学习微信小程序的开发流程,以及后端服务与数据库的集成。 首先,微信小程序部分主要涉及以下几个知识点: ...
本资源包提供了20个微信小程序的源码,对于初学者和希望提升技能的开发者来说,是一份宝贵的参考资料。 1. weapp-bear-diary-master.zip:这个源码可能是一个日记类小程序,可以帮助用户记录生活点滴。通过学习这个...
这款"微信小程序云开发完整源码"是针对微信小程序初学者和毕业设计者的一份宝贵资源,它包含了实现具体功能的小程序源代码以及安装指南。 首先,我们要理解微信小程序的基本结构。小程序由JSON配置文件、WXML结构...
"Ruby新手学习书"和"Rails_4_days"这两个资源是为初学者设计的,旨在帮助他们快速掌握Ruby语言的基础以及Rails框架的核心概念。 在Ruby语言中文教程中,你将学到以下关键知识点: 1. **基础语法**:Ruby的语法简洁...
Ruby 1.8.6 是一个古老的 Ruby 语言版本,发布于2009年,主要为Windows用户提供安装程序。这个版本在当时是许多开发者和项目依赖的基础,它包含了对Ruby编程语言的基本特性以及对Windows操作系统的兼容性优化。本文...
Ruby是一种面向对象、动态类型的编程语言,由松本行弘于1995年创建,设计目标是提高开发者...通过这个安装程序,用户可以享受到完整的开发环境,包括必要的工具和可能附带的IDE,从而专注于编写和运行他们的Ruby代码。