我正在编写一个程序,该程序从推文和图像中搜索以将两者结合起来。我有一个内置的两个数组,它们保存所用推文的 MD5 哈希值和所用图像的 uri,在使用新搜索结果之前我会对其进行检查,因此我不再使用相同的东西。
这是我用来检查推文是否包含我不想要的字符或不在 MD5 哈希集中的代码
unless (/@/.match(tweet[0]) or /http/.match(tweet[0]) or /^#/.match(tweet[0]) or md5list.include?(Digest::MD5.hexdigest(tweet[0])))
其中 md5list 是这样填充的集合
md5list << "#{Digest::MD5.hexdigest(tweet[0])}"
但md5list.include?(Digest::MD5.hexdigest(tweet[0]))
似乎总是返回 true,即使数组为空
谁能发现我在这里搞砸了?谢谢
编辑:
该集合包含许多文本字符串的 MD5 散列,我想在该集合中搜索我拥有的随机字符串的散列,并且仅在集合中尚不存在代码时才执行代码。
为此,我基本上使用unless (set.include?(Digest::MD5.hexdigest("test")
了它,如果集合确实包含它,它应该返回 true,如果不包含它,则返回 false。我已经在 irb 中对此进行了测试,它似乎有效
irb(main):009:0> s = Set.new
=> #<Set: {}>
irb(main):010:0> s << Digest::MD5.hexdigest("test")
=> #<Set: {"9cdfb439c7876e703e307864c9167a15"}>
irb(main):011:0> s.include?("test")
=> false
irb(main):012:0> s.include?(Digest::MD5.hexdigest("test"))
=> true
irb(main):013:0> s.include?(Digest::MD5.hexdigest("test2"))
=> false
但在我的实现中,它似乎总是返回 true。
编辑
一些,呃,更多的东西。(这里是完整的代码,我会尽量不要发布到大块:https ://github.com/rolandshoemaker/bleak-tweets/blob/master/bleak-tweet.rb )
这是失败的功能。它应该搜索图像,并且只有当 uri 的 md5 散列不在 imagemd5 集中时,它才会检索图像,做一些事情,然后将 uri 的 md5 散列添加到集合中,以便相同的图像不会再次使用。
def imageSearch(tag, tweet, imagemd5)
Google::Search::Image.new(:query => tag).each do |image|
unless (imagemd5.include?(Digest::MD5.hexdigest(image.uri)))
filename = String.new
open(image.uri) { |f|
File.open("current", "wb") do |file|
file.puts f.read
end
img = Magick::Image::read("current").first
img.resize_to_fit!(600, 600)
drawable = Magick::Draw.new
drawable.pointsize = 18.0
#drawable.gravity = Magick::SouthEastGravity
drawable.font_weight = Magick::BoldWeight
tm = drawable.get_type_metrics(img, tweet)
drawable.fill = 'black'
#drawable.opacity(1)
xy1 = [0, (((img.rows)*6)/10)]
xy2 = [(((img.columns)*8)/10), (((img.rows)*9)/10)]
drawable.rectangle(xy1[0],xy1[1],xy2[0],xy2[1])
drawable.draw(img)
position = xy1[1]+10
wraptext(tweet, ((xy2[0]-xy1[0])-10)/10).each do |row|
drawable.annotate(img,(xy2[0]-xy1[0])-10,(xy2[1]-xy1[1])-10,10,position += 15,row) {self.fill='white'}
end
filename = "testy." << img.format
img.write(filename)
}
puts imagemd5.include?(Digest::MD5.hexdigest(image.uri)).inspect
imagemd5 << "#{Digest::MD5.hexdigest(image.uri)}"
puts imagemd5.include?(Digest::MD5.hexdigest(image.uri)).inspect
tumblrPost(tag, filename)
File.delete(filename)
File.delete("current")
break
end
end
end
这会输出一个图像并在控制台中输出这个(带有示例推文)
Damn this swollen ankle. Smh #injured #painful
false
true
问题是,在这种情况下,程序使用的图像是已经使用过的图像,但imagemd5.include?(Digest::MD5.hexdigest(image.uri)
在应该为真的地方返回假