我使用'net/http'和'uri'檢索NCBI在線Blast工具的結果。爲此,我必須通過html頁面搜索來檢查其中一行是「Status = WAITING」還是「Status = READY」。 Blast工具完成後,狀態將變爲就緒,結果將發佈在html頁面上。根據頁面結果延遲一種方法
我有一個工作版本來檢查狀態,然後檢索我需要的信息,但效率低下,並且當我相信可以通過某種方式將它們合併成一個方法時,它被分解爲兩種方法。
def waitForBlast(rid)
get = Net::HTTP.post_form(URI.parse('http://www.ncbi.nlm.nih.gov/blast/Blast.cgi?'), {:RID => "#{rid}", :CMD => 'Get'})
get.body.each{|line| (waitForBlast(rid) if line.strip == "Status=WAITING") if line[/Status=/]}
end
def returnBlast(rid)
blast_array = Array.new
get = Net::HTTP.post_form(URI.parse('http://www.ncbi.nlm.nih.gov/blast/Blast.cgi?'), {:RID => "#{rid}", :CMD => 'Get'})
get.body.each{|line| blast_array.push(line[/<a href=#\d+>/][/\d+/]) if line[/<a href=#\d+>/]}
return blast_array
end
第一種方法是檢查狀態,是我最關心的,因爲它是遞歸的。我相信(並糾正我,如果我錯了),設計爲是需要太多的計算能力,當我需要的是某種方式來重新檢查在同一方法的結果(延長時間是一個獎金)。第二種方法很好,但我更喜歡它是否與第一種方法相結合。任何幫助讚賞。
沒有看到HTML很難說,但我懷疑你可以使用字符串內搜索來簡化你的搜索。另外,除了最瑣碎的解析任務之外,解析器將長期爲您節省很多痛苦。我推薦Nokogiri。另外,看看使用Ruby的內置'Open :: URI'。與'Net :: HTTP'和'URI'相比,它更容易使用。 – 2011-06-03 23:06:48
另外,如果'rid'還不是字符串,那麼你的''#{rid}''可以簡化爲'rid'或'rid.to_s'。 – 2011-06-03 23:10:26