前端时间公司出钱买书,我定了本<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 Programming:向Ruby之父学程序设计(第2版)》也会派上用场。Ruby是为了让程序设计更快乐而开发的程序语言。Ruby具有“彻底面向对象”、“丰富的程序库”...
本书不仅覆盖了Ruby的基础语法,还深入探讨了其高级特性,使初学者到高级用户都能从中受益。 #### Ruby的历史 Ruby是由日本人松本行弘(Yukihiro Matsumoto)于1995年开始开发的。它的设计哲学是将人类的幸福感...
此时我对初学者一些总结
本资源包含近百个微信小程序的模板,每个模板都包含了完整的源码,这对于开发者来说是一份非常宝贵的参考资料,无论是初学者还是经验丰富的开发者,都能从中受益。 一、小程序模板的价值 1. 学习参考:这些模板覆盖...
今天,我们将深入探讨“134个小程序源码打包下载”这一宝贵的资源包,分析它为何成为开发者手中的利器。 首先,源码对于开发者而言,如同一把打开知识宝库的钥匙。它能够帮助开发者直接接触到代码核心,理解程序的...
之前刚接触java的时候想写个扫雷小游戏来练练手,但是下载的都是不完整的 不然就是不能运行的 故上传一个自己已经测试好的,给初学者参考下 其中Mine 为主函数
9. **步步高字典**:可能是一个基于步步高学习设备的词典应用,涉及单词查询、发音和例句等功能,对于学习教育类小程序的开发有指导意义。 10. **Gank**:Gank.IO是一个开源技术分享平台,此小程序可能展示了如何...
《笨办法学Ruby》是一本面向初学者的Ruby编程教程,以其简单、直接的教学风格而闻名。Ruby是一种面向对象的编程语言,强调简洁和可读性,由日本人松本行弘(Yukihiro Matsumoto)于1995年创建。这本书旨在通过大量的...
ruby初学者必备,和java api一样,很强大。
15个经典的小程序,帮助我很多,希望也可以给你带来一些帮助。
总的来说,"微信小程序模板(几十个)"这个资源对于初学者和开发者来说都是宝贵的工具,它们不仅可以快速启动项目,还可以作为学习和参考的对象,帮助提升微信小程序的开发技能。通过深入研究和实践,你可以掌握从...
在本项目中,"微信小程序+后台(.net)+sql server数据库"组合形成一个完整的开发环境,适合初学者了解和学习微信小程序的开发流程,以及后端服务与数据库的集成。 首先,微信小程序部分主要涉及以下几个知识点: ...
这本面向初学者和高级读者的指南旨在全面介绍Ruby编程语言的基础及其高级特性,因此我们将从多个角度来解析这些内容。 ### 一、Ruby编程语言简介 #### 1.1 Ruby语言的历史与发展 Ruby是一种动态、面向对象的脚本...
MongoDB的Ruby驱动程序,即`mongo-ruby-driver`,是用于与MongoDB数据库进行交互的一个关键组件。这个驱动程序允许Ruby开发者利用MongoDB的强大功能,包括文档存储、分布式数据处理以及灵活的数据模型。在本文中,...
本资源包提供了20个微信小程序的源码,对于初学者和希望提升技能的开发者来说,是一份宝贵的参考资料。 1. weapp-bear-diary-master.zip:这个源码可能是一个日记类小程序,可以帮助用户记录生活点滴。通过学习这个...
这款"微信小程序云开发完整源码"是针对微信小程序初学者和毕业设计者的一份宝贵资源,它包含了实现具体功能的小程序源代码以及安装指南。 首先,我们要理解微信小程序的基本结构。小程序由JSON配置文件、WXML结构...
Ruby 1.8.6 是一个古老的 Ruby 语言版本,发布于2009年,主要为Windows用户提供安装程序。这个版本在当时是许多开发者和项目依赖的基础,它包含了对Ruby编程语言的基本特性以及对Windows操作系统的兼容性优化。本文...