diff --git a/README.rdoc b/README.rdoc
index 71d1d0a..d4e373f 100644
--- a/README.rdoc
+++ b/README.rdoc
@@ -132,40 +132,98 @@ Depending on the type of data point return, you may access certain data points i
=== Source/Target/URL Metrics
-* :status
-* :fq_domain_mozrank
-* :pl_domain_links
-* :pl_domain_external_links
+* :all_external_links
+* :canonical_internal_id
+* :canonical_url
+* :cblocks_linking
+* :domain_authority
+* :domain_authority_raw
+* :external_links
+* :external_mozrank
+* :external_mozrank_raw
* :fq_domain
+* :fq_domain_all_external_links
+* :fq_domain_external_links
+* :fq_domain_external_mozrank_sum
+* :fq_domain_external_mozrank_sum_raw
+* :fq_domain_fq_domains_linking
+* :fq_domain_internal_links
+* :fq_domain_juice_fq_domains_linking
+* :fq_domain_juice_internal_links
+* :fq_domain_juice_links
+* :fq_domain_juice_pl_domains_linking
+* :fq_domain_links
+* :fq_domain_mozrank
+* :fq_domain_mozrank_raw
+* :fq_domain_mozrank_sum
+* :fq_domain_mozrank_sum_raw
* :fq_domain_moztrust
+* :fq_domain_moztrust_raw
* :fq_domain_pl_domains_linking
-* :pl_domain
-* :url
+* :fq_domain_unfollowed_external_links
+* :fq_domain_unfollowed_fq_domains_linking
+* :fq_domain_unfollowed_internal_links
+* :fq_domain_unfollowed_links
+* :fq_domain_unfollowed_pl_domains_linking
+* :fq_domain_updated_at
+* :fq_domains_linking
+* :internal_id
+* :internal_links
+* :ips_linking
+* :juice_cblocks_linking
+* :juice_fq_domains_linking
+* :juice_internal_links
+* :juice_ips_linking
+* :juice_links
+* :juice_pl_domains_linking
+* :links
+* :mozrank
+* :mozrank_raw
+* :moztrust
+* :moztrust_raw
+* :page_authority
* :page_authority_raw
+* :pl_domain
+* :pl_domain_all_external_links
+* :pl_domain_cblocks_linking
+* :pl_domain_external_links
+* :pl_domain_external_mozrank_sum
* :pl_domain_external_mozrank_sum_raw
-* :links
-* :external_mozrank
+* :pl_domain_internal_links
+* :pl_domain_ips_linking
+* :pl_domain_juice_cblocks_linking
+* :pl_domain_juice_internal_links
+* :pl_domain_juice_ips_linking
+* :pl_domain_juice_links
+* :pl_domain_juice_pl_domains_linking
+* :pl_domain_links
* :pl_domain_mozrank
-* :juice_links
-* :title
-* :fq_domains_linking
-* :page_authority
-* :fq_domain_external_mozrank_sum_raw
-* :pl_domain_moztrust
-* :fq_domain_external_links
-* :domain_authority_raw
-* :canonical_url
+* :pl_domain_mozrank_raw
+* :pl_domain_mozrank_sum
* :pl_domain_mozrank_sum_raw
-* :fq_domain_links
-* :all
-* :mozrank
+* :pl_domain_moztrust
+* :pl_domain_moztrust_raw
* :pl_domain_pl_domains_linking
-* :external_links
-* :fq_domain_fq_domains_linking
+* :pl_domain_unfollowed_cblocks_linking
+* :pl_domain_unfollowed_external_links
+* :pl_domain_unfollowed_internal_links
+* :pl_domain_unfollowed_ips_linking
+* :pl_domain_unfollowed_links
+* :pl_domain_unfollowed_pl_domains_linking
+* :pl_domain_updated_at
* :pl_domains_linking
-* :domain_authority
-* :fq_domain_mozrank_sum_raw
-* :moztrust
+* :status
+* :title
+* :unfollowed_cblocks_linking
+* :unfollowed_external_links
+* :unfollowed_fq_domains_linking
+* :unfollowed_internal_links
+* :unfollowed_ips_linking
+* :unfollowed_links
+* :unfollowed_pl_domains_linking
+* :updated_at
+* :url
+
=== Link Metrics
@@ -182,7 +240,6 @@ Depending on the type of data point return, you may access certain data points i
* :text
* :internal_subdomains_linking
* :external_domains_linking
-* :all
* :record_id
* :external_pages_linking
diff --git a/Rakefile b/Rakefile
index 0989577..fe011ee 100644
--- a/Rakefile
+++ b/Rakefile
@@ -9,7 +9,7 @@ begin
gem.description = %Q{Provides an interface to SEOmoz's suite of APIs, including the free and site intelligence APIs.}
gem.email = %q{api@seomoz.org}
gem.homepage = "http://github.com/seomoz/linkscape-gem"
- gem.authors = ["Marty Smyth", "Jeff Pollard"]
+ gem.authors = ["Martin Tithonium", "Jeff Pollard", "Bryce Howard"]
gem.add_dependency "ruby-hmac", ">= 0"
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
end
diff --git a/lib/linkscape/constants.rb b/lib/linkscape/constants.rb
index aeb28bb..0f9584e 100644
--- a/lib/linkscape/constants.rb
+++ b/lib/linkscape/constants.rb
@@ -242,6 +242,98 @@ module Constants
:desc => %Q[The pay-level domain (PL domain) as it's identified in the Linkscape index],
},
+ :ued => {
+ :key => :all_external_links,
+ :name => 'All external links page to page',
+ :desc => %Q[The number of external links from one page to another (included followed and nofollowed).]
+ },
+ :ujfq => {
+ :key => :juice_fq_domains_linking,
+ :name => 'Followed Domains Linking Page',
+ :desc => %Q[The number of unique domains with followed links to the target url.]
+ },
+ :ujp => {
+ :key => :juice_ips_linking,
+ :name => 'Followed IPs Linking',
+ :desc => %Q[The number unique IPs with a followable link to a target url.]
+ },
+ :uip => {
+ :key => :ips_linking,
+ :name => 'IPs Linking',
+ :desc => %Q[The total number of unique IPs linking to a target url.]
+ },
+ :ujpl => {
+ :key => :juice_pl_domains_linking,
+ :name => 'Followed Domains to Page',
+ :desc => %Q[The number of unique domains with followed links to a given url.]
+ },
+ :uib => {
+ :key => :cblocks_linking,
+ :name => 'All Cblock Linking',
+ :desc => %Q[The total number unique cblocks linking to a page.]
+ },
+ :ujb => {
+ :key => :juice_cblocks_linking,
+ :name => 'Followed CBLocks Linking',
+ :desc => %Q[The total number unique cblocks with followed links to a page.]
+ },
+ :fjid => {
+ :key => :fq_domain_juice_links,
+ :name => 'Followed Subdomain Linking Domains',
+ :desc => %Q[A count of all unique subdomains with followed links to the target domain.]
+ },
+ :fed => {
+ :key => :fq_domain_all_external_links,
+ :name => 'Subdomain External Links',
+ :desc => %Q[The total number (followed and nofollowed) external links to the subdomain of the url.]
+ },
+ :fjf => {
+ :key => :fq_domain_juice_fq_domains_linking,
+ :name => 'Followed Subdomain Subdomains Links',
+ :desc => %Q[The number of subdomains with followed links to the subdomain of the url.]
+ },
+ :fjd => {
+ :key => :fq_domain_juice_pl_domains_linking,
+ :name => 'Followed Domain Subdomains Links',
+ :desc => %Q[The number of unique domains with followed links to the subdomain of the url.]
+ },
+ :pjid => {
+ :key => :pl_domain_juice_links,
+ :name => 'Followed Root Domain Links',
+ :desc => %Q[The total number of followed links (both internal and external) from a page to a domain.]
+ },
+ :ped => {
+ :key => :pl_domain_all_external_links,
+ :name => 'All Root Domain External Links',
+ :desc => %Q[The total number of external links (both followed and no-followed) from a page to a domain.]
+ },
+ :pjd => {
+ :key => :pl_domain_juice_pl_domains_linking,
+ :name => 'All Followed Root Domains Linking Domain',
+ :desc => %Q[The total number of followed root domains linking to the target's domain.]
+ },
+ :pip => {
+ :key => :pl_domain_ips_linking,
+ :name => 'IPs Linking to Domain',
+ :desc => %Q[The total number of unique IPs linking to the target's domain.]
+ },
+ :pjip => {
+ :key => :pl_domain_juice_ips_linking,
+ :name => 'Followed IPs Linking to Domain',
+ :desc => %Q[The total number of unique IPs with followed links to the target's domain.]
+ },
+ :pib => {
+ :key => :pl_domain_cblocks_linking,
+ :name => 'All Cblock Linking Domain',
+ :desc => %Q[The number of unique cblocks with a link to a domain.]
+ },
+ :pjb => {
+ :key => :pl_domain_juice_cblocks_linking,
+ :name => 'Followed Cblock Linking Domain',
+ :desc => %Q[The total number of cblock with followed links to a domain.]
+ },
+
+
:upa => {
:name => 'Page Authority',
:key => :page_authority,
@@ -268,8 +360,8 @@ module Constants
nil => :source,
:lu => :target,
}
-
-
+
+
LinkResponseFields = {
:t => {
:name => 'Anchor Text',
@@ -311,8 +403,8 @@ module Constants
LinkResponsePrefixes = {
:l => :link,
}
-
-
+
+
AnchorResponseFields = {
:t => {
:name => 'Anchor Text',
@@ -374,10 +466,45 @@ module Constants
:atf => :anchor,
:atu => :anchor,
}
-
-
+
+ # For values calculated from other values.
+ # format is [ :unknown_fraction, [ :whole_value, :known_fraction ] ]
+ # result is data[:unknown_fraction] = data[:whole_value] - data[:known_fraction]
+ # IFF both data[:whole_value] and data[:known_fraction] are present.
+ #
+ # Some calculated values are based on other calculated values,
+ # so be careful about the ordering of the list.
+ CalculationKeyMap = [
+ [:unfollowed_external_links, [ :all_external_links, :external_links ]],
+ [:unfollowed_links, [ :links, :juice_links ]],
+ [:juice_internal_links, [ :juice_links, :external_links ]],
+ [:internal_links, [ :links, :all_external_links ]],
+ [:unfollowed_internal_links, [ :internal_links, :juice_internal_links ]],
+
+ [:fq_domain_unfollowed_external_links, [ :fq_domain_all_external_links, :fq_domain_external_links ]],
+ [:fq_domain_unfollowed_links, [ :fq_domain_links, :fq_domain_juice_links ]],
+ [:fq_domain_juice_internal_links, [ :fq_domain_juice_links, :fq_domain_external_links ]],
+ [:fq_domain_internal_links, [ :fq_domain_links, :fq_domain_all_external_links ]],
+ [:fq_domain_unfollowed_internal_links, [ :fq_domain_internal_links, :fq_domain_juice_internal_links ]],
+
+ [:pl_domain_unfollowed_external_links, [ :pl_domain_all_external_links, :pl_domain_external_links ]],
+ [:pl_domain_unfollowed_links, [ :pl_domain_links, :pl_domain_juice_links ]],
+ [:pl_domain_juice_internal_links, [ :pl_domain_juice_links, :pl_domain_external_links ]],
+ [:pl_domain_internal_links, [ :pl_domain_links, :pl_domain_all_external_links ]],
+ [:pl_domain_unfollowed_internal_links, [ :pl_domain_internal_links, :pl_domain_juice_internal_links ]],
+
+ [:unfollowed_fq_domains_linking, [ :fq_domains_linking, :juice_fq_domains_linking ]],
+ [:unfollowed_pl_domains_linking, [ :pl_domains_linking, :juice_pl_domains_linking ]],
+ [:fq_domain_unfollowed_fq_domains_linking, [ :fq_domain_fq_domains_linking, :fq_domain_juice_fq_domains_linking ]],
+ [:pl_domain_unfollowed_pl_domains_linking, [ :pl_domain_pl_domains_linking, :pl_domain_juice_pl_domains_linking ]],
+ [:fq_domain_unfollowed_pl_domains_linking, [ :fq_domain_pl_domains_linking, :fq_domain_juice_pl_domains_linking ]],
+ [:unfollowed_ips_linking, [ :ips_linking, :juice_ips_linking ]],
+ [:unfollowed_cblocks_linking, [ :cblocks_linking, :juice_cblocks_linking ]],
+ [:pl_domain_unfollowed_cblocks_linking, [ :pl_domain_cblocks_linking, :pl_domain_juice_cblocks_linking ]],
+ [:pl_domain_unfollowed_ips_linking, [ :pl_domain_ips_linking, :pl_domain_juice_ips_linking ]],
+ ]
ResponseFields = {}
-
+
URLResponsePrefixes.each do |prefix, subject|
URLResponseFields.each do |k,v|
v = v.dup.merge(
@@ -408,11 +535,11 @@ module Constants
ResponseFields[v[:source]] = v
end
end
-
+
ResponseFields.keys.each {|k| ResponseFields[ResponseFields[k][:key]] ||= ResponseFields[k] if ResponseFields[k][:key] }
-
+
LongestNameLength = ResponseFields.collect{|k,v|v[:name].length}.max
LongestKeyLength = ResponseFields.collect{|k,v|v[:key].to_s.length}.max
-
+
end
end
diff --git a/lib/linkscape/constants/anchor-metrics.rb b/lib/linkscape/constants/anchor-metrics.rb
index ea9a050..e125ce0 100644
--- a/lib/linkscape/constants/anchor-metrics.rb
+++ b/lib/linkscape/constants/anchor-metrics.rb
@@ -5,65 +5,65 @@ module AnchorMetrics
RequestBits = {
:text => {
:name => 'text',
- :flag => 2,
+ :flag => 2**1, # 2
:desc => %Q[The anchor text term or phrase]
},
:record_id => {
:name => 'record_id',
- :flag => 4,
+ :flag => 2**2, # 4
:desc => %Q[Internal record ID of the target]
},
:internal_pages_linking => {
:name => 'Internal Pages Linking',
- :flag => 8,
+ :flag => 2**3, # 8
:desc => %Q[the number of internal pages linking]
},
:internal_subdomains_linking => {
:name => 'Internal Subdomains Linking',
- :flag => 16,
+ :flag => 2**4, # 16
:desc => %Q[the number of internal subdomains linking]
},
:external_pages_linking => {
:name => 'External Pages Linking',
- :flag => 32,
+ :flag => 2**5, # 32
:desc => %Q[the number of external pages linking]
},
:external_subdomains_linking => {
:name => 'External Subdomains Linking',
- :flag => 64,
+ :flag => 2**6, # 64
:desc => %Q[the number of external subdomains linking]
},
:external_domains_linking => {
:name => 'External Domains Linking',
- :flag => 128,
+ :flag => 2**7, # 128
:desc => %Q[the number of external domains linking]
},
:internal_mozrank => {
:name => 'Internal mozRank',
- :flag => 256,
+ :flag => 2**8, # 256
:desc => %Q[the sum of mozRank passed along internal links]
},
:external_mozrank => {
:name => 'External mozRank',
- :flag => 512,
+ :flag => 2**9, # 512
:desc => %Q[the sum of mozRank passed along external links]
},
:flags => {
:name => 'Flags',
- :flag => 1024,
+ :flag => 2**10, # 1024
:desc => %Q[a flags column]
},
}
RequestBits[:all] = {
- :name => 'All columnts',
- :flag => RequestBits.keys.inject(0) {|sum,k| sum + RequestBits[k][:flag]},
+ :name => 'All columns',
+ :flag => RequestBits.keys.inject(0) {|sum,k| sum | RequestBits[k][:flag]},
:desc => %Q[Requests all known columns from the API]
}
ResponseFlags = {
:alt_text => {
:name => 'Alt Text',
- :flag => 1,
+ :flag => 2**0, # 1
:desc => %Q[The anchor text is from the alt text of an image]
},
}
diff --git a/lib/linkscape/constants/link-metrics.rb b/lib/linkscape/constants/link-metrics.rb
index 24c830d..1f737a1 100644
--- a/lib/linkscape/constants/link-metrics.rb
+++ b/lib/linkscape/constants/link-metrics.rb
@@ -5,90 +5,90 @@ module LinkMetrics
RequestBits = {
:flags => {
:name => 'Flags',
- :flag => 2,
+ :flag => 2**1, # 2
:desc => %Q[A bit field indicating a variety of attributes which apply to this link.]
},
:text => {
:name => 'Anchor Text',
- :flag => 4,
+ :flag => 2**2, # 4
:desc => %Q[The anchor text of the link, including any markup (e.g. image tags with alt text).]
},
:mozrank => {
:name => 'mozRank Passed',
- :flag => 16,
+ :flag => 2**4, # 16
:desc => %Q[The amount of mozRank passed by the link. Requesting this metric will provide both the pretty 10-point score and the raw score.]
}
}
RequestBits[:all] = {
- :name => 'All columnts',
- :flag => RequestBits.keys.inject(0) {|sum,k| sum + RequestBits[k][:flag]},
+ :name => 'All columns',
+ :flag => RequestBits.keys.inject(0) {|sum,k| sum | RequestBits[k][:flag]},
:desc => %Q[Requests all known columns from the API]
}
ResponseFlags = {
:no_follow => {
:name => 'No Follow',
- :flag => 1,
+ :flag => 2**0, # 1
:desc => %Q[The link in question bore a "rel=nofollow" directive indicating that no juice should flow over the link.]
},
:same_subdomain => {
:name => 'Same Subdomain',
- :flag => 2,
+ :flag => 2**1, # 2
:desc => %Q[The link is between two pages on the same domain. This is an internal link.]
},
:meta_refresh => {
:name => 'Meta Refresh',
- :flag => 4,
+ :flag => 2**2, # 4
:desc => %Q[The link is actually a meta refresh from the source page to the target.]
},
:same_ip_address => {
:name => 'Same IP Address',
- :flag => 8,
+ :flag => 2**3, # 8
:desc => %Q[The link is between two pages hosted on the same IP address, strongly indicating a potential administrative relationship between the two.]
},
:same_c_block => {
:name => 'Same C-Block',
- :flag => 16,
+ :flag => 2**4, # 16
:desc => %Q[The link is between two pages hosted on the same C Block of IP addresses, indicating a potential administrative relationship between the two.]
},
:redirect301 => {
:name => '301',
- :flag => 64,
+ :flag => 2**6, # 64
:desc => %Q[The link is a 301 redirect. The source page returned a 301 redirect to our crawler, indicating that the resource was available on the target.]
},
:redirect302 => {
:name => '302',
- :flag => 128,
+ :flag => 2**7, # 128
:desc => %Q[The link is a 302 redirect. The source page returned a 302 redirect to our crawler, indicating that the resource was temporarily available on the target.]
},
:no_script => {
:name => 'No Script',
- :flag => 256,
+ :flag => 2**8, # 256
:desc => %Q[The link was located within a noscript html block. This means the link may not have been visible to users using javascript.]
},
:off_screen => {
:name => 'Off Screen',
- :flag => 512,
+ :flag => 2**9, # 512
:desc => %Q[We determined that the link likely appears offscreen. This means that the link may not have been visible to most users.]
},
:meta_no_follow => {
:name => 'Meta No Follow',
- :flag => 2048,
+ :flag => 2**11, # 2048
:desc => %Q[The link appeared on a page using a page level (meta) no follow directive. This link passes no juice.]
},
:same_root_domain => {
:name => 'Same Root Domain',
- :flag => 4096,
+ :flag => 2**12, # 4096
:desc => %Q[The link is between two pages on the same root domain. The link is not internal, but this strongly indicates an administrative relationship between the two pages.]
},
:feed_autodiscovery => {
:name => 'Feed Autodiscovery',
- :flag => 16384,
+ :flag => 2**14, # 16384
:desc => %Q[The link indicates a syndication feed (e.g. rss or atom) for the source page.]
},
:rel_canonical => {
:name => 'Rel Canonical',
- :flag => 32768,
+ :flag => 2**15, # 32768
:desc => %Q[The link indicates a canonical form of the page using the rel=canonical directive]
}
}
diff --git a/lib/linkscape/constants/url-metrics.rb b/lib/linkscape/constants/url-metrics.rb
index c00b083..f954fb1 100644
--- a/lib/linkscape/constants/url-metrics.rb
+++ b/lib/linkscape/constants/url-metrics.rb
@@ -5,176 +5,346 @@ module URLMetrics
RequestBits = {
:title => {
:name => 'Title',
- :flag => 1,
+ :flag => 2**0, # 1
:desc => %Q[The title of the page if available. For example: "Request-Response Format"]
},
:url => {
:name => 'URL',
- :flag => 4,
+ :flag => 2**2, # 4
:desc => %Q[The url of the page. For example: "apiwiki.seomoz.org/Request-Response+Format"]
},
:fq_domain => {
:name => 'Subdomain',
- :flag => 8,
+ :flag => 2**3, # 8
:desc => %Q[The subdomain of the url. For example: "apiwiki.seomoz.org"]
},
:pl_domain => {
:name => 'Root Domain',
- :flag => 16,
+ :flag => 2**4, # 16
:desc => %Q[The root domain of the url. For example: "seomoz.org"]
},
:external_links => {
:name => 'External Links',
- :flag => 32,
+ :flag => 2**5, # 32
:desc => %Q[The number of juice-passing external links to the url.]
},
:fq_domain_external_links => {
:name => 'Subdomain External Links',
- :flag => 64,
+ :flag => 2**6, # 64
:desc => %Q[The number of juice-passing external links to the subdomain of the url.]
},
:pl_domain_external_links => {
:name => 'Root Domain External Links',
- :flag => 128,
+ :flag => 2**7, # 128
:desc => %Q[The number of juice-passing external links to the root domain of the url.]
},
:juice_links => {
:name => 'Juice-Passing Links',
- :flag => 256,
+ :flag => 2**8, # 256
:desc => %Q[The number of juice-passing links (internal or external) to the url.]
},
:fq_domains_linking => {
:name => 'Subdomains Linking',
- :flag => 512,
+ :flag => 2**9, # 512
:desc => %Q[The number of subdomains with any pages linking to the url.]
},
:pl_domains_linking => {
:name => 'Root Domains Linking',
- :flag => 1024,
+ :flag => 2**10, # 1024
:desc => %Q[The number of root domains with any pages linking to the url.]
},
:links => {
:name => 'Links',
- :flag => 2048,
+ :flag => 2**11, # 2048
:desc => %Q[The number of links (juice-passing or not, internal or external) to the url.]
},
:fq_domain_links => {
:name => 'Subdomain Links',
- :flag => 4294967296,
+ :flag => 2**32, # 4294967296
:desc => %Q[The number of links to any page on the subdomain of the url.]
},
:fq_domain_fq_domains_linking => {
:name => 'Subdomain Subdomains Linking',
- :flag => 4096,
+ :flag => 2**12, # 4096
:desc => %Q[The number of subdomains with any pages linking to the subdomain of the url.]
},
:fq_domain_pl_domains_linking => {
:name => 'Subdomain Root Domains Linking',
- :flag => 17179869184,
+ :flag => 2**34, # 17179869184
:desc => %Q[The number of domains with any pages linking to the subdomain of the url.]
},
:pl_domain_links => {
:name => 'Root Domain Links',
- :flag => 8589934592,
+ :flag => 2**33, # 8589934592
:desc => %Q[The number of links to any page on the root domain of the url.]
},
:pl_domain_pl_domains_linking => {
:name => 'Root Domain Root Domains Linking',
- :flag => 8192,
+ :flag => 2**13, # 8192
:desc => %Q[The number of root domains with any pages linking to the root domain of the url.]
},
:mozrank => {
:name => 'mozRank',
- :flag => 16384,
+ :flag => 2**14, # 16384
:desc => %Q[The mozRank of the url. Requesting this metric will provide both the pretty 10-point score and the raw score.]
},
:fq_domain_mozrank => {
:name => 'Subdomain mozRank',
- :flag => 32768,
+ :flag => 2**15, # 32768
:desc => %Q[The mozRank of the subdomain of the url. Requesting this metric will provide both the pretty 10-point score and the raw score.]
},
:pl_domain_mozrank => {
:name => 'Root Domain mozRank',
- :flag => 65536,
+ :flag => 2**16, # 65536
:desc => %Q[The mozRank of the Root Domain of the url. Requesting this metric will provide both the pretty 10-point score and the raw score.]
},
:moztrust => {
:name => 'mozTrust',
- :flag => 131072,
+ :flag => 2**17, # 131072
:desc => %Q[The mozTrust of the url. Requesting this metric will provide both the pretty 10-point score and the raw score.]
},
:fq_domain_moztrust => {
:name => 'Subdomain mozTrust',
- :flag => 262144,
+ :flag => 2**18, # 262144
:desc => %Q[The mozTrust of the subdomain of the url. Requesting this metric will provide both the pretty 10-point score and the raw score.]
},
:pl_domain_moztrust => {
:name => 'Root Domain mozTrust',
- :flag => 524288,
+ :flag => 2**19, # 524288
:desc => %Q[The mozTrust of the root domain of the url. Requesting this metric will provide both the pretty 10-point score and the raw score.]
},
:external_mozrank => {
:name => 'External mozRank',
- :flag => 1048576,
+ :flag => 2**20, # 1048576
:desc => %Q[The portion of the url's mozRank coming from external links. Requesting this metric will provide both the pretty 10-point score and the raw score.]
},
:fq_domain_external_mozrank_sum_raw => {
:name => 'Subdomain External Domain Juice',
- :flag => 2097152,
+ :flag => 2**21, # 2097152
:desc => %Q[The portion of the mozRank of all pages on the subdomain coming from external links. Requesting this metric will provide both the pretty 10-point score and the raw score.]
},
:pl_domain_external_mozrank_sum_raw => {
:name => 'Root Domain External Domain Juice',
- :flag => 4194304,
+ :flag => 2**22, # 4194304
:desc => %Q[The portion of the mozRank of all pages on the root domain coming from external links. Requesting this metric will provide both the pretty 10-point score and the raw score.]
- # source.External mozRank sum of all PL Domain Pages (raw) - 9.8334596959365e-11
},
:fq_domain_mozrank_sum_raw => {
:name => 'Subdomain Domain Juice',
- :flag => 8388608,
+ :flag => 2**23, # 8388608
:desc => %Q[The mozRank of all pages on the subdomain combined. Requesting this metric will provide both the pretty 10-point score and the raw score.]
},
:pl_domain_mozrank_sum_raw => {
:name => 'Root Domain Domain Juice',
- :flag => 16777216,
+ :flag => 2**24, # 16777216
:desc => %Q[The mozRank of all pages on the root domain combined. Requesting this metric will provide both the pretty 10-point score and the raw score.]
},
:canonical_url => {
:name => 'Canonical URL',
- :flag => 268435456,
+ :flag => 2**28, # 268435456
:desc => %Q[If the url canaonicalizes to a different form, that canonical form will be available in this field]
},
:status => {
:name => 'HTTP Status Code',
- :flag => 536870912,
+ :flag => 2**29, # 536870912
:desc => %Q[The HTTP status code recorded by Linkscape for this URL (if available)]
},
:page_authority => {
:name => 'Page Authority',
- :flag => 34359738368,
+ :flag => 2**35, # 34359738368
:desc => %Q[The page authority of this URL. This will return the pretty 100-point score.]
},
:domain_authority => {
:name => 'Domain Authority',
- :flag => 68719476736,
+ :flag => 2**36, # 68719476736
:desc => %Q[The page authority of all pages on the root domain. This will return the pretty 100-point score.]
},
+
+ :all_external_links => {
+ :name => 'All external links page to page',
+ :flag => 2**39,
+ :desc => %Q[The number of external links from one page to another (included followed and nofollowed).]
+ },
+ :juice_fq_domains_linking => {
+ :name => 'Followed Domains Linking Page',
+ :flag => 2**40,
+ :desc => %Q[The number of unique domains with followed links to the target url.]
+ },
+ :juice_ips_linking => {
+ :name => 'Followed IPs Linking',
+ :flag => 2**41,
+ :desc => %Q[The number unique IPs with a followable link to a target url.]
+ },
+ :ips_linking => {
+ :name => 'IPs Linking',
+ :flag => 2**42,
+ :desc => %Q[The total number of unique IPs linking to a target url.]
+ },
+ :juice_pl_domains_linking => {
+ :name => 'Followed Domains to Page',
+ :flag => 2**43,
+ :desc => %Q[The number of unique domains with followed links to a given url.]
+ },
+ :cblocks_linking => {
+ :name => 'All Cblock Linking',
+ :flag => 2**44,
+ :desc => %Q[The total number unique cblocks linking to a page.]
+ },
+ :juice_cblocks_linking => {
+ :name => 'Followed CBLocks Linking',
+ :flag => 2**45,
+ :desc => %Q[The total number unique cblocks with followed links to a page.]
+ },
+ :fq_domain_juice_links => {
+ :name => 'Followed Subdomain Linking Domains',
+ :flag => 2**46,
+ :desc => %Q[A count of all unique subdomains with followed links to the target domain.]
+ },
+ :fq_domain_all_external_links => {
+ :name => 'Subdomain External Links',
+ :flag => 2**47,
+ :desc => %Q[The total number (followed and nofollowed) external links to the subdomain of the url.]
+ },
+ :fq_domain_juice_fq_domains_linking => {
+ :name => 'Followed Subdomain Subdomains Links',
+ :flag => 2**48,
+ :desc => %Q[The number of subdomains with followed links to the subdomain of the url.]
+ },
+ :fq_domain_juice_pl_domains_linking => {
+ :name => 'Followed Domain Subdomains Links',
+ :flag => 2**49,
+ :desc => %Q[The number of unique domains with followed links to the subdomain of the url.]
+ },
+ :pl_domain_juice_links => {
+ :name => 'Followed Root Domain Links',
+ :flag => 2**50,
+ :desc => %Q[The total number of followed links (both internal and external) from a page to a domain.]
+ },
+ :pl_domain_all_external_links => {
+ :name => 'All Root Domain External Links',
+ :flag => 2**51,
+ :desc => %Q[The total number of external links (both followed and no-followed) from a page to a domain.]
+ },
+ :pl_domain_juice_pl_domains_linking => {
+ :name => 'All Followed Root Domains Linking Domain',
+ :flag => 2**52,
+ :desc => %Q[The total number of followed root domains linking to the target's domain.]
+ },
+ :pl_domain_ips_linking => {
+ :name => 'IPs Linking to Domain',
+ :flag => 2**53,
+ :desc => %Q[The total number of unique IPs linking to the target's domain.]
+ },
+ :pl_domain_juice_ips_linking => {
+ :name => 'Followed IPs Linking to Domain',
+ :flag => 2**54,
+ :desc => %Q[The total number of unique IPs with followed links to the target's domain.]
+ },
+ :pl_domain_cblocks_linking => {
+ :name => 'All Cblock Linking Domain',
+ :flag => 2**55,
+ :desc => %Q[The number of unique cblocks with a link to a domain.]
+ },
+ :pl_domain_juice_cblocks_linking => {
+ :name => 'Followed Cblock Linking Domain',
+ :flag => 2**56,
+ :desc => %Q[The total number of cblock with followed links to a domain.]
+ },
+
:page_authority_raw => {
:name => 'Raw Page Authority',
- :flag => 137438953472,
+ :flag => 2**37, # 137438953472
:desc => %Q[The page authority of this URL. This will return the raw score.]
},
:domain_authority_raw => {
:name => 'Raw Domain Authority',
- :flag => 274877906944,
+ :flag => 2**38, # 274877906944
:desc => %Q[The page authority of all pages on the root domain. This will return the raw score.]
},
+
+ # The following are calculated values. If you ask for them,
+ # we'll convert it into a request for the fields they
+ # depend on. In the Response, we'll then set the key from
+ # those values.
+ :unfollowed_external_links => {
+ :flag => 2**39 | 2**5,
+ },
+ :unfollowed_links => {
+ :flag => 2**11 | 2**8,
+ },
+ :juice_internal_links => {
+ :flag => 2**8 | 2**5,
+ },
+ :internal_links => {
+ :flag => 2**11 | 2**39,
+ },
+ :unfollowed_internal_links => {
+ :flag => 2**11 | 2**39 | 2**8 | 2**5,
+ },
+ :fq_domain_unfollowed_external_links => {
+ :flag => 2**47 | 2**6,
+ },
+ :fq_domain_unfollowed_links => {
+ :flag => 2**32 | 2**46,
+ },
+ :fq_domain_juice_internal_links => {
+ :flag => 2**46 | 2**6,
+ },
+ :fq_domain_internal_links => {
+ :flag => 2**32 | 2**47,
+ },
+ :fq_domain_unfollowed_internal_links => {
+ :flag => 2**32 | 2**47 | 2**46 | 2**6,
+ },
+ :pl_domain_unfollowed_external_links => {
+ :flag => 2**51 | 2**7,
+ },
+ :pl_domain_unfollowed_links => {
+ :flag => 2**33 | 2**50,
+ },
+ :pl_domain_juice_internal_links => {
+ :flag => 2**50 | 2**7,
+ },
+ :pl_domain_internal_links => {
+ :flag => 2**33 | 2**51,
+ },
+ :pl_domain_unfollowed_internal_links => {
+ :flag => 2**33 | 2**51 | 2**50 | 2**7,
+ },
+ :unfollowed_fq_domains_linking => {
+ :flag => 2**9 | 2**40,
+ },
+ :unfollowed_pl_domains_linking => {
+ :flag => 2**10 | 2**43,
+ },
+ :fq_domain_unfollowed_fq_domains_linking => {
+ :flag => 2**12 | 2**48,
+ },
+ :pl_domain_unfollowed_pl_domains_linking => {
+ :flag => 2**13 | 2**52,
+ },
+ :fq_domain_unfollowed_pl_domains_linking => {
+ :flag => 2**34 | 2**49,
+ },
+ :unfollowed_ips_linking => {
+ :flag => 2**42 | 2**41,
+ },
+ :unfollowed_cblocks_linking => {
+ :flag => 2**44 | 2**45,
+ },
+ :pl_domain_unfollowed_cblocks_linking => {
+ :flag => 2**55 | 2**56,
+ },
+ :pl_domain_unfollowed_ips_linking => {
+ :flag => 2**53 | 2**54,
+ },
+
+
}
RequestBits[:all] = {
- :name => 'All columnts',
- :flag => RequestBits.keys.inject(0) {|sum,k| sum + RequestBits[k][:flag]},
+ :name => 'All columns',
+ :flag => RequestBits.keys.inject(0) {|sum,k| sum | RequestBits[k][:flag]},
:desc => %Q[Requests all known columns from the API]
}
diff --git a/lib/linkscape/response.rb b/lib/linkscape/response.rb
index 3b81d5d..e82e4dd 100644
--- a/lib/linkscape/response.rb
+++ b/lib/linkscape/response.rb
@@ -32,9 +32,18 @@ def initialize(data, type=nil)
elsif Array === @data
:array
end
+
@data.symbolize_keys! if Hash === @data
@data = @data.collect{|d|ResponseData.new(d)} if Array === @data
+ if Hash === @data && !type.nil?
+ Linkscape::Constants::CalculationKeyMap.each do |key, keys|
+ unless @data[keys[0]].nil? or @data[keys[1]].nil?
+ @data[key] = @data[keys[0]] - @data[keys[1]]
+ end
+ end
+ end
+
if @type == :hash
subdatas = {}
@data.each do |k,v|
@@ -75,11 +84,7 @@ def to_s(indent="")
printer = Proc.new do |h,prefix|
o = ""
h.sort{|l,r|l[0].to_s<=>r[0].to_s}.each do |k,v|
- field = Linkscape::Constants::ResponseFields[k]
v = v.to_s
- # v = ((field && field[:bitfield]) ? v.to_a.inspect : v).to_s
- #desc = field ? field[:name] : '*'+k.inspect
- #o += %Q[%s%-#{Linkscape::Constants::LongestNameLength+15}.#{Linkscape::Constants::LongestNameLength+15}s - %s\n] % [prefix, desc, v]
o += %Q[%s%-#{Linkscape::Constants::LongestKeyLength+5}.#{Linkscape::Constants::LongestKeyLength+5}s - %s\n] % [prefix, k, v]
end
o
diff --git a/linkscape.gemspec b/linkscape.gemspec
index 18741a1..7d69c11 100644
--- a/linkscape.gemspec
+++ b/linkscape.gemspec
@@ -1,6 +1,6 @@
# Generated by jeweler
# DO NOT EDIT THIS FILE DIRECTLY
-# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
+# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
# -*- encoding: utf-8 -*-
Gem::Specification.new do |s|
@@ -8,38 +8,36 @@ Gem::Specification.new do |s|
s.version = "0.2.7"
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
- s.authors = ["Marty Smyth", "Jeff Pollard"]
- s.date = %q{2010-08-31}
+ s.authors = ["Martin Tithonium", "Jeff Pollard", "Bryce Howard"]
+ s.date = %q{2010-12-09}
s.description = %q{Provides an interface to SEOmoz's suite of APIs, including the free and site intelligence APIs.}
s.email = %q{api@seomoz.org}
s.extra_rdoc_files = [
"LICENSE",
- "README.rdoc"
+ "README.rdoc"
]
s.files = [
- ".gitignore",
- "LICENSE",
- "README.rdoc",
- "Rakefile",
- "VERSION",
- "lib/hash-ext.rb",
- "lib/linkscape.rb",
- "lib/linkscape/client.rb",
- "lib/linkscape/constants.rb",
- "lib/linkscape/constants/anchor-metrics.rb",
- "lib/linkscape/constants/link-metrics.rb",
- "lib/linkscape/constants/url-metrics.rb",
- "lib/linkscape/errors.rb",
- "lib/linkscape/request.rb",
- "lib/linkscape/response.rb",
- "lib/linkscape/signer.rb",
- "lib/string-ext.rb",
- "linkscape.gemspec",
- "rails/init.rb",
- "test.rb"
+ "LICENSE",
+ "README.rdoc",
+ "Rakefile",
+ "VERSION",
+ "lib/hash-ext.rb",
+ "lib/linkscape.rb",
+ "lib/linkscape/client.rb",
+ "lib/linkscape/constants.rb",
+ "lib/linkscape/constants/anchor-metrics.rb",
+ "lib/linkscape/constants/link-metrics.rb",
+ "lib/linkscape/constants/url-metrics.rb",
+ "lib/linkscape/errors.rb",
+ "lib/linkscape/request.rb",
+ "lib/linkscape/response.rb",
+ "lib/linkscape/signer.rb",
+ "lib/string-ext.rb",
+ "linkscape.gemspec",
+ "rails/init.rb",
+ "test.rb"
]
s.homepage = %q{http://github.com/seomoz/linkscape-gem}
- s.rdoc_options = ["--charset=UTF-8"]
s.require_paths = ["lib"]
s.rubygems_version = %q{1.3.7}
s.summary = %q{Provides an interface to the SEOmoz API}