Repository files navigation

referer-parser

Java/Scala: Build Status

referer-parser is a database for extracting marketing attribution data (such as search terms) from referer URLs, inspired by the ua-parserua-parser project (an equivalent library for user agent parsing).

The referer-parser project also contains multiple libraries for working with the referer-parser database in different languages.

referer-parser is a core component of Snowplowsnowplow, the open-source web-scale analytics platform powered by Hadoop and Redshift.

Note that we always use the original HTTP misspelling of 'referer' (and thus 'referal') in this project - never 'referrer'.

Database

The latest database is always available on this URL:

https://s3-eu-west-1.amazonaws.com/snowplow-hosted-assets/third-party/referer-parser/referers-latest.yml

The database is updated at most once a month. Each new version of the database is also uploaded with a timestamp:

https://s3-eu-west-1.amazonaws.com/snowplow-hosted-assets/third-party/referer-parser/referers-YYYY-MM.yml

If there is an issue with the database necessitating a re-release within the month, the corresponding files will be overwritten.

Maintainers

Usage: Java

The Java version of this library uses the updated API, and identifies search, social, webmail, internal and unknown referers:

importcom.snowplowanalytics.refererparser.Parser;
...
StringrefererUrl = "http://www.google.com/search?q=gateway+oracle+cards+denise+linn&hl=en&client=safari";
StringpageUrl = "http:/www.psychicbazaar.com/shop"; // Our current URLParserrefererParser = newParser();
Refererr = refererParser.parse(refererUrl, pageUrl);
System.out.println(r.medium); // => "search"System.out.println(r.source); // => "Google"System.out.println(r.term); // => "gateway oracle cards denise linn"

For more information, please see the Java/Scala [README] java-scala-readme.

Usage: Scala

The Scala version of this library uses the updated API, and identifies search, social, webmail, internal and unknown referers:

valrefererUrl="http://www.google.com/search?q=gateway+oracle+cards+denise+linn&hl=en&client=safari"valpageUrl="http:/www.psychicbazaar.com/shop"// Our current URLimportcom.snowplowanalytics.refererparser.scala.Parserfor (r <-Parser.parse(refererUrl, pageUrl)) {
println(r.medium) // => "search"for (s <- r.source) {
println(s) // => "Google"
}
for (t <- r.term) {
println(t) // => "gateway oracle cards denise linn"
}
}

You can also provide a list of domains which should be considered internal:

valrefererUrl="http://www.subdomain1.snowplowanalytics.com"valpageUrl="http://www.snowplowanalytics.com"valinternalDomains=List(
"www.subdomain1.snowplowanalytics.com", "www.subdomain2.snowplowanalytics.com"
)
importcom.snowplowanalytics.refererparser.scala.Parserfor (r <-Parser.parse(refererUrl, pageUrl, internalDomains)) {
println(r.medium) // => "internal"for (s <- r.source) {
println(s) // => null
}
for (t <- r.term) {
println(t) // => null
}
}

For more information, please see the Java/Scala [README] java-scala-readme.

Usage: Ruby

The Ruby version of this library uses the updated API:

require'referer-parser'parser=RefererParser::Parser.newparser.parse('http://www.google.com/search?q=gateway+oracle+cards+denise+linn&hl=en&client=safari')# => {:known=>true,
:uri=>"http://www.google.com/search?q=gateway+oracle+cards+denise+linn&hl=en&client=safari",
:source=>"Google",
:medium=>"search",
:term=>"gateway oracle cards denise linn"}

For more information, please see the Ruby [README] ruby-readme.

Usage: Python

Create a new instance of a Referer object by passing in the url you want to parse:

fromreferer_parserimportRefererreferer_url='http://www.google.com/search?q=gateway+oracle+cards+denise+linn&hl=en&client=safari'r=Referer(referer_url)

The r variable now holds a Referer instance. The important attributes are:

print(r.known) # Trueprint(r.referer) # 'Google'print(r.medium) # 'search'print(r.search_parameter) # 'q' print(r.search_term) # 'gateway oracle cards denise linn'print(r.uri) # ParseResult(scheme='http', netloc='www.google.com', path='/search', params='', query='q=gateway+oracle+cards+denise+linn&hl=en&client=safari', fragment='')

Optionally, pass in the current URL as well, to handle internal referers

fromreferer_parserimportRefererreferer_url='http://www.snowplowanalytics.com/about/team'curr_url='http://www.snowplowanalytics.com/account/profile'r=Referer(referer_url, curr_url)

For more information, please see the Python [README] python-readme.

Usage: node.js

The node.js (JavaScript) version of this library uses a hybrid of the new and old API, and identifies search, social, webmail, internal and unknown referers:

Create a new instance of a Referer object by passing in the url you want to parse:

varReferer=require('referer-parser')referer_url='http://www.google.com/search?q=gateway+oracle+cards+denise+linn&hl=en&client=safari'varr=newReferer(referer_url)

The r variable now holds a Referer instance.

Optionally, pass in the current URL as well, to handle internal referers

varReferer=require('referer-parser')varreferer_url='http://www.snowplowanalytics.com/about/team'varcurrent_url='http://www.snowplowanalytics.com/account/profile'varr=Referer(referer_url,current_url)

For more information, please see the node.js [README] nodejs-readme.

Usage: .NET

The .NET (C#) version of this library uses the updated API, and identifies search, social, webmail, internal and unknown referers:

usingRefererParser;
...
string refererUrl="http://www.google.com/search?q=gateway+oracle+cards+denise+linn&hl=en&client=safari";stringpageUrl="http:/www.psychicbazaar.com/shop";// Our current URLvarreferer=Parser.Parse(newUri(refererUrl),pageUrl);Console.WriteLine(r.Medium);// => "Search"Console.WriteLine(r.Source);// => "Google"Console.WriteLine(r.Term);// => "gateway oracle cards denise linn"

For more information, please see the .NET [README] dotnet-readme.

Usage: PHP

The PHP version of this library uses the updated API, and identifies search, social, webmail, internal and unknown referers:

useSnowplow\RefererParser\Parser;
$parser = newParser();
$referer = $parser->parse(
'http://www.google.com/search?q=gateway+oracle+cards+denise+linn&hl=en&client=safari',
'http:/www.psychicbazaar.com/shop'
);
if ($referer->isKnown()) {
echo$referer->getMedium(); // "Search"echo$referer->getSource(); // "Google"echo$referer->getTerm(); // "gateway oracle cards denise linn"
}

For more information, please see the PHP [README] php-readme.

Usage: Go

The Go version of this library uses the updated API:

package main
import (
"log""github.com/snowplow/referer-parser/go"
)
funcmain() {
referer_url:="http://www.google.com/search?q=gateway+oracle+cards+denise+linn&hl=en&client=safari"r:=refererparser.Parse(referer_url)
log.Printf("Known:%v", r.Known)
log.Printf("Referer:%v", r.Referer)
log.Printf("Medium:%v", r.Medium)
log.Printf("Search parameter:%v", r.SearchParameter)
log.Printf("Search term:%v", r.SearchTerm)
log.Printf("Host:%v", r.URI)
}

For more information, please see the Go [README] go-readme

referers.yml

referer-parser identifies whether a URL is a known referer or not by checking it against the [referers.yml] referers-yml file; the intention is that this YAML file is reusable as-is by every language-specific implementation of referer-parser.

The file is broken out into sections for the different mediums that we support:

  • unknown for when we know the source, but not the medium
  • email for webmail providers
  • social for social media services
  • search for search engines

Then within each section, we list each known provider (aka source) by name, and then which domains each provider uses. For search engines, we also list the parameters used in the search engine URL to identify the search term. For example:

Google: # Name of search engine refererparameters:
- 'q'# First parameter used by Google
- 'p'# Alternative parameter used by Googledomains:
- google.co.uk # One domain used by Google
- google.com # Another domain used by Google
- ...

The number of referers and the domains they use is constantly growing - we need to keep referers.yml up-to-date, and hope that the community will help!

Contributing

We welcome contributions to referer-parser:

  1. New search engines and other referers - if you notice a search engine, social network or other site missing from referers.yml, please fork the repo, add the missing entry and submit a pull request
  2. Ports of referer-parser to other languages - we welcome ports of referer-parser to new programming languages (e.g. Lua, Go, Haskell, C)
  3. Bug fixes, feature requests etc - much appreciated!

Please sign the [Snowplow CLA] cla before making pull requests.

Support

General support for referer-parser is handled by the team at Snowplow Analytics Ltd.

You can contact the Snowplow Analytics team through any of the [channels listed on their wiki] talk-to-us.

Copyright and license

referers.yml is based on [Piwik's] piwik [SearchEngines.php] piwik-search-engines and [Socials.php] piwik-socials, copyright 2012 Matthieu Aubry and available under the [GNU General Public License v3] gpl-license.

The Ruby implementation is copyright 2014 Inside Systems, Inc and is available under the [Apache License, Version 2.0] apache-license.

The Java/Scala port is copyright 2012-2014 [Snowplow Analytics Ltd] snowplow-analytics and is available under the [Apache License, Version 2.0] apache-license.

The Python port is copyright 2012-2014 [Don Spaulding] donspaulding and is available under the [Apache License, Version 2.0] apache-license.

The node.js (JavaScript) port is copyright 2013-2014 [Martin Katrenik] mkatrenik and is available under the [Apache License, Version 2.0] apache-license.

The .NET (C#) port is copyright 2013-2014 [iPerform Software] iperform and is available under the [Apache License, Version 2.0] apache-license.

The PHP port is copyright 2013-2014 [Lars Strojny] lstrojny and is available under the [MIT License] mit-license.

The Go port is copyright 2014 [Thomas Sileo] tsileo and is available under the [MIT License] mit-license.

About

Library for extracting marketing attribution data from referrer URLs

Resources

Stars

0 stars

Watchers

8 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

referer-parser

Java/Scala: Build Status

referer-parser is a database for extracting marketing attribution data (such as search terms) from referer URLs, inspired by the ua-parserua-parser project (an equivalent library for user agent parsing).

The referer-parser project also contains multiple libraries for working with the referer-parser database in different languages.

referer-parser is a core component of Snowplowsnowplow, the open-source web-scale analytics platform powered by Hadoop and Redshift.

Note that we always use the original HTTP misspelling of 'referer' (and thus 'referal') in this project - never 'referrer'.

Database

The latest database is always available on this URL:

https://s3-eu-west-1.amazonaws.com/snowplow-hosted-assets/third-party/referer-parser/referers-latest.yml

The database is updated at most once a month. Each new version of the database is also uploaded with a timestamp:

https://s3-eu-west-1.amazonaws.com/snowplow-hosted-assets/third-party/referer-parser/referers-YYYY-MM.yml

If there is an issue with the database necessitating a re-release within the month, the corresponding files will be overwritten.

Maintainers

Usage: Java

The Java version of this library uses the updated API, and identifies search, social, webmail, internal and unknown referers:

importcom.snowplowanalytics.refererparser.Parser;
...
StringrefererUrl = "http://www.google.com/search?q=gateway+oracle+cards+denise+linn&hl=en&client=safari";
StringpageUrl = "http:/www.psychicbazaar.com/shop"; // Our current URLParserrefererParser = newParser();
Refererr = refererParser.parse(refererUrl, pageUrl);
System.out.println(r.medium); // => "search"System.out.println(r.source); // => "Google"System.out.println(r.term); // => "gateway oracle cards denise linn"

For more information, please see the Java/Scala [README] java-scala-readme.

Usage: Scala

The Scala version of this library uses the updated API, and identifies search, social, webmail, internal and unknown referers:

valrefererUrl="http://www.google.com/search?q=gateway+oracle+cards+denise+linn&hl=en&client=safari"valpageUrl="http:/www.psychicbazaar.com/shop"// Our current URLimportcom.snowplowanalytics.refererparser.scala.Parserfor (r <-Parser.parse(refererUrl, pageUrl)) {
println(r.medium) // => "search"for (s <- r.source) {
println(s) // => "Google"
}
for (t <- r.term) {
println(t) // => "gateway oracle cards denise linn"
}
}

You can also provide a list of domains which should be considered internal:

valrefererUrl="http://www.subdomain1.snowplowanalytics.com"valpageUrl="http://www.snowplowanalytics.com"valinternalDomains=List(
"www.subdomain1.snowplowanalytics.com", "www.subdomain2.snowplowanalytics.com"
)
importcom.snowplowanalytics.refererparser.scala.Parserfor (r <-Parser.parse(refererUrl, pageUrl, internalDomains)) {
println(r.medium) // => "internal"for (s <- r.source) {
println(s) // => null
}
for (t <- r.term) {
println(t) // => null
}
}

For more information, please see the Java/Scala [README] java-scala-readme.

Usage: Ruby

The Ruby version of this library uses the updated API:

require'referer-parser'parser=RefererParser::Parser.newparser.parse('http://www.google.com/search?q=gateway+oracle+cards+denise+linn&hl=en&client=safari')# => {:known=>true,
:uri=>"http://www.google.com/search?q=gateway+oracle+cards+denise+linn&hl=en&client=safari",
:source=>"Google",
:medium=>"search",
:term=>"gateway oracle cards denise linn"}

For more information, please see the Ruby [README] ruby-readme.

Usage: Python

Create a new instance of a Referer object by passing in the url you want to parse:

fromreferer_parserimportRefererreferer_url='http://www.google.com/search?q=gateway+oracle+cards+denise+linn&hl=en&client=safari'r=Referer(referer_url)

The r variable now holds a Referer instance. The important attributes are:

print(r.known) # Trueprint(r.referer) # 'Google'print(r.medium) # 'search'print(r.search_parameter) # 'q' print(r.search_term) # 'gateway oracle cards denise linn'print(r.uri) # ParseResult(scheme='http', netloc='www.google.com', path='/search', params='', query='q=gateway+oracle+cards+denise+linn&hl=en&client=safari', fragment='')

Optionally, pass in the current URL as well, to handle internal referers

fromreferer_parserimportRefererreferer_url='http://www.snowplowanalytics.com/about/team'curr_url='http://www.snowplowanalytics.com/account/profile'r=Referer(referer_url, curr_url)

For more information, please see the Python [README] python-readme.

Usage: node.js

The node.js (JavaScript) version of this library uses a hybrid of the new and old API, and identifies search, social, webmail, internal and unknown referers:

Create a new instance of a Referer object by passing in the url you want to parse:

varReferer=require('referer-parser')referer_url='http://www.google.com/search?q=gateway+oracle+cards+denise+linn&hl=en&client=safari'varr=newReferer(referer_url)

The r variable now holds a Referer instance.

Optionally, pass in the current URL as well, to handle internal referers

varReferer=require('referer-parser')varreferer_url='http://www.snowplowanalytics.com/about/team'varcurrent_url='http://www.snowplowanalytics.com/account/profile'varr=Referer(referer_url,current_url)

For more information, please see the node.js [README] nodejs-readme.

Usage: .NET

The .NET (C#) version of this library uses the updated API, and identifies search, social, webmail, internal and unknown referers:

usingRefererParser;
...
string refererUrl="http://www.google.com/search?q=gateway+oracle+cards+denise+linn&hl=en&client=safari";stringpageUrl="http:/www.psychicbazaar.com/shop";// Our current URLvarreferer=Parser.Parse(newUri(refererUrl),pageUrl);Console.WriteLine(r.Medium);// => "Search"Console.WriteLine(r.Source);// => "Google"Console.WriteLine(r.Term);// => "gateway oracle cards denise linn"

For more information, please see the .NET [README] dotnet-readme.

Usage: PHP

The PHP version of this library uses the updated API, and identifies search, social, webmail, internal and unknown referers:

useSnowplow\RefererParser\Parser;
$parser = newParser();
$referer = $parser->parse(
'http://www.google.com/search?q=gateway+oracle+cards+denise+linn&hl=en&client=safari',
'http:/www.psychicbazaar.com/shop'
);
if ($referer->isKnown()) {
echo$referer->getMedium(); // "Search"echo$referer->getSource(); // "Google"echo$referer->getTerm(); // "gateway oracle cards denise linn"
}

For more information, please see the PHP [README] php-readme.

Usage: Go

The Go version of this library uses the updated API:

package main
import (
"log""github.com/snowplow/referer-parser/go"
)
funcmain() {
referer_url:="http://www.google.com/search?q=gateway+oracle+cards+denise+linn&hl=en&client=safari"r:=refererparser.Parse(referer_url)
log.Printf("Known:%v", r.Known)
log.Printf("Referer:%v", r.Referer)
log.Printf("Medium:%v", r.Medium)
log.Printf("Search parameter:%v", r.SearchParameter)
log.Printf("Search term:%v", r.SearchTerm)
log.Printf("Host:%v", r.URI)
}

For more information, please see the Go [README] go-readme

referers.yml

referer-parser identifies whether a URL is a known referer or not by checking it against the [referers.yml] referers-yml file; the intention is that this YAML file is reusable as-is by every language-specific implementation of referer-parser.

The file is broken out into sections for the different mediums that we support:

  • unknown for when we know the source, but not the medium
  • email for webmail providers
  • social for social media services
  • search for search engines

Then within each section, we list each known provider (aka source) by name, and then which domains each provider uses. For search engines, we also list the parameters used in the search engine URL to identify the search term. For example:

Google: # Name of search engine refererparameters:
- 'q'# First parameter used by Google
- 'p'# Alternative parameter used by Googledomains:
- google.co.uk # One domain used by Google
- google.com # Another domain used by Google
- ...

The number of referers and the domains they use is constantly growing - we need to keep referers.yml up-to-date, and hope that the community will help!

Contributing

We welcome contributions to referer-parser:

  1. New search engines and other referers - if you notice a search engine, social network or other site missing from referers.yml, please fork the repo, add the missing entry and submit a pull request
  2. Ports of referer-parser to other languages - we welcome ports of referer-parser to new programming languages (e.g. Lua, Go, Haskell, C)
  3. Bug fixes, feature requests etc - much appreciated!

Please sign the [Snowplow CLA] cla before making pull requests.

Support

General support for referer-parser is handled by the team at Snowplow Analytics Ltd.

You can contact the Snowplow Analytics team through any of the [channels listed on their wiki] talk-to-us.

Copyright and license

referers.yml is based on [Piwik's] piwik [SearchEngines.php] piwik-search-engines and [Socials.php] piwik-socials, copyright 2012 Matthieu Aubry and available under the [GNU General Public License v3] gpl-license.

The Ruby implementation is copyright 2014 Inside Systems, Inc and is available under the [Apache License, Version 2.0] apache-license.

The Java/Scala port is copyright 2012-2014 [Snowplow Analytics Ltd] snowplow-analytics and is available under the [Apache License, Version 2.0] apache-license.

The Python port is copyright 2012-2014 [Don Spaulding] donspaulding and is available under the [Apache License, Version 2.0] apache-license.

The node.js (JavaScript) port is copyright 2013-2014 [Martin Katrenik] mkatrenik and is available under the [Apache License, Version 2.0] apache-license.

The .NET (C#) port is copyright 2013-2014 [iPerform Software] iperform and is available under the [Apache License, Version 2.0] apache-license.

The PHP port is copyright 2013-2014 [Lars Strojny] lstrojny and is available under the [MIT License] mit-license.

The Go port is copyright 2014 [Thomas Sileo] tsileo and is available under the [MIT License] mit-license.

About

Library for extracting marketing attribution data from referrer URLs

Resources

Stars

0 stars

Watchers

8 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

referer-parser

Java/Scala: Build Status

referer-parser is a database for extracting marketing attribution data (such as search terms) from referer URLs, inspired by the ua-parserua-parser project (an equivalent library for user agent parsing).

The referer-parser project also contains multiple libraries for working with the referer-parser database in different languages.

referer-parser is a core component of Snowplowsnowplow, the open-source web-scale analytics platform powered by Hadoop and Redshift.

Note that we always use the original HTTP misspelling of 'referer' (and thus 'referal') in this project - never 'referrer'.

Database

The latest database is always available on this URL:

https://s3-eu-west-1.amazonaws.com/snowplow-hosted-assets/third-party/referer-parser/referers-latest.yml

The database is updated at most once a month. Each new version of the database is also uploaded with a timestamp:

https://s3-eu-west-1.amazonaws.com/snowplow-hosted-assets/third-party/referer-parser/referers-YYYY-MM.yml

If there is an issue with the database necessitating a re-release within the month, the corresponding files will be overwritten.

Maintainers

Usage: Java

The Java version of this library uses the updated API, and identifies search, social, webmail, internal and unknown referers:

importcom.snowplowanalytics.refererparser.Parser;
...
StringrefererUrl = "http://www.google.com/search?q=gateway+oracle+cards+denise+linn&hl=en&client=safari";
StringpageUrl = "http:/www.psychicbazaar.com/shop"; // Our current URLParserrefererParser = newParser();
Refererr = refererParser.parse(refererUrl, pageUrl);
System.out.println(r.medium); // => "search"System.out.println(r.source); // => "Google"System.out.println(r.term); // => "gateway oracle cards denise linn"

For more information, please see the Java/Scala [README] java-scala-readme.

Usage: Scala

The Scala version of this library uses the updated API, and identifies search, social, webmail, internal and unknown referers:

valrefererUrl="http://www.google.com/search?q=gateway+oracle+cards+denise+linn&hl=en&client=safari"valpageUrl="http:/www.psychicbazaar.com/shop"// Our current URLimportcom.snowplowanalytics.refererparser.scala.Parserfor (r <-Parser.parse(refererUrl, pageUrl)) {
println(r.medium) // => "search"for (s <- r.source) {
println(s) // => "Google"
}
for (t <- r.term) {
println(t) // => "gateway oracle cards denise linn"
}
}

You can also provide a list of domains which should be considered internal:

valrefererUrl="http://www.subdomain1.snowplowanalytics.com"valpageUrl="http://www.snowplowanalytics.com"valinternalDomains=List(
"www.subdomain1.snowplowanalytics.com", "www.subdomain2.snowplowanalytics.com"
)
importcom.snowplowanalytics.refererparser.scala.Parserfor (r <-Parser.parse(refererUrl, pageUrl, internalDomains)) {
println(r.medium) // => "internal"for (s <- r.source) {
println(s) // => null
}
for (t <- r.term) {
println(t) // => null
}
}

For more information, please see the Java/Scala [README] java-scala-readme.

Usage: Ruby

The Ruby version of this library uses the updated API:

require'referer-parser'parser=RefererParser::Parser.newparser.parse('http://www.google.com/search?q=gateway+oracle+cards+denise+linn&hl=en&client=safari')# => {:known=>true,
:uri=>"http://www.google.com/search?q=gateway+oracle+cards+denise+linn&hl=en&client=safari",
:source=>"Google",
:medium=>"search",
:term=>"gateway oracle cards denise linn"}

For more information, please see the Ruby [README] ruby-readme.

Usage: Python

Create a new instance of a Referer object by passing in the url you want to parse:

fromreferer_parserimportRefererreferer_url='http://www.google.com/search?q=gateway+oracle+cards+denise+linn&hl=en&client=safari'r=Referer(referer_url)

The r variable now holds a Referer instance. The important attributes are:

print(r.known) # Trueprint(r.referer) # 'Google'print(r.medium) # 'search'print(r.search_parameter) # 'q' print(r.search_term) # 'gateway oracle cards denise linn'print(r.uri) # ParseResult(scheme='http', netloc='www.google.com', path='/search', params='', query='q=gateway+oracle+cards+denise+linn&hl=en&client=safari', fragment='')

Optionally, pass in the current URL as well, to handle internal referers

fromreferer_parserimportRefererreferer_url='http://www.snowplowanalytics.com/about/team'curr_url='http://www.snowplowanalytics.com/account/profile'r=Referer(referer_url, curr_url)

For more information, please see the Python [README] python-readme.

Usage: node.js

The node.js (JavaScript) version of this library uses a hybrid of the new and old API, and identifies search, social, webmail, internal and unknown referers:

Create a new instance of a Referer object by passing in the url you want to parse:

varReferer=require('referer-parser')referer_url='http://www.google.com/search?q=gateway+oracle+cards+denise+linn&hl=en&client=safari'varr=newReferer(referer_url)

The r variable now holds a Referer instance.

Optionally, pass in the current URL as well, to handle internal referers

varReferer=require('referer-parser')varreferer_url='http://www.snowplowanalytics.com/about/team'varcurrent_url='http://www.snowplowanalytics.com/account/profile'varr=Referer(referer_url,current_url)

For more information, please see the node.js [README] nodejs-readme.

Usage: .NET

The .NET (C#) version of this library uses the updated API, and identifies search, social, webmail, internal and unknown referers:

usingRefererParser;
...
string refererUrl="http://www.google.com/search?q=gateway+oracle+cards+denise+linn&hl=en&client=safari";stringpageUrl="http:/www.psychicbazaar.com/shop";// Our current URLvarreferer=Parser.Parse(newUri(refererUrl),pageUrl);Console.WriteLine(r.Medium);// => "Search"Console.WriteLine(r.Source);// => "Google"Console.WriteLine(r.Term);// => "gateway oracle cards denise linn"

For more information, please see the .NET [README] dotnet-readme.

Usage: PHP

The PHP version of this library uses the updated API, and identifies search, social, webmail, internal and unknown referers:

useSnowplow\RefererParser\Parser;
$parser = newParser();
$referer = $parser->parse(
'http://www.google.com/search?q=gateway+oracle+cards+denise+linn&hl=en&client=safari',
'http:/www.psychicbazaar.com/shop'
);
if ($referer->isKnown()) {
echo$referer->getMedium(); // "Search"echo$referer->getSource(); // "Google"echo$referer->getTerm(); // "gateway oracle cards denise linn"
}

For more information, please see the PHP [README] php-readme.

Usage: Go

The Go version of this library uses the updated API:

package main
import (
"log""github.com/snowplow/referer-parser/go"
)
funcmain() {
referer_url:="http://www.google.com/search?q=gateway+oracle+cards+denise+linn&hl=en&client=safari"r:=refererparser.Parse(referer_url)
log.Printf("Known:%v", r.Known)
log.Printf("Referer:%v", r.Referer)
log.Printf("Medium:%v", r.Medium)
log.Printf("Search parameter:%v", r.SearchParameter)
log.Printf("Search term:%v", r.SearchTerm)
log.Printf("Host:%v", r.URI)
}

For more information, please see the Go [README] go-readme

referers.yml

referer-parser identifies whether a URL is a known referer or not by checking it against the [referers.yml] referers-yml file; the intention is that this YAML file is reusable as-is by every language-specific implementation of referer-parser.

The file is broken out into sections for the different mediums that we support:

  • unknown for when we know the source, but not the medium
  • email for webmail providers
  • social for social media services
  • search for search engines

Then within each section, we list each known provider (aka source) by name, and then which domains each provider uses. For search engines, we also list the parameters used in the search engine URL to identify the search term. For example:

Google: # Name of search engine refererparameters:
- 'q'# First parameter used by Google
- 'p'# Alternative parameter used by Googledomains:
- google.co.uk # One domain used by Google
- google.com # Another domain used by Google
- ...

The number of referers and the domains they use is constantly growing - we need to keep referers.yml up-to-date, and hope that the community will help!

Contributing

We welcome contributions to referer-parser:

  1. New search engines and other referers - if you notice a search engine, social network or other site missing from referers.yml, please fork the repo, add the missing entry and submit a pull request
  2. Ports of referer-parser to other languages - we welcome ports of referer-parser to new programming languages (e.g. Lua, Go, Haskell, C)
  3. Bug fixes, feature requests etc - much appreciated!

Please sign the [Snowplow CLA] cla before making pull requests.

Support

General support for referer-parser is handled by the team at Snowplow Analytics Ltd.

You can contact the Snowplow Analytics team through any of the [channels listed on their wiki] talk-to-us.

Copyright and license

referers.yml is based on [Piwik's] piwik [SearchEngines.php] piwik-search-engines and [Socials.php] piwik-socials, copyright 2012 Matthieu Aubry and available under the [GNU General Public License v3] gpl-license.

The Ruby implementation is copyright 2014 Inside Systems, Inc and is available under the [Apache License, Version 2.0] apache-license.

The Java/Scala port is copyright 2012-2014 [Snowplow Analytics Ltd] snowplow-analytics and is available under the [Apache License, Version 2.0] apache-license.

The Python port is copyright 2012-2014 [Don Spaulding] donspaulding and is available under the [Apache License, Version 2.0] apache-license.

The node.js (JavaScript) port is copyright 2013-2014 [Martin Katrenik] mkatrenik and is available under the [Apache License, Version 2.0] apache-license.

The .NET (C#) port is copyright 2013-2014 [iPerform Software] iperform and is available under the [Apache License, Version 2.0] apache-license.

The PHP port is copyright 2013-2014 [Lars Strojny] lstrojny and is available under the [MIT License] mit-license.

The Go port is copyright 2014 [Thomas Sileo] tsileo and is available under the [MIT License] mit-license.

About

Library for extracting marketing attribution data from referrer URLs

Resources

Stars

0 stars

Watchers

8 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

referer-parser

Java/Scala: Build Status

referer-parser is a database for extracting marketing attribution data (such as search terms) from referer URLs, inspired by the ua-parserua-parser project (an equivalent library for user agent parsing).

The referer-parser project also contains multiple libraries for working with the referer-parser database in different languages.

referer-parser is a core component of Snowplowsnowplow, the open-source web-scale analytics platform powered by Hadoop and Redshift.

Note that we always use the original HTTP misspelling of 'referer' (and thus 'referal') in this project - never 'referrer'.

Database

The latest database is always available on this URL:

https://s3-eu-west-1.amazonaws.com/snowplow-hosted-assets/third-party/referer-parser/referers-latest.yml

The database is updated at most once a month. Each new version of the database is also uploaded with a timestamp:

https://s3-eu-west-1.amazonaws.com/snowplow-hosted-assets/third-party/referer-parser/referers-YYYY-MM.yml

If there is an issue with the database necessitating a re-release within the month, the corresponding files will be overwritten.

Maintainers

Usage: Java

The Java version of this library uses the updated API, and identifies search, social, webmail, internal and unknown referers:

importcom.snowplowanalytics.refererparser.Parser;
...
StringrefererUrl = "http://www.google.com/search?q=gateway+oracle+cards+denise+linn&hl=en&client=safari";
StringpageUrl = "http:/www.psychicbazaar.com/shop"; // Our current URLParserrefererParser = newParser();
Refererr = refererParser.parse(refererUrl, pageUrl);
System.out.println(r.medium); // => "search"System.out.println(r.source); // => "Google"System.out.println(r.term); // => "gateway oracle cards denise linn"

For more information, please see the Java/Scala [README] java-scala-readme.

Usage: Scala

The Scala version of this library uses the updated API, and identifies search, social, webmail, internal and unknown referers:

valrefererUrl="http://www.google.com/search?q=gateway+oracle+cards+denise+linn&hl=en&client=safari"valpageUrl="http:/www.psychicbazaar.com/shop"// Our current URLimportcom.snowplowanalytics.refererparser.scala.Parserfor (r <-Parser.parse(refererUrl, pageUrl)) {
println(r.medium) // => "search"for (s <- r.source) {
println(s) // => "Google"
}
for (t <- r.term) {
println(t) // => "gateway oracle cards denise linn"
}
}

You can also provide a list of domains which should be considered internal:

valrefererUrl="http://www.subdomain1.snowplowanalytics.com"valpageUrl="http://www.snowplowanalytics.com"valinternalDomains=List(
"www.subdomain1.snowplowanalytics.com", "www.subdomain2.snowplowanalytics.com"
)
importcom.snowplowanalytics.refererparser.scala.Parserfor (r <-Parser.parse(refererUrl, pageUrl, internalDomains)) {
println(r.medium) // => "internal"for (s <- r.source) {
println(s) // => null
}
for (t <- r.term) {
println(t) // => null
}
}

For more information, please see the Java/Scala [README] java-scala-readme.

Usage: Ruby

The Ruby version of this library uses the updated API:

require'referer-parser'parser=RefererParser::Parser.newparser.parse('http://www.google.com/search?q=gateway+oracle+cards+denise+linn&hl=en&client=safari')# => {:known=>true,
:uri=>"http://www.google.com/search?q=gateway+oracle+cards+denise+linn&hl=en&client=safari",
:source=>"Google",
:medium=>"search",
:term=>"gateway oracle cards denise linn"}

For more information, please see the Ruby [README] ruby-readme.

Usage: Python

Create a new instance of a Referer object by passing in the url you want to parse:

fromreferer_parserimportRefererreferer_url='http://www.google.com/search?q=gateway+oracle+cards+denise+linn&hl=en&client=safari'r=Referer(referer_url)

The r variable now holds a Referer instance. The important attributes are:

print(r.known) # Trueprint(r.referer) # 'Google'print(r.medium) # 'search'print(r.search_parameter) # 'q' print(r.search_term) # 'gateway oracle cards denise linn'print(r.uri) # ParseResult(scheme='http', netloc='www.google.com', path='/search', params='', query='q=gateway+oracle+cards+denise+linn&hl=en&client=safari', fragment='')

Optionally, pass in the current URL as well, to handle internal referers

fromreferer_parserimportRefererreferer_url='http://www.snowplowanalytics.com/about/team'curr_url='http://www.snowplowanalytics.com/account/profile'r=Referer(referer_url, curr_url)

For more information, please see the Python [README] python-readme.

Usage: node.js

The node.js (JavaScript) version of this library uses a hybrid of the new and old API, and identifies search, social, webmail, internal and unknown referers:

Create a new instance of a Referer object by passing in the url you want to parse:

varReferer=require('referer-parser')referer_url='http://www.google.com/search?q=gateway+oracle+cards+denise+linn&hl=en&client=safari'varr=newReferer(referer_url)

The r variable now holds a Referer instance.

Optionally, pass in the current URL as well, to handle internal referers

varReferer=require('referer-parser')varreferer_url='http://www.snowplowanalytics.com/about/team'varcurrent_url='http://www.snowplowanalytics.com/account/profile'varr=Referer(referer_url,current_url)

For more information, please see the node.js [README] nodejs-readme.

Usage: .NET

The .NET (C#) version of this library uses the updated API, and identifies search, social, webmail, internal and unknown referers:

usingRefererParser;
...
string refererUrl="http://www.google.com/search?q=gateway+oracle+cards+denise+linn&hl=en&client=safari";stringpageUrl="http:/www.psychicbazaar.com/shop";// Our current URLvarreferer=Parser.Parse(newUri(refererUrl),pageUrl);Console.WriteLine(r.Medium);// => "Search"Console.WriteLine(r.Source);// => "Google"Console.WriteLine(r.Term);// => "gateway oracle cards denise linn"

For more information, please see the .NET [README] dotnet-readme.

Usage: PHP

The PHP version of this library uses the updated API, and identifies search, social, webmail, internal and unknown referers:

useSnowplow\RefererParser\Parser;
$parser = newParser();
$referer = $parser->parse(
'http://www.google.com/search?q=gateway+oracle+cards+denise+linn&hl=en&client=safari',
'http:/www.psychicbazaar.com/shop'
);
if ($referer->isKnown()) {
echo$referer->getMedium(); // "Search"echo$referer->getSource(); // "Google"echo$referer->getTerm(); // "gateway oracle cards denise linn"
}

For more information, please see the PHP [README] php-readme.

Usage: Go

The Go version of this library uses the updated API:

package main
import (
"log""github.com/snowplow/referer-parser/go"
)
funcmain() {
referer_url:="http://www.google.com/search?q=gateway+oracle+cards+denise+linn&hl=en&client=safari"r:=refererparser.Parse(referer_url)
log.Printf("Known:%v", r.Known)
log.Printf("Referer:%v", r.Referer)
log.Printf("Medium:%v", r.Medium)
log.Printf("Search parameter:%v", r.SearchParameter)
log.Printf("Search term:%v", r.SearchTerm)
log.Printf("Host:%v", r.URI)
}

For more information, please see the Go [README] go-readme

referers.yml

referer-parser identifies whether a URL is a known referer or not by checking it against the [referers.yml] referers-yml file; the intention is that this YAML file is reusable as-is by every language-specific implementation of referer-parser.

The file is broken out into sections for the different mediums that we support:

  • unknown for when we know the source, but not the medium
  • email for webmail providers
  • social for social media services
  • search for search engines

Then within each section, we list each known provider (aka source) by name, and then which domains each provider uses. For search engines, we also list the parameters used in the search engine URL to identify the search term. For example:

Google: # Name of search engine refererparameters:
- 'q'# First parameter used by Google
- 'p'# Alternative parameter used by Googledomains:
- google.co.uk # One domain used by Google
- google.com # Another domain used by Google
- ...

The number of referers and the domains they use is constantly growing - we need to keep referers.yml up-to-date, and hope that the community will help!

Contributing

We welcome contributions to referer-parser:

  1. New search engines and other referers - if you notice a search engine, social network or other site missing from referers.yml, please fork the repo, add the missing entry and submit a pull request
  2. Ports of referer-parser to other languages - we welcome ports of referer-parser to new programming languages (e.g. Lua, Go, Haskell, C)
  3. Bug fixes, feature requests etc - much appreciated!

Please sign the [Snowplow CLA] cla before making pull requests.

Support

General support for referer-parser is handled by the team at Snowplow Analytics Ltd.

You can contact the Snowplow Analytics team through any of the [channels listed on their wiki] talk-to-us.

Copyright and license

referers.yml is based on [Piwik's] piwik [SearchEngines.php] piwik-search-engines and [Socials.php] piwik-socials, copyright 2012 Matthieu Aubry and available under the [GNU General Public License v3] gpl-license.

The Ruby implementation is copyright 2014 Inside Systems, Inc and is available under the [Apache License, Version 2.0] apache-license.

The Java/Scala port is copyright 2012-2014 [Snowplow Analytics Ltd] snowplow-analytics and is available under the [Apache License, Version 2.0] apache-license.

The Python port is copyright 2012-2014 [Don Spaulding] donspaulding and is available under the [Apache License, Version 2.0] apache-license.

The node.js (JavaScript) port is copyright 2013-2014 [Martin Katrenik] mkatrenik and is available under the [Apache License, Version 2.0] apache-license.

The .NET (C#) port is copyright 2013-2014 [iPerform Software] iperform and is available under the [Apache License, Version 2.0] apache-license.

The PHP port is copyright 2013-2014 [Lars Strojny] lstrojny and is available under the [MIT License] mit-license.

The Go port is copyright 2014 [Thomas Sileo] tsileo and is available under the [MIT License] mit-license.

About

Library for extracting marketing attribution data from referrer URLs

Resources

Stars

0 stars

Watchers

8 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

referer-parser

Java/Scala: Build Status

referer-parser is a database for extracting marketing attribution data (such as search terms) from referer URLs, inspired by the ua-parserua-parser project (an equivalent library for user agent parsing).

The referer-parser project also contains multiple libraries for working with the referer-parser database in different languages.

referer-parser is a core component of Snowplowsnowplow, the open-source web-scale analytics platform powered by Hadoop and Redshift.

Note that we always use the original HTTP misspelling of 'referer' (and thus 'referal') in this project - never 'referrer'.

Database

The latest database is always available on this URL:

https://s3-eu-west-1.amazonaws.com/snowplow-hosted-assets/third-party/referer-parser/referers-latest.yml

The database is updated at most once a month. Each new version of the database is also uploaded with a timestamp:

https://s3-eu-west-1.amazonaws.com/snowplow-hosted-assets/third-party/referer-parser/referers-YYYY-MM.yml

If there is an issue with the database necessitating a re-release within the month, the corresponding files will be overwritten.

Maintainers

Usage: Java

The Java version of this library uses the updated API, and identifies search, social, webmail, internal and unknown referers:

importcom.snowplowanalytics.refererparser.Parser;
...
StringrefererUrl = "http://www.google.com/search?q=gateway+oracle+cards+denise+linn&hl=en&client=safari";
StringpageUrl = "http:/www.psychicbazaar.com/shop"; // Our current URLParserrefererParser = newParser();
Refererr = refererParser.parse(refererUrl, pageUrl);
System.out.println(r.medium); // => "search"System.out.println(r.source); // => "Google"System.out.println(r.term); // => "gateway oracle cards denise linn"

For more information, please see the Java/Scala [README] java-scala-readme.

Usage: Scala

The Scala version of this library uses the updated API, and identifies search, social, webmail, internal and unknown referers:

valrefererUrl="http://www.google.com/search?q=gateway+oracle+cards+denise+linn&hl=en&client=safari"valpageUrl="http:/www.psychicbazaar.com/shop"// Our current URLimportcom.snowplowanalytics.refererparser.scala.Parserfor (r <-Parser.parse(refererUrl, pageUrl)) {
println(r.medium) // => "search"for (s <- r.source) {
println(s) // => "Google"
}
for (t <- r.term) {
println(t) // => "gateway oracle cards denise linn"
}
}

You can also provide a list of domains which should be considered internal:

valrefererUrl="http://www.subdomain1.snowplowanalytics.com"valpageUrl="http://www.snowplowanalytics.com"valinternalDomains=List(
"www.subdomain1.snowplowanalytics.com", "www.subdomain2.snowplowanalytics.com"
)
importcom.snowplowanalytics.refererparser.scala.Parserfor (r <-Parser.parse(refererUrl, pageUrl, internalDomains)) {
println(r.medium) // => "internal"for (s <- r.source) {
println(s) // => null
}
for (t <- r.term) {
println(t) // => null
}
}

For more information, please see the Java/Scala [README] java-scala-readme.

Usage: Ruby

The Ruby version of this library uses the updated API:

require'referer-parser'parser=RefererParser::Parser.newparser.parse('http://www.google.com/search?q=gateway+oracle+cards+denise+linn&hl=en&client=safari')# => {:known=>true,
:uri=>"http://www.google.com/search?q=gateway+oracle+cards+denise+linn&hl=en&client=safari",
:source=>"Google",
:medium=>"search",
:term=>"gateway oracle cards denise linn"}

For more information, please see the Ruby [README] ruby-readme.

Usage: Python

Create a new instance of a Referer object by passing in the url you want to parse:

fromreferer_parserimportRefererreferer_url='http://www.google.com/search?q=gateway+oracle+cards+denise+linn&hl=en&client=safari'r=Referer(referer_url)

The r variable now holds a Referer instance. The important attributes are:

print(r.known) # Trueprint(r.referer) # 'Google'print(r.medium) # 'search'print(r.search_parameter) # 'q' print(r.search_term) # 'gateway oracle cards denise linn'print(r.uri) # ParseResult(scheme='http', netloc='www.google.com', path='/search', params='', query='q=gateway+oracle+cards+denise+linn&hl=en&client=safari', fragment='')

Optionally, pass in the current URL as well, to handle internal referers

fromreferer_parserimportRefererreferer_url='http://www.snowplowanalytics.com/about/team'curr_url='http://www.snowplowanalytics.com/account/profile'r=Referer(referer_url, curr_url)

For more information, please see the Python [README] python-readme.

Usage: node.js

The node.js (JavaScript) version of this library uses a hybrid of the new and old API, and identifies search, social, webmail, internal and unknown referers:

Create a new instance of a Referer object by passing in the url you want to parse:

varReferer=require('referer-parser')referer_url='http://www.google.com/search?q=gateway+oracle+cards+denise+linn&hl=en&client=safari'varr=newReferer(referer_url)

The r variable now holds a Referer instance.

Optionally, pass in the current URL as well, to handle internal referers

varReferer=require('referer-parser')varreferer_url='http://www.snowplowanalytics.com/about/team'varcurrent_url='http://www.snowplowanalytics.com/account/profile'varr=Referer(referer_url,current_url)

For more information, please see the node.js [README] nodejs-readme.

Usage: .NET

The .NET (C#) version of this library uses the updated API, and identifies search, social, webmail, internal and unknown referers:

usingRefererParser;
...
string refererUrl="http://www.google.com/search?q=gateway+oracle+cards+denise+linn&hl=en&client=safari";stringpageUrl="http:/www.psychicbazaar.com/shop";// Our current URLvarreferer=Parser.Parse(newUri(refererUrl),pageUrl);Console.WriteLine(r.Medium);// => "Search"Console.WriteLine(r.Source);// => "Google"Console.WriteLine(r.Term);// => "gateway oracle cards denise linn"

For more information, please see the .NET [README] dotnet-readme.

Usage: PHP

The PHP version of this library uses the updated API, and identifies search, social, webmail, internal and unknown referers:

useSnowplow\RefererParser\Parser;
$parser = newParser();
$referer = $parser->parse(
'http://www.google.com/search?q=gateway+oracle+cards+denise+linn&hl=en&client=safari',
'http:/www.psychicbazaar.com/shop'
);
if ($referer->isKnown()) {
echo$referer->getMedium(); // "Search"echo$referer->getSource(); // "Google"echo$referer->getTerm(); // "gateway oracle cards denise linn"
}

For more information, please see the PHP [README] php-readme.

Usage: Go

The Go version of this library uses the updated API:

package main
import (
"log""github.com/snowplow/referer-parser/go"
)
funcmain() {
referer_url:="http://www.google.com/search?q=gateway+oracle+cards+denise+linn&hl=en&client=safari"r:=refererparser.Parse(referer_url)
log.Printf("Known:%v", r.Known)
log.Printf("Referer:%v", r.Referer)
log.Printf("Medium:%v", r.Medium)
log.Printf("Search parameter:%v", r.SearchParameter)
log.Printf("Search term:%v", r.SearchTerm)
log.Printf("Host:%v", r.URI)
}

For more information, please see the Go [README] go-readme

referers.yml

referer-parser identifies whether a URL is a known referer or not by checking it against the [referers.yml] referers-yml file; the intention is that this YAML file is reusable as-is by every language-specific implementation of referer-parser.

The file is broken out into sections for the different mediums that we support:

  • unknown for when we know the source, but not the medium
  • email for webmail providers
  • social for social media services
  • search for search engines

Then within each section, we list each known provider (aka source) by name, and then which domains each provider uses. For search engines, we also list the parameters used in the search engine URL to identify the search term. For example:

Google: # Name of search engine refererparameters:
- 'q'# First parameter used by Google
- 'p'# Alternative parameter used by Googledomains:
- google.co.uk # One domain used by Google
- google.com # Another domain used by Google
- ...

The number of referers and the domains they use is constantly growing - we need to keep referers.yml up-to-date, and hope that the community will help!

Contributing

We welcome contributions to referer-parser:

  1. New search engines and other referers - if you notice a search engine, social network or other site missing from referers.yml, please fork the repo, add the missing entry and submit a pull request
  2. Ports of referer-parser to other languages - we welcome ports of referer-parser to new programming languages (e.g. Lua, Go, Haskell, C)
  3. Bug fixes, feature requests etc - much appreciated!

Please sign the [Snowplow CLA] cla before making pull requests.

Support

General support for referer-parser is handled by the team at Snowplow Analytics Ltd.

You can contact the Snowplow Analytics team through any of the [channels listed on their wiki] talk-to-us.

Copyright and license

referers.yml is based on [Piwik's] piwik [SearchEngines.php] piwik-search-engines and [Socials.php] piwik-socials, copyright 2012 Matthieu Aubry and available under the [GNU General Public License v3] gpl-license.

The Ruby implementation is copyright 2014 Inside Systems, Inc and is available under the [Apache License, Version 2.0] apache-license.

The Java/Scala port is copyright 2012-2014 [Snowplow Analytics Ltd] snowplow-analytics and is available under the [Apache License, Version 2.0] apache-license.

The Python port is copyright 2012-2014 [Don Spaulding] donspaulding and is available under the [Apache License, Version 2.0] apache-license.

The node.js (JavaScript) port is copyright 2013-2014 [Martin Katrenik] mkatrenik and is available under the [Apache License, Version 2.0] apache-license.

The .NET (C#) port is copyright 2013-2014 [iPerform Software] iperform and is available under the [Apache License, Version 2.0] apache-license.

The PHP port is copyright 2013-2014 [Lars Strojny] lstrojny and is available under the [MIT License] mit-license.

The Go port is copyright 2014 [Thomas Sileo] tsileo and is available under the [MIT License] mit-license.

About

Library for extracting marketing attribution data from referrer URLs

Resources

Stars

0 stars

Watchers

8 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

referer-parser

Java/Scala: Build Status

referer-parser is a database for extracting marketing attribution data (such as search terms) from referer URLs, inspired by the ua-parserua-parser project (an equivalent library for user agent parsing).

The referer-parser project also contains multiple libraries for working with the referer-parser database in different languages.

referer-parser is a core component of Snowplowsnowplow, the open-source web-scale analytics platform powered by Hadoop and Redshift.

Note that we always use the original HTTP misspelling of 'referer' (and thus 'referal') in this project - never 'referrer'.

Database

The latest database is always available on this URL:

https://s3-eu-west-1.amazonaws.com/snowplow-hosted-assets/third-party/referer-parser/referers-latest.yml

The database is updated at most once a month. Each new version of the database is also uploaded with a timestamp:

https://s3-eu-west-1.amazonaws.com/snowplow-hosted-assets/third-party/referer-parser/referers-YYYY-MM.yml

If there is an issue with the database necessitating a re-release within the month, the corresponding files will be overwritten.

Maintainers

Usage: Java

The Java version of this library uses the updated API, and identifies search, social, webmail, internal and unknown referers:

importcom.snowplowanalytics.refererparser.Parser;
...
StringrefererUrl = "http://www.google.com/search?q=gateway+oracle+cards+denise+linn&hl=en&client=safari";
StringpageUrl = "http:/www.psychicbazaar.com/shop"; // Our current URLParserrefererParser = newParser();
Refererr = refererParser.parse(refererUrl, pageUrl);
System.out.println(r.medium); // => "search"System.out.println(r.source); // => "Google"System.out.println(r.term); // => "gateway oracle cards denise linn"

For more information, please see the Java/Scala [README] java-scala-readme.

Usage: Scala

The Scala version of this library uses the updated API, and identifies search, social, webmail, internal and unknown referers:

valrefererUrl="http://www.google.com/search?q=gateway+oracle+cards+denise+linn&hl=en&client=safari"valpageUrl="http:/www.psychicbazaar.com/shop"// Our current URLimportcom.snowplowanalytics.refererparser.scala.Parserfor (r <-Parser.parse(refererUrl, pageUrl)) {
println(r.medium) // => "search"for (s <- r.source) {
println(s) // => "Google"
}
for (t <- r.term) {
println(t) // => "gateway oracle cards denise linn"
}
}

You can also provide a list of domains which should be considered internal:

valrefererUrl="http://www.subdomain1.snowplowanalytics.com"valpageUrl="http://www.snowplowanalytics.com"valinternalDomains=List(
"www.subdomain1.snowplowanalytics.com", "www.subdomain2.snowplowanalytics.com"
)
importcom.snowplowanalytics.refererparser.scala.Parserfor (r <-Parser.parse(refererUrl, pageUrl, internalDomains)) {
println(r.medium) // => "internal"for (s <- r.source) {
println(s) // => null
}
for (t <- r.term) {
println(t) // => null
}
}

For more information, please see the Java/Scala [README] java-scala-readme.

Usage: Ruby

The Ruby version of this library uses the updated API:

require'referer-parser'parser=RefererParser::Parser.newparser.parse('http://www.google.com/search?q=gateway+oracle+cards+denise+linn&hl=en&client=safari')# => {:known=>true,
:uri=>"http://www.google.com/search?q=gateway+oracle+cards+denise+linn&hl=en&client=safari",
:source=>"Google",
:medium=>"search",
:term=>"gateway oracle cards denise linn"}

For more information, please see the Ruby [README] ruby-readme.

Usage: Python

Create a new instance of a Referer object by passing in the url you want to parse:

fromreferer_parserimportRefererreferer_url='http://www.google.com/search?q=gateway+oracle+cards+denise+linn&hl=en&client=safari'r=Referer(referer_url)

The r variable now holds a Referer instance. The important attributes are:

print(r.known) # Trueprint(r.referer) # 'Google'print(r.medium) # 'search'print(r.search_parameter) # 'q' print(r.search_term) # 'gateway oracle cards denise linn'print(r.uri) # ParseResult(scheme='http', netloc='www.google.com', path='/search', params='', query='q=gateway+oracle+cards+denise+linn&hl=en&client=safari', fragment='')

Optionally, pass in the current URL as well, to handle internal referers

fromreferer_parserimportRefererreferer_url='http://www.snowplowanalytics.com/about/team'curr_url='http://www.snowplowanalytics.com/account/profile'r=Referer(referer_url, curr_url)

For more information, please see the Python [README] python-readme.

Usage: node.js

The node.js (JavaScript) version of this library uses a hybrid of the new and old API, and identifies search, social, webmail, internal and unknown referers:

Create a new instance of a Referer object by passing in the url you want to parse:

varReferer=require('referer-parser')referer_url='http://www.google.com/search?q=gateway+oracle+cards+denise+linn&hl=en&client=safari'varr=newReferer(referer_url)

The r variable now holds a Referer instance.

Optionally, pass in the current URL as well, to handle internal referers

varReferer=require('referer-parser')varreferer_url='http://www.snowplowanalytics.com/about/team'varcurrent_url='http://www.snowplowanalytics.com/account/profile'varr=Referer(referer_url,current_url)

For more information, please see the node.js [README] nodejs-readme.

Usage: .NET

The .NET (C#) version of this library uses the updated API, and identifies search, social, webmail, internal and unknown referers:

usingRefererParser;
...
string refererUrl="http://www.google.com/search?q=gateway+oracle+cards+denise+linn&hl=en&client=safari";stringpageUrl="http:/www.psychicbazaar.com/shop";// Our current URLvarreferer=Parser.Parse(newUri(refererUrl),pageUrl);Console.WriteLine(r.Medium);// => "Search"Console.WriteLine(r.Source);// => "Google"Console.WriteLine(r.Term);// => "gateway oracle cards denise linn"

For more information, please see the .NET [README] dotnet-readme.

Usage: PHP

The PHP version of this library uses the updated API, and identifies search, social, webmail, internal and unknown referers:

useSnowplow\RefererParser\Parser;
$parser = newParser();
$referer = $parser->parse(
'http://www.google.com/search?q=gateway+oracle+cards+denise+linn&hl=en&client=safari',
'http:/www.psychicbazaar.com/shop'
);
if ($referer->isKnown()) {
echo$referer->getMedium(); // "Search"echo$referer->getSource(); // "Google"echo$referer->getTerm(); // "gateway oracle cards denise linn"
}

For more information, please see the PHP [README] php-readme.

Usage: Go

The Go version of this library uses the updated API:

package main
import (
"log""github.com/snowplow/referer-parser/go"
)
funcmain() {
referer_url:="http://www.google.com/search?q=gateway+oracle+cards+denise+linn&hl=en&client=safari"r:=refererparser.Parse(referer_url)
log.Printf("Known:%v", r.Known)
log.Printf("Referer:%v", r.Referer)
log.Printf("Medium:%v", r.Medium)
log.Printf("Search parameter:%v", r.SearchParameter)
log.Printf("Search term:%v", r.SearchTerm)
log.Printf("Host:%v", r.URI)
}

For more information, please see the Go [README] go-readme

referers.yml

referer-parser identifies whether a URL is a known referer or not by checking it against the [referers.yml] referers-yml file; the intention is that this YAML file is reusable as-is by every language-specific implementation of referer-parser.

The file is broken out into sections for the different mediums that we support:

  • unknown for when we know the source, but not the medium
  • email for webmail providers
  • social for social media services
  • search for search engines

Then within each section, we list each known provider (aka source) by name, and then which domains each provider uses. For search engines, we also list the parameters used in the search engine URL to identify the search term. For example:

Google: # Name of search engine refererparameters:
- 'q'# First parameter used by Google
- 'p'# Alternative parameter used by Googledomains:
- google.co.uk # One domain used by Google
- google.com # Another domain used by Google
- ...

The number of referers and the domains they use is constantly growing - we need to keep referers.yml up-to-date, and hope that the community will help!

Contributing

We welcome contributions to referer-parser:

  1. New search engines and other referers - if you notice a search engine, social network or other site missing from referers.yml, please fork the repo, add the missing entry and submit a pull request
  2. Ports of referer-parser to other languages - we welcome ports of referer-parser to new programming languages (e.g. Lua, Go, Haskell, C)
  3. Bug fixes, feature requests etc - much appreciated!

Please sign the [Snowplow CLA] cla before making pull requests.

Support

General support for referer-parser is handled by the team at Snowplow Analytics Ltd.

You can contact the Snowplow Analytics team through any of the [channels listed on their wiki] talk-to-us.

Copyright and license

referers.yml is based on [Piwik's] piwik [SearchEngines.php] piwik-search-engines and [Socials.php] piwik-socials, copyright 2012 Matthieu Aubry and available under the [GNU General Public License v3] gpl-license.

The Ruby implementation is copyright 2014 Inside Systems, Inc and is available under the [Apache License, Version 2.0] apache-license.

The Java/Scala port is copyright 2012-2014 [Snowplow Analytics Ltd] snowplow-analytics and is available under the [Apache License, Version 2.0] apache-license.

The Python port is copyright 2012-2014 [Don Spaulding] donspaulding and is available under the [Apache License, Version 2.0] apache-license.

The node.js (JavaScript) port is copyright 2013-2014 [Martin Katrenik] mkatrenik and is available under the [Apache License, Version 2.0] apache-license.

The .NET (C#) port is copyright 2013-2014 [iPerform Software] iperform and is available under the [Apache License, Version 2.0] apache-license.

The PHP port is copyright 2013-2014 [Lars Strojny] lstrojny and is available under the [MIT License] mit-license.

The Go port is copyright 2014 [Thomas Sileo] tsileo and is available under the [MIT License] mit-license.

About

Library for extracting marketing attribution data from referrer URLs

Resources

Stars

0 stars

Watchers

8 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

referer-parser

Java/Scala: Build Status

referer-parser is a database for extracting marketing attribution data (such as search terms) from referer URLs, inspired by the ua-parserua-parser project (an equivalent library for user agent parsing).

The referer-parser project also contains multiple libraries for working with the referer-parser database in different languages.

referer-parser is a core component of Snowplowsnowplow, the open-source web-scale analytics platform powered by Hadoop and Redshift.

Note that we always use the original HTTP misspelling of 'referer' (and thus 'referal') in this project - never 'referrer'.

Database

The latest database is always available on this URL:

https://s3-eu-west-1.amazonaws.com/snowplow-hosted-assets/third-party/referer-parser/referers-latest.yml

The database is updated at most once a month. Each new version of the database is also uploaded with a timestamp:

https://s3-eu-west-1.amazonaws.com/snowplow-hosted-assets/third-party/referer-parser/referers-YYYY-MM.yml

If there is an issue with the database necessitating a re-release within the month, the corresponding files will be overwritten.

Maintainers

Usage: Java

The Java version of this library uses the updated API, and identifies search, social, webmail, internal and unknown referers:

importcom.snowplowanalytics.refererparser.Parser;
...
StringrefererUrl = "http://www.google.com/search?q=gateway+oracle+cards+denise+linn&hl=en&client=safari";
StringpageUrl = "http:/www.psychicbazaar.com/shop"; // Our current URLParserrefererParser = newParser();
Refererr = refererParser.parse(refererUrl, pageUrl);
System.out.println(r.medium); // => "search"System.out.println(r.source); // => "Google"System.out.println(r.term); // => "gateway oracle cards denise linn"

For more information, please see the Java/Scala [README] java-scala-readme.

Usage: Scala

The Scala version of this library uses the updated API, and identifies search, social, webmail, internal and unknown referers:

valrefererUrl="http://www.google.com/search?q=gateway+oracle+cards+denise+linn&hl=en&client=safari"valpageUrl="http:/www.psychicbazaar.com/shop"// Our current URLimportcom.snowplowanalytics.refererparser.scala.Parserfor (r <-Parser.parse(refererUrl, pageUrl)) {
println(r.medium) // => "search"for (s <- r.source) {
println(s) // => "Google"
}
for (t <- r.term) {
println(t) // => "gateway oracle cards denise linn"
}
}

You can also provide a list of domains which should be considered internal:

valrefererUrl="http://www.subdomain1.snowplowanalytics.com"valpageUrl="http://www.snowplowanalytics.com"valinternalDomains=List(
"www.subdomain1.snowplowanalytics.com", "www.subdomain2.snowplowanalytics.com"
)
importcom.snowplowanalytics.refererparser.scala.Parserfor (r <-Parser.parse(refererUrl, pageUrl, internalDomains)) {
println(r.medium) // => "internal"for (s <- r.source) {
println(s) // => null
}
for (t <- r.term) {
println(t) // => null
}
}

For more information, please see the Java/Scala [README] java-scala-readme.

Usage: Ruby

The Ruby version of this library uses the updated API:

require'referer-parser'parser=RefererParser::Parser.newparser.parse('http://www.google.com/search?q=gateway+oracle+cards+denise+linn&hl=en&client=safari')# => {:known=>true,
:uri=>"http://www.google.com/search?q=gateway+oracle+cards+denise+linn&hl=en&client=safari",
:source=>"Google",
:medium=>"search",
:term=>"gateway oracle cards denise linn"}

For more information, please see the Ruby [README] ruby-readme.

Usage: Python

Create a new instance of a Referer object by passing in the url you want to parse:

fromreferer_parserimportRefererreferer_url='http://www.google.com/search?q=gateway+oracle+cards+denise+linn&hl=en&client=safari'r=Referer(referer_url)

The r variable now holds a Referer instance. The important attributes are:

print(r.known) # Trueprint(r.referer) # 'Google'print(r.medium) # 'search'print(r.search_parameter) # 'q' print(r.search_term) # 'gateway oracle cards denise linn'print(r.uri) # ParseResult(scheme='http', netloc='www.google.com', path='/search', params='', query='q=gateway+oracle+cards+denise+linn&hl=en&client=safari', fragment='')

Optionally, pass in the current URL as well, to handle internal referers

fromreferer_parserimportRefererreferer_url='http://www.snowplowanalytics.com/about/team'curr_url='http://www.snowplowanalytics.com/account/profile'r=Referer(referer_url, curr_url)

For more information, please see the Python [README] python-readme.

Usage: node.js

The node.js (JavaScript) version of this library uses a hybrid of the new and old API, and identifies search, social, webmail, internal and unknown referers:

Create a new instance of a Referer object by passing in the url you want to parse:

varReferer=require('referer-parser')referer_url='http://www.google.com/search?q=gateway+oracle+cards+denise+linn&hl=en&client=safari'varr=newReferer(referer_url)

The r variable now holds a Referer instance.

Optionally, pass in the current URL as well, to handle internal referers

varReferer=require('referer-parser')varreferer_url='http://www.snowplowanalytics.com/about/team'varcurrent_url='http://www.snowplowanalytics.com/account/profile'varr=Referer(referer_url,current_url)

For more information, please see the node.js [README] nodejs-readme.

Usage: .NET

The .NET (C#) version of this library uses the updated API, and identifies search, social, webmail, internal and unknown referers:

usingRefererParser;
...
string refererUrl="http://www.google.com/search?q=gateway+oracle+cards+denise+linn&hl=en&client=safari";stringpageUrl="http:/www.psychicbazaar.com/shop";// Our current URLvarreferer=Parser.Parse(newUri(refererUrl),pageUrl);Console.WriteLine(r.Medium);// => "Search"Console.WriteLine(r.Source);// => "Google"Console.WriteLine(r.Term);// => "gateway oracle cards denise linn"

For more information, please see the .NET [README] dotnet-readme.

Usage: PHP

The PHP version of this library uses the updated API, and identifies search, social, webmail, internal and unknown referers:

useSnowplow\RefererParser\Parser;
$parser = newParser();
$referer = $parser->parse(
'http://www.google.com/search?q=gateway+oracle+cards+denise+linn&hl=en&client=safari',
'http:/www.psychicbazaar.com/shop'
);
if ($referer->isKnown()) {
echo$referer->getMedium(); // "Search"echo$referer->getSource(); // "Google"echo$referer->getTerm(); // "gateway oracle cards denise linn"
}

For more information, please see the PHP [README] php-readme.

Usage: Go

The Go version of this library uses the updated API:

package main
import (
"log""github.com/snowplow/referer-parser/go"
)
funcmain() {
referer_url:="http://www.google.com/search?q=gateway+oracle+cards+denise+linn&hl=en&client=safari"r:=refererparser.Parse(referer_url)
log.Printf("Known:%v", r.Known)
log.Printf("Referer:%v", r.Referer)
log.Printf("Medium:%v", r.Medium)
log.Printf("Search parameter:%v", r.SearchParameter)
log.Printf("Search term:%v", r.SearchTerm)
log.Printf("Host:%v", r.URI)
}

For more information, please see the Go [README] go-readme

referers.yml

referer-parser identifies whether a URL is a known referer or not by checking it against the [referers.yml] referers-yml file; the intention is that this YAML file is reusable as-is by every language-specific implementation of referer-parser.

The file is broken out into sections for the different mediums that we support:

  • unknown for when we know the source, but not the medium
  • email for webmail providers
  • social for social media services
  • search for search engines

Then within each section, we list each known provider (aka source) by name, and then which domains each provider uses. For search engines, we also list the parameters used in the search engine URL to identify the search term. For example:

Google: # Name of search engine refererparameters:
- 'q'# First parameter used by Google
- 'p'# Alternative parameter used by Googledomains:
- google.co.uk # One domain used by Google
- google.com # Another domain used by Google
- ...

The number of referers and the domains they use is constantly growing - we need to keep referers.yml up-to-date, and hope that the community will help!

Contributing

We welcome contributions to referer-parser:

  1. New search engines and other referers - if you notice a search engine, social network or other site missing from referers.yml, please fork the repo, add the missing entry and submit a pull request
  2. Ports of referer-parser to other languages - we welcome ports of referer-parser to new programming languages (e.g. Lua, Go, Haskell, C)
  3. Bug fixes, feature requests etc - much appreciated!

Please sign the [Snowplow CLA] cla before making pull requests.

Support

General support for referer-parser is handled by the team at Snowplow Analytics Ltd.

You can contact the Snowplow Analytics team through any of the [channels listed on their wiki] talk-to-us.

Copyright and license

referers.yml is based on [Piwik's] piwik [SearchEngines.php] piwik-search-engines and [Socials.php] piwik-socials, copyright 2012 Matthieu Aubry and available under the [GNU General Public License v3] gpl-license.

The Ruby implementation is copyright 2014 Inside Systems, Inc and is available under the [Apache License, Version 2.0] apache-license.

The Java/Scala port is copyright 2012-2014 [Snowplow Analytics Ltd] snowplow-analytics and is available under the [Apache License, Version 2.0] apache-license.

The Python port is copyright 2012-2014 [Don Spaulding] donspaulding and is available under the [Apache License, Version 2.0] apache-license.

The node.js (JavaScript) port is copyright 2013-2014 [Martin Katrenik] mkatrenik and is available under the [Apache License, Version 2.0] apache-license.

The .NET (C#) port is copyright 2013-2014 [iPerform Software] iperform and is available under the [Apache License, Version 2.0] apache-license.

The PHP port is copyright 2013-2014 [Lars Strojny] lstrojny and is available under the [MIT License] mit-license.

The Go port is copyright 2014 [Thomas Sileo] tsileo and is available under the [MIT License] mit-license.

About

Library for extracting marketing attribution data from referrer URLs

Resources

Stars

0 stars

Watchers

8 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

referer-parser

Java/Scala: Build Status

referer-parser is a database for extracting marketing attribution data (such as search terms) from referer URLs, inspired by the ua-parserua-parser project (an equivalent library for user agent parsing).

The referer-parser project also contains multiple libraries for working with the referer-parser database in different languages.

referer-parser is a core component of Snowplowsnowplow, the open-source web-scale analytics platform powered by Hadoop and Redshift.

Note that we always use the original HTTP misspelling of 'referer' (and thus 'referal') in this project - never 'referrer'.

Database

The latest database is always available on this URL:

https://s3-eu-west-1.amazonaws.com/snowplow-hosted-assets/third-party/referer-parser/referers-latest.yml

The database is updated at most once a month. Each new version of the database is also uploaded with a timestamp:

https://s3-eu-west-1.amazonaws.com/snowplow-hosted-assets/third-party/referer-parser/referers-YYYY-MM.yml

If there is an issue with the database necessitating a re-release within the month, the corresponding files will be overwritten.

Maintainers

Usage: Java

The Java version of this library uses the updated API, and identifies search, social, webmail, internal and unknown referers:

importcom.snowplowanalytics.refererparser.Parser;
...
StringrefererUrl = "http://www.google.com/search?q=gateway+oracle+cards+denise+linn&hl=en&client=safari";
StringpageUrl = "http:/www.psychicbazaar.com/shop"; // Our current URLParserrefererParser = newParser();
Refererr = refererParser.parse(refererUrl, pageUrl);
System.out.println(r.medium); // => "search"System.out.println(r.source); // => "Google"System.out.println(r.term); // => "gateway oracle cards denise linn"

For more information, please see the Java/Scala [README] java-scala-readme.

Usage: Scala

The Scala version of this library uses the updated API, and identifies search, social, webmail, internal and unknown referers:

valrefererUrl="http://www.google.com/search?q=gateway+oracle+cards+denise+linn&hl=en&client=safari"valpageUrl="http:/www.psychicbazaar.com/shop"// Our current URLimportcom.snowplowanalytics.refererparser.scala.Parserfor (r <-Parser.parse(refererUrl, pageUrl)) {
println(r.medium) // => "search"for (s <- r.source) {
println(s) // => "Google"
}
for (t <- r.term) {
println(t) // => "gateway oracle cards denise linn"
}
}

You can also provide a list of domains which should be considered internal:

valrefererUrl="http://www.subdomain1.snowplowanalytics.com"valpageUrl="http://www.snowplowanalytics.com"valinternalDomains=List(
"www.subdomain1.snowplowanalytics.com", "www.subdomain2.snowplowanalytics.com"
)
importcom.snowplowanalytics.refererparser.scala.Parserfor (r <-Parser.parse(refererUrl, pageUrl, internalDomains)) {
println(r.medium) // => "internal"for (s <- r.source) {
println(s) // => null
}
for (t <- r.term) {
println(t) // => null
}
}

For more information, please see the Java/Scala [README] java-scala-readme.

Usage: Ruby

The Ruby version of this library uses the updated API:

require'referer-parser'parser=RefererParser::Parser.newparser.parse('http://www.google.com/search?q=gateway+oracle+cards+denise+linn&hl=en&client=safari')# => {:known=>true,
:uri=>"http://www.google.com/search?q=gateway+oracle+cards+denise+linn&hl=en&client=safari",
:source=>"Google",
:medium=>"search",
:term=>"gateway oracle cards denise linn"}

For more information, please see the Ruby [README] ruby-readme.

Usage: Python

Create a new instance of a Referer object by passing in the url you want to parse:

fromreferer_parserimportRefererreferer_url='http://www.google.com/search?q=gateway+oracle+cards+denise+linn&hl=en&client=safari'r=Referer(referer_url)

The r variable now holds a Referer instance. The important attributes are:

print(r.known) # Trueprint(r.referer) # 'Google'print(r.medium) # 'search'print(r.search_parameter) # 'q' print(r.search_term) # 'gateway oracle cards denise linn'print(r.uri) # ParseResult(scheme='http', netloc='www.google.com', path='/search', params='', query='q=gateway+oracle+cards+denise+linn&hl=en&client=safari', fragment='')

Optionally, pass in the current URL as well, to handle internal referers

fromreferer_parserimportRefererreferer_url='http://www.snowplowanalytics.com/about/team'curr_url='http://www.snowplowanalytics.com/account/profile'r=Referer(referer_url, curr_url)

For more information, please see the Python [README] python-readme.

Usage: node.js

The node.js (JavaScript) version of this library uses a hybrid of the new and old API, and identifies search, social, webmail, internal and unknown referers:

Create a new instance of a Referer object by passing in the url you want to parse:

varReferer=require('referer-parser')referer_url='http://www.google.com/search?q=gateway+oracle+cards+denise+linn&hl=en&client=safari'varr=newReferer(referer_url)

The r variable now holds a Referer instance.

Optionally, pass in the current URL as well, to handle internal referers

varReferer=require('referer-parser')varreferer_url='http://www.snowplowanalytics.com/about/team'varcurrent_url='http://www.snowplowanalytics.com/account/profile'varr=Referer(referer_url,current_url)

For more information, please see the node.js [README] nodejs-readme.

Usage: .NET

The .NET (C#) version of this library uses the updated API, and identifies search, social, webmail, internal and unknown referers:

usingRefererParser;
...
string refererUrl="http://www.google.com/search?q=gateway+oracle+cards+denise+linn&hl=en&client=safari";stringpageUrl="http:/www.psychicbazaar.com/shop";// Our current URLvarreferer=Parser.Parse(newUri(refererUrl),pageUrl);Console.WriteLine(r.Medium);// => "Search"Console.WriteLine(r.Source);// => "Google"Console.WriteLine(r.Term);// => "gateway oracle cards denise linn"

For more information, please see the .NET [README] dotnet-readme.

Usage: PHP

The PHP version of this library uses the updated API, and identifies search, social, webmail, internal and unknown referers:

useSnowplow\RefererParser\Parser;
$parser = newParser();
$referer = $parser->parse(
'http://www.google.com/search?q=gateway+oracle+cards+denise+linn&hl=en&client=safari',
'http:/www.psychicbazaar.com/shop'
);
if ($referer->isKnown()) {
echo$referer->getMedium(); // "Search"echo$referer->getSource(); // "Google"echo$referer->getTerm(); // "gateway oracle cards denise linn"
}

For more information, please see the PHP [README] php-readme.

Usage: Go

The Go version of this library uses the updated API:

package main
import (
"log""github.com/snowplow/referer-parser/go"
)
funcmain() {
referer_url:="http://www.google.com/search?q=gateway+oracle+cards+denise+linn&hl=en&client=safari"r:=refererparser.Parse(referer_url)
log.Printf("Known:%v", r.Known)
log.Printf("Referer:%v", r.Referer)
log.Printf("Medium:%v", r.Medium)
log.Printf("Search parameter:%v", r.SearchParameter)
log.Printf("Search term:%v", r.SearchTerm)
log.Printf("Host:%v", r.URI)
}

For more information, please see the Go [README] go-readme

referers.yml

referer-parser identifies whether a URL is a known referer or not by checking it against the [referers.yml] referers-yml file; the intention is that this YAML file is reusable as-is by every language-specific implementation of referer-parser.

The file is broken out into sections for the different mediums that we support:

  • unknown for when we know the source, but not the medium
  • email for webmail providers
  • social for social media services
  • search for search engines

Then within each section, we list each known provider (aka source) by name, and then which domains each provider uses. For search engines, we also list the parameters used in the search engine URL to identify the search term. For example:

Google: # Name of search engine refererparameters:
- 'q'# First parameter used by Google
- 'p'# Alternative parameter used by Googledomains:
- google.co.uk # One domain used by Google
- google.com # Another domain used by Google
- ...

The number of referers and the domains they use is constantly growing - we need to keep referers.yml up-to-date, and hope that the community will help!

Contributing

We welcome contributions to referer-parser:

  1. New search engines and other referers - if you notice a search engine, social network or other site missing from referers.yml, please fork the repo, add the missing entry and submit a pull request
  2. Ports of referer-parser to other languages - we welcome ports of referer-parser to new programming languages (e.g. Lua, Go, Haskell, C)
  3. Bug fixes, feature requests etc - much appreciated!

Please sign the [Snowplow CLA] cla before making pull requests.

Support

General support for referer-parser is handled by the team at Snowplow Analytics Ltd.

You can contact the Snowplow Analytics team through any of the [channels listed on their wiki] talk-to-us.

Copyright and license

referers.yml is based on [Piwik's] piwik [SearchEngines.php] piwik-search-engines and [Socials.php] piwik-socials, copyright 2012 Matthieu Aubry and available under the [GNU General Public License v3] gpl-license.

The Ruby implementation is copyright 2014 Inside Systems, Inc and is available under the [Apache License, Version 2.0] apache-license.

The Java/Scala port is copyright 2012-2014 [Snowplow Analytics Ltd] snowplow-analytics and is available under the [Apache License, Version 2.0] apache-license.

The Python port is copyright 2012-2014 [Don Spaulding] donspaulding and is available under the [Apache License, Version 2.0] apache-license.

The node.js (JavaScript) port is copyright 2013-2014 [Martin Katrenik] mkatrenik and is available under the [Apache License, Version 2.0] apache-license.

The .NET (C#) port is copyright 2013-2014 [iPerform Software] iperform and is available under the [Apache License, Version 2.0] apache-license.

The PHP port is copyright 2013-2014 [Lars Strojny] lstrojny and is available under the [MIT License] mit-license.

The Go port is copyright 2014 [Thomas Sileo] tsileo and is available under the [MIT License] mit-license.

About

Library for extracting marketing attribution data from referrer URLs

Resources

Stars

0 stars

Watchers

8 watching

Forks

Releases

Packages

Contributors

Languages