我正在制作一个小脚本,用于搜索服务推文的5张最新图片,隔离网址并将该网址放入数组中。
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 \“]”] < / p>
我正试图让它返回[“http://t.co/6789”,“http://t.co/1245”],但它没有管理它。
这里的任何帮助将不胜感激。我不确定我做错了什么。
答案 0 :(得分: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:iana@iana.org?subject=General%20website%20feedback
获得数组后,您可以根据需要进行过滤,也可以为其提供一个要提取的方案列表。
答案 1 :(得分:1)
grep
返回一个数组:
grep(pattern)→array
grep(pattern){| obj | block}→array返回枚举中
的每个元素的数组Pattern === element
。
因此,您的奇怪输出来自to_s
来自grep
的{{1}}。你可能正在寻找这个:
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)
答案 2 :(得分:1)
要删除一个字符串并按下url数组,您可以执行以下操作:
urls = []
if mystring =~ /(http:\/\/[^\s]+)/
urls << $1
end