2012-01-28 56 views
0

我正在構建一個小腳本,用於搜索由服務推送的最近5張照片,隔離URL並將該URL放入數組中。如何從字符串中剝離URL並將其放置在數組中?

def grabTweets(linkArray) #brings in empty array 
    tweets = Twitter.search("[pic] "+" url.com/r/", :rpp => 2, :result_type => "recent").map do |status| 
    tweets = "#{status.text}" #class = string 

    url_regexp = /http:\/\/\w/ #isolates link 
    url = tweets.split.grep(url_regexp).to_s #chops off link, turns link to string from an array 

    #add link to url array 
    #print linkArray #prints [] 

    linkArray.push(url) 
    print linkArray 

    end 
end 

x = [] 
timelineTweets = grabTweets(x) 

該函數的返回這樣的事情:[ 「[\」 HTTP://t.co/6789 \ 「]」] [ 「[\」 HTTP://t.co/12345 \」 ]「]

我試圖讓它返回[」http://t.co/6789「,」http://t.co/1245「]但它沒有管理。

任何幫助在這裏將不勝感激。我不確定我做錯了什麼。

+1

爲什麼你傳入一個你填充的空數組?爲什麼不只是調用返回數組的方法,而不打擾初始化和傳遞一個空數組? timelineTweets = grabTweets() – redronin 2012-01-28 03:39:31

+0

因爲我不知道我在做什麼:) – 2012-01-28 03:40:02

+0

你會建議什麼呢? – 2012-01-28 03:41:02

回答

5

在Ruby中抓取URL的最簡單方法是使用URI::extract方法。這是一個預先存在的車輪,工程:

require 'uri' 
require 'open-uri' 

body = open('http://www.example.com').read 

urls = URI::extract(body) 
puts urls 

將返回:

http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd 
http://www.w3.org/1999/xhtml 
http://www.icann.org/ 
mailto:[email protected]?subject=General%20website%20feedback 

一旦你的陣列可以篩選自己想要的東西,或者你可以給它計劃提取的列表。

+0

很酷。不知道摘錄。 +1 – redronin 2012-01-28 05:12:16

+0

非常感謝! – 2012-01-28 18:27:54

1

grep返回的數組:

grep的(圖案)→陣列
grep的(圖案){| obj |塊}→數組

返回enum中每個元素的數組,其中Pattern === element

所以你的奇數輸出是來自to_s電話如下grep。你可能在尋找這樣的:

linkArray += tweets.split.grep(url_regexp) 

,或者如果你只想要第一個網址:

url = tweets.split.grep(url_regexp).first 
linkArray << url if(url) 

你也可以跳過split.grep,並使用scan

# \S+ should be good enough for this sort of thing. 
linkArray += tweets.scan(%r{https?://\S+}) 
# or 
url = tweets.scan(%r{https?://\S+}).first 
linkArray << url if(url) 
+0

謝謝你的回答和你的時間。 – 2012-01-28 18:28:01

1

要去除一個URL出一個字符串,並推入到URL陣列,你可以這樣做:

urls = [] 
if mystring =~ /(http:\/\/[^\s]+)/ 
    urls << $1 
end 
+0

謝謝你的回答,你的時間 – 2012-01-28 18:28:11