15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
# File 'lib/awis4ruby.rb', line 15
def self.get_url_info(access_key_id, secret_access_key, url)
action = "UrlInfo"
responseGroup = "Rank,ContactInfo,AdultContent,Speed,Language,Keywords,OwnedDomains,LinksInCount,SiteData,RelatedLinks"
timestamp = Time.now.utc.strftime("%Y-%m-%dT%H:%M:%S.000Z")
signature = Base64.encode64( OpenSSL::HMAC.digest( OpenSSL::Digest::Digest.new( "sha1" ), secret_access_key, action + timestamp)).strip
awis_url = URI.parse(
"http://awis.amazonaws.com/?" +
{
"Action" => action,
"AWSAccessKeyId" => access_key_id,
"Signature" => signature,
"Timestamp" => timestamp,
"ResponseGroup" => responseGroup,
"Url" => url
}.to_a.collect{|item| item.first + "=" + CGI::escape(item.last) }.join("&") )
resp = Net::HTTP.get(awis_url)
xml = REXML::Document.new(resp)
url_info = AWIS4Ruby::UrlInfo.new
url_info.awis_url = awis_url
url_info.full_xml = resp
url_info.domain_name = domain_from_url(url)
url_info.rank = element_int xml.elements["//aws:TrafficData/aws:Rank"]
ac = element_text xml.elements["//aws:ContentData/aws:AdultContent"]
if ac.eql?("yes")
url_info.adult_content = true
else
url_info.adult_content = false
end
url_info.contact_email = element_text xml.elements["//aws:ContactInfo/aws:Email"]
url_info.contact_address = element_text xml.elements["//aws:ContactInfo/aws:PhysicalAddress"]
url_info.owner_name = element_text xml.elements["//aws:ContactInfo/aws:OwnerName"]
url_info.stock_ticker = element_text xml.elements["//aws:CompanyStockTicker"]
xml.elements.each("*//aws:PhoneNumber") do |el|
url_info.phone_numbers << el.text if el
end
url_info.site_title = element_text xml.elements["//aws:SiteData/aws:Title"]
url_info.site_description = element_text xml.elements["//aws:SiteData/aws:Description"]
ol_since = xml.elements["//aws:SiteData/aws:OnlineSince"]
if ol_since
url_info.online_since = Time.local(*(ParseDate.parsedate(ol_since.text)))
end
url_info.speed_percentile = element_int xml.elements["//aws:Speed/aws:Percentile"]
url_info.load_time = element_int xml.elements["//aws:Speed/aws:MedianLoadTime"]
url_info.language_locale = element_text xml.elements["//aws:Language/aws:Locale"]
url_info.language_encoding = element_text xml.elements["//aws:Language/aws:Encoding"]
url_info.links_in_count = element_int xml.elements["//aws:LinksInCount"]
xml.elements.to_a("//aws:Keywords/aws:Keyword").collect do |i|
url_info.keywords << i.text if i
end
xml.elements.to_a("//aws:RelatedLink").collect do |i|
my_map = Hash.new
if i
my_map[:url] = element_text i.elements["aws:NavigableUrl"]
my_map[:title] = element_text i.elements["aws:Title"]
my_map[:relevance] = element_int i.elements["aws:Relevance"]
url_info.related_links << my_map
end
end
return url_info
end
|