2012-11-06 14 views
1

*編輯: 根據我下面的評論,我想一個更好的問題是,'正確的方法是通過每個URL進行機械化並更新其名稱列? (每個名字對於url都是唯一的)'下面是我一直在做的練習。 *rails機械化運行postgres表中的每個url


我有一個postgres表,像... |名稱(字符串)|網址(文字)|

URL欄已填充了不同的URL,並出現類似這樣的: http://www.a4apps.com/Websites/SampleCalendar/tabid/89/ctl/Register/Default.aspx

我試圖運行,將通過每一個URL基於它找到的文本運行和更新名稱的機械化rake任務在一個CSS標籤。

namespace :db do 
    desc "Fetch css from db urls" 
    task :fetch_css => :environment do 

    require 'rubygems' 
    require 'mechanize' 
    require 'open-uri' 

    agent = Mechanize.new 
    url = Mytable.pluck(:url) 
    agent.get(url) 
    agent.page.search('#dnn_ctr444_ContentPane').each do |item| 
     name = item.css('.EventNextPrev:nth-child(1) a').text 
     Mytable.update(:name => name) 
    end 
    end 
end 

當我運行它返回的耙子任務:

rake aborted! 
bad URI(is not URI?): %255B%2522http://www.a4apps.com/Websites/SampleCalendar/tabid/89/Default.aspx%2522,%2520%2522http://www.a4apps.com/Websites/SampleCalendar/tabid/89/ctl/Privacy/Default.aspx%2522,%2520%2522http://www.a4apps.com/Websites/SampleCalendar/tabid/89/ctl/Terms/Default.aspx%2522,%2520%2522http://www.a4apps.com/Websites/SampleCalendar/tabid/89/ctl/Register/Default.aspx%2522%255D 

感謝您的幫助。如果有任何方法可以讓問題更容易回答,請讓我知道。 Mike

+0

經過這一段時間後,我想也許我做的耙完全錯了。 –

回答

1

最近我有點孤獨地回答我自己的問題,但我會發布我的答案,如果有人發現自己在同一個綁定。另外,也許其他人會告訴我,如果我的解決方案有任何我還沒有看到的致命缺陷。這裏是我的,這似乎是工作,從我的表中獲取的網址,運行機械化他們,更新與在網址中發現的信息表最終耙...

namespace :db do 
    desc "Fetch css from db urls" 
    task :fetch_css => :environment do 

    Mytable.all.each do |info| # for each row do... 
     require 'rubygems' 
     require 'mechanize' 
     require 'open-uri' 
     agent = Mechanize.new 
     agent.get(info.url)    # get the url column data for the current db row... 
     nombre = agent.page.search('.EventNextPrev:nth-child(1) a').text # plug it into mech. 
     info.update_attributes(:name => nombre) # and update the db with the css result. 
    end 

    end 
end 

感謝。 邁克