From 124c85d6720354d0fbf1acd57a5023838d4a814b Mon Sep 17 00:00:00 2001 From: wiktorolko <40569041+wiktorolko@users.noreply.github.com> Date: Fri, 12 Oct 2018 14:34:46 +0200 Subject: [PATCH 1/5] Initial commit --- .gitignore | 2 + .travis.yml | 8 + CHANGELOG | 34 + LICENSE-2.0.txt | 202 + README.md | 88 + build.gradle | 19 + gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 54413 bytes gradle/wrapper/gradle-wrapper.properties | 5 + gradlew | 172 + gradlew.bat | 84 + .../refererparser/CorruptYamlException.java | 23 + .../refererparser/Medium.java | 42 + .../refererparser/Parser.java | 289 ++ .../refererparser/Referer.java | 60 + src/main/resources/referers.json | 4090 +++++++++++++++++ src/main/resources/referers.yml | 3919 ++++++++++++++++ .../refererparser/ParserTest.java | 69 + src/test/resources/referer-tests.json | 250 + 18 files changed, 9356 insertions(+) create mode 100644 .gitignore create mode 100644 .travis.yml create mode 100644 CHANGELOG create mode 100644 LICENSE-2.0.txt create mode 100644 README.md create mode 100644 build.gradle create mode 100644 gradle/wrapper/gradle-wrapper.jar create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100755 gradlew create mode 100644 gradlew.bat create mode 100644 src/main/java/com/snowplowanalytics/refererparser/CorruptYamlException.java create mode 100644 src/main/java/com/snowplowanalytics/refererparser/Medium.java create mode 100644 src/main/java/com/snowplowanalytics/refererparser/Parser.java create mode 100644 src/main/java/com/snowplowanalytics/refererparser/Referer.java create mode 100644 src/main/resources/referers.json create mode 100644 src/main/resources/referers.yml create mode 100644 src/test/java/com/snowplowanalytics/refererparser/ParserTest.java create mode 100644 src/test/resources/referer-tests.json diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..23841a6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +.idea +.gradle diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..1776473 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,8 @@ +language: java +install: true + +jdk: +- oraclejdk8 + +script: +- ./gradlew build diff --git a/CHANGELOG b/CHANGELOG new file mode 100644 index 0000000..f858f0c --- /dev/null +++ b/CHANGELOG @@ -0,0 +1,34 @@ +Version 0.4.0 (2018-10-11) +-------------------------- +Support of 'paid' medium +Moving java code to a separate project + +Version 0.3.0 (2015-09-02) +-------------------------- +Added Taboola, Outbrain and other referers (#109) +Updated vagrant up to work with latest Peru version (#110) +Removed duplicate google.com.kh/imgres entry (#111) + +Version 0.2.3 (2014-02-01) +-------------------------- +Added dedicated Vagrant setup (#92) +Added Turkish popular traffic provider platforms, thanks @cagataygurturk! +Now building referer-parser against Java 6, not 7 (#84) + +Version 0.2.2 (2014-07-23) +-------------------------- +Fixed Java referer-parser doesn't work on Hadoop (#76) + +Version 0.2.1 (2014-07-16) +-------------------------- +Updated build process for local Maven publishing (#72) +Bumped SBT to 0.13.2 (#73) +Added support for Scala 2.10.4 and 2.11.1 (#75) + +Version 0.2.0 (2014-07-02) +-------------------------- +Added configurable list of domains which should count as "internal" (#18) +Remove sbt-assembly and legacy Maven publish code (#71) +Made tests JSON-driven (#4) +Changed URI parsing to use `java.net.URL`, thanks @squeed! (#55) +Added CHANGELOG (#68) diff --git a/LICENSE-2.0.txt b/LICENSE-2.0.txt new file mode 100644 index 0000000..7a4a3ea --- /dev/null +++ b/LICENSE-2.0.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..3436671 --- /dev/null +++ b/README.md @@ -0,0 +1,88 @@ +# referer-parser + +This is the Java implementation of [referer-parser][referer-parser], the library for extracting attribution data from referer (sic) URLs. + +The implementation uses the shared 'database' of known referers found in [`referers.yml`][referers-yml]. + +## Usage: + +Use referer-parser in Java like this: + +```java +import com.snowplowanalytics.refererparser.Parser; + +... + +String refererUrl = "http://www.google.com/search?q=gateway+oracle+cards+denise+linn&hl=en&client=safari"; +String pageUrl = "http://www.psychicbazaar.com/shop"; // Our current URL + +Parser refererParser = new Parser(); +Referer r = 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" +``` + + +### Installation + +Add the following code into your `HOME/.m2/settings.xml` to be able to use this repository: + +```xml + + + + + + + com.snowplowanalytics + SnowPlow Analytics + http://maven.snplow.com/releases + + true + + + true + + + + + + +``` + +Then add into your project's `pom.xml`: + +```xml + + com.snowplowanalytics + java-referer-parser + 0.4.0 + +``` + + +## Contributing + +1. Fork it +2. Create your feature branch (`git checkout -b my-new-feature`) +3. Commit your changes (`git commit -am 'Add some feature'`) +4. Push to the branch (`git push origin my-new-feature`) +5. Create new Pull Request + +## Copyright and license + +Licensed under the [Apache License, Version 2.0][license] (the "License"); +you may not use this software except in compliance with the License. + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + + +[referer-parser]: https://github.com/snowplow/referer-parser +[referers-yml]: https://github.com/snowplow/referer-parser/blob/master/referers.yml +[license]: http://www.apache.org/licenses/LICENSE-2.0 diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..098d53b --- /dev/null +++ b/build.gradle @@ -0,0 +1,19 @@ +plugins { + id 'java' +} + +group = 'com.snowplowanalytics' +version = '0.4.0' +sourceCompatibility = '1.8' +targetCompatibility = '1.8' + +repositories { + mavenCentral() +} + +dependencies { + compile 'org.yaml:snakeyaml:1.19' + compile 'org.apache.httpcomponents:httpclient:4.5.3' + testCompile 'junit:junit:4.12' + testCompile 'org.json:json:20180813' +} \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..1948b9074f1016d15d505d185bc3f73deb82d8c8 GIT binary patch literal 54413 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 \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin, switch paths to Windows format before running java +if $cygwin ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=$(save "$@") + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong +if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then + cd "$(dirname "$0")" +fi + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 0000000..f955316 --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,84 @@ +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windows variants + +if not "%OS%" == "Windows_NT" goto win9xME_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/src/main/java/com/snowplowanalytics/refererparser/CorruptYamlException.java b/src/main/java/com/snowplowanalytics/refererparser/CorruptYamlException.java new file mode 100644 index 0000000..6f84840 --- /dev/null +++ b/src/main/java/com/snowplowanalytics/refererparser/CorruptYamlException.java @@ -0,0 +1,23 @@ +/** + * Copyright 2012-2013 Snowplow Analytics Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.snowplowanalytics.refererparser; + +public class CorruptYamlException extends Exception { + public CorruptYamlException(String message) { + super(message); + } +} \ No newline at end of file diff --git a/src/main/java/com/snowplowanalytics/refererparser/Medium.java b/src/main/java/com/snowplowanalytics/refererparser/Medium.java new file mode 100644 index 0000000..17db3d7 --- /dev/null +++ b/src/main/java/com/snowplowanalytics/refererparser/Medium.java @@ -0,0 +1,42 @@ +/** + * Copyright 2012-2013 Snowplow Analytics Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.snowplowanalytics.refererparser; + +/** + * Enum for the types of referer + * that we can detect - "medium" + * in Google's language. + * + * @author Alex Dean (@alexatkeplar) + */ +public enum Medium { + UNKNOWN, + INTERNAL, + SEARCH, + SOCIAL, + PAID, + EMAIL; + + static public Medium fromString(String medium) { + return Medium.valueOf(medium.toUpperCase()); + } + + @Override + public String toString() { + return super.toString().toLowerCase(); + } +} diff --git a/src/main/java/com/snowplowanalytics/refererparser/Parser.java b/src/main/java/com/snowplowanalytics/refererparser/Parser.java new file mode 100644 index 0000000..ee50cc5 --- /dev/null +++ b/src/main/java/com/snowplowanalytics/refererparser/Parser.java @@ -0,0 +1,289 @@ +/** + * Copyright 2012-2013 Snowplow Analytics Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.snowplowanalytics.refererparser; + +// Java +import java.net.URI; +import java.net.URISyntaxException; +import java.net.URL; +import java.io.InputStream; +import java.util.List; +import java.util.Map; +import java.util.HashMap; +import java.util.Collections; + +// SnakeYAML +import org.yaml.snakeyaml.Yaml; +import org.yaml.snakeyaml.constructor.SafeConstructor; + +// Apache URLEncodedUtils +import org.apache.http.NameValuePair; +import org.apache.http.client.utils.URLEncodedUtils; + +/** + * Java implementation of Referer Parser + * + * @author Alex Dean (@alexatkeplar) + */ +public class Parser { + + private static final String REFERERS_YAML_PATH = "/referers.yml"; + private Map referers; + + /** + * Holds the structure of each referer + * in our lookup Map. + */ + private static class RefererLookup { + public Medium medium; + public String source; + public List parameters; + + public RefererLookup(Medium medium, String source, List parameters) { + this.medium = medium; + this.source = source; + this.parameters = parameters; + } + } + + /** + * Construct our Parser object using the + * bundled referers.yml + */ + public Parser() throws CorruptYamlException { + this(Parser.class.getResourceAsStream(REFERERS_YAML_PATH)); + } + + /** + * Construct our Parser object using a + * InputStream (in YAML format) + * + * @param referersStream The referers YAML + * to load into our Parser, in + * InputStream format + */ + public Parser(InputStream referersStream) throws CorruptYamlException { + referers = loadReferers(referersStream); + } + + /** + * Construct our Parser object using a + * custom resource String + * + * @param referersResource The resource pointing + * to the referers YAML file to load + */ + public Parser(String referersResource) throws CorruptYamlException { + this(Parser.class.getResourceAsStream(referersResource)); + } + + public Referer parse(URI refererUri, URI pageUri) { + return parse(refererUri, pageUri.getHost()); + } + + public Referer parse(String refererUri, URI pageUri) throws URISyntaxException { + return parse(refererUri, pageUri.getHost()); + } + + public Referer parse(String refererUri, String pageHost) throws URISyntaxException { + if (refererUri == null || "".equals(refererUri)) return null; + final URI uri = new URI(refererUri); + return parse(uri, pageHost); + } + + public Referer parse(URI refererUri, String pageHost) { + return parse(refererUri, pageHost, Collections.emptyList()); + } + + public Referer parse(URI refererUri, String pageHost, List internalDomains) { + if (refererUri == null) { return null; } + return parse(refererUri.getScheme(), refererUri.getHost(), refererUri.getPath(), refererUri.getRawQuery(), pageHost, internalDomains); + } + + public Referer parse(URL refererUrl, String pageHost){ + if (refererUrl == null) { return null; } + return parse(refererUrl.getProtocol(), refererUrl.getHost(), refererUrl.getPath(), refererUrl.getQuery(), pageHost); + } + + private Referer parse(String scheme, String host, String path, String query, String pageHost){ + return parse(scheme, host, path, query, pageHost, Collections.emptyList()); + } + + private Referer parse(String scheme, String host, String path, String query, String pageHost, List internalDomains){ + + if (scheme == null || (!scheme.equals("http") && !scheme.equals("https"))) return null; + + // Internal link if hosts match exactly + // TODO: would also be nice to: + // 1. Support a list of other hosts which count as internal + // 2. Have an algo for stripping subdomains before checking match + if (host == null) return null; // Not a valid URL + if (host.equals(pageHost)) return new Referer(Medium.INTERNAL, null, null); + if (stripSubDomains(host).equals(pageHost)) return new Referer(Medium.INTERNAL, null, null); + for (String s : internalDomains) { + if (s.trim().equals(host)) + return new Referer(Medium.INTERNAL, null, null); + } + + // Try to lookup our referer. First check with paths, then without. + // This is the safest way of handling lookups + RefererLookup referer = lookupReferer(host, path, true); + if (referer == null) { + referer = lookupReferer(host, path, false); + } + + if (referer == null) { + return new Referer(Medium.UNKNOWN, null, null); // Unknown referer, nothing more to do + } else { + // Potentially add a search term + final String term = (referer.medium == Medium.SEARCH) ? extractSearchTerm(query, referer.parameters) : null; + return new Referer(referer.medium, referer.source, term); + } + } + + private String stripSubDomains(String host) { + String[] urlSegments = host.split("\\."); + int length = urlSegments.length; + if (length > 3){ + return String.format("%s.%s.%s",urlSegments[0], urlSegments[length-2], urlSegments[length-1]); + } + return host; + } + + /** + * Recursive function to lookup a host (or partial host) + * in our referers map. + * + * First check the host, then the host+full path, then the host+ + * one-level path. + * + * If not found, remove one subdomain-level off the front + * of the host and try again. + * + * @param refererHost The host of the current page + * @param refererPath The path to the current page + * @param includePath Whether to include the path in the lookup + * + * @return a RefererLookup object populated with the given + * referer, or null if not found + */ + private RefererLookup lookupReferer(String refererHost, String refererPath, Boolean includePath) { + + // Check if domain+full path matches, e.g. for apollo.lv/portal/search/ + RefererLookup referer = (includePath) ? referers.get(refererHost + refererPath) : referers.get(refererHost); + + // Check if domain+one-level path matches, e.g. for orange.fr/webmail/fr_FR/read.html (in our YAML it's orange.fr/webmail) + if (includePath && referer == null) { + final String[] pathElements = refererPath.split("/"); + if (pathElements.length > 1) { + referer = referers.get(refererHost + "/" + pathElements[1]); + } + } + + if (referer == null) { + final int idx = refererHost.indexOf('.'); + if (idx == -1) { + return null; // No "."? Let's quit. + } else { + return lookupReferer(refererHost.substring(idx + 1), refererPath, includePath); // Recurse + } + } else { + return referer; + } + } + + private String extractSearchTerm(String query, List possibleParameters) { + + List params; + try { + params = URLEncodedUtils.parse(new URI("http://localhost?" + query), "UTF-8"); + // params = URLEncodedUtils.parse(query, Charset.forName("UTF-8")); because https://github.com/snowplow/referer-parser/issues/76 + } catch (IllegalArgumentException | URISyntaxException iae) { + return null; + } + + for (NameValuePair pair : params) { + final String name = pair.getName(); + final String value = pair.getValue(); + + if (possibleParameters.contains(name)) { + return value; + } + } + return null; + } + + /** + * Builds the map of hosts to referers from the + * input YAML file. + * + * @param referersYaml An InputStream containing the + * referers database in YAML format. + * + * @return a Map where the key is the hostname of each + * referer and the value (RefererLookup) + * contains all known info about this referer + */ + private Map loadReferers(InputStream referersYaml) throws CorruptYamlException { + + Yaml yaml = new Yaml(new SafeConstructor()); + Map> rawReferers = yaml.load(referersYaml); + + // This will store all of our referers + Map referers = new HashMap<>(); + + // Outer loop is all referers under a given medium + for (Map.Entry> mediumReferers : rawReferers.entrySet()) { + + Medium medium = Medium.fromString(mediumReferers.getKey()); + + // Inner loop is individual referers + for (Map.Entry referer : mediumReferers.getValue().entrySet()) { + + String sourceName = referer.getKey(); + Map> refererMap = referer.getValue(); + + // Validate + List parameters = refererMap.get("parameters"); + if (medium == Medium.SEARCH) { + if (parameters == null) { + throw new CorruptYamlException("No parameters found for search referer '" + sourceName + "'"); + } + } else { + if (parameters != null) { + throw new CorruptYamlException("Parameters not supported for non-search referer '" + sourceName + "'"); + } + } + List domains = refererMap.get("domains"); + if (domains == null) { + throw new CorruptYamlException("No domains found for referer '" + sourceName + "'"); + } + + // Our hash needs referer domain as the + // key, so let's expand + for (String domain : domains) { + if (referers.containsValue(domain)) { + throw new CorruptYamlException("Duplicate of domain '" + domain + "' found"); + } + referers.put(domain, new RefererLookup(medium, sourceName, parameters)); + } + } + } + + return referers; + } +} diff --git a/src/main/java/com/snowplowanalytics/refererparser/Referer.java b/src/main/java/com/snowplowanalytics/refererparser/Referer.java new file mode 100644 index 0000000..a8df9b6 --- /dev/null +++ b/src/main/java/com/snowplowanalytics/refererparser/Referer.java @@ -0,0 +1,60 @@ +/** + * Copyright 2012-2013 Snowplow Analytics Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.snowplowanalytics.refererparser; + +import java.util.Objects; + +/** + * Referer data class + * + * @author Alex Dean (@alexatkeplar) + */ +public class Referer { + public final Medium medium; + public final String source, term; + + public Referer(Medium medium, String source, String term) { + this.medium = medium; + this.source = source; + this.term = term; + } + + @Override + public boolean equals(Object other) { + if (other == this) return true; + if (!(other instanceof Referer)) return false; + + Referer r = (Referer) other; + return ((this.medium != null && this.medium.equals(r.medium)) || this.medium == r.medium) && + ((this.source != null && this.source.equals(r.source)) || Objects.equals(this.source, r.source)) && + ((this.term != null && this.term.equals(r.term)) || Objects.equals(this.term, r.term)); + } + + @Override + public int hashCode() { + int h = medium == null ? 0 : medium.hashCode(); + h += source == null ? 0 : source.hashCode(); + h += term == null ? 0 : term.hashCode(); + return h; + } + + @Override + public String toString() { + return String.format("{medium: %s, source: %s, term: %s}", + medium, source, term); + } +} diff --git a/src/main/resources/referers.json b/src/main/resources/referers.json new file mode 100644 index 0000000..460975e --- /dev/null +++ b/src/main/resources/referers.json @@ -0,0 +1,4090 @@ +{ + "unknown": { + "Outbrain": { + "domains": [ + "paid.outbrain.com" + ] + }, + "Google": { + "domains": [ + "support.google.com", + "developers.google.com", + "maps.google.com", + "accounts.google.com", + "drive.google.com", + "sites.google.com", + "groups.google.com", + "groups.google.co.uk", + "news.google.co.uk" + ] + }, + "Taboola": { + "domains": [ + "trc.taboola.com", + "api.taboola.com" + ] + }, + "Yahoo!": { + "domains": [ + "finance.yahoo.com", + "news.yahoo.com", + "eurosport.yahoo.com", + "sports.yahoo.com", + "astrology.yahoo.com", + "travel.yahoo.com", + "answers.yahoo.com", + "screen.yahoo.com", + "weather.yahoo.com", + "messenger.yahoo.com", + "games.yahoo.com", + "shopping.yahoo.net", + "movies.yahoo.com", + "cars.yahoo.com", + "lifestyle.yahoo.com", + "omg.yahoo.com", + "match.yahoo.net" + ] + } + }, + "search": { + "TalkTalk": { + "domains": [ + "www.talktalk.co.uk" + ], + "parameters": [ + "query" + ] + }, + "1.cz": { + "domains": [ + "1.cz" + ], + "parameters": [ + "q" + ] + }, + "Softonic": { + "domains": [ + "search.softonic.com" + ], + "parameters": [ + "q" + ] + }, + "GAIS": { + "domains": [ + "gais.cs.ccu.edu.tw" + ], + "parameters": [ + "q" + ] + }, + "Freecause": { + "domains": [ + "search.freecause.com" + ], + "parameters": [ + "p" + ] + }, + "360.cn": { + "domains": [ + "so.360.cn", + "www.so.com" + ], + "parameters": [ + "q" + ] + }, + "RPMFind": { + "domains": [ + "rpmfind.net", + "fr2.rpmfind.net" + ], + "parameters": [ + "query" + ] + }, + "Comcast": { + "domains": [ + "serach.comcast.net" + ], + "parameters": [ + "q" + ] + }, + "Voila": { + "domains": [ + "search.ke.voila.fr", + "www.lemoteur.fr" + ], + "parameters": [ + "rdata", + "kw" + ] + }, + "Nifty": { + "domains": [ + "search.nifty.com" + ], + "parameters": [ + "q" + ] + }, + "Atlas": { + "domains": [ + "searchatlas.centrum.cz" + ], + "parameters": [ + "q" + ] + }, + "Lo.st": { + "domains": [ + "lo.st" + ], + "parameters": [ + "x_query" + ] + }, + "DasTelefonbuch": { + "domains": [ + "www1.dastelefonbuch.de" + ], + "parameters": [ + "kw" + ] + }, + "Fireball": { + "domains": [ + "www.fireball.de" + ], + "parameters": [ + "q" + ] + }, + "1und1": { + "domains": [ + "search.1und1.de" + ], + "parameters": [ + "su" + ] + }, + "Virgilio": { + "domains": [ + "ricerca.virgilio.it", + "ricercaimmagini.virgilio.it", + "ricercavideo.virgilio.it", + "ricercanews.virgilio.it", + "mobile.virgilio.it" + ], + "parameters": [ + "qs" + ] + }, + "Web.nl": { + "domains": [ + "www.web.nl" + ], + "parameters": [ + "zoekwoord" + ] + }, + "Plazoo": { + "domains": [ + "www.plazoo.com" + ], + "parameters": [ + "q" + ] + }, + "Goyellow.de": { + "domains": [ + "www.goyellow.de" + ], + "parameters": [ + "MDN" + ] + }, + "AOL": { + "domains": [ + "search.aol.com", + "search.aol.it", + "aolsearch.aol.com", + "aolsearch.com", + "www.aolrecherche.aol.fr", + "www.aolrecherches.aol.fr", + "www.aolimages.aol.fr", + "aim.search.aol.com", + "www.recherche.aol.fr", + "find.web.aol.com", + "recherche.aol.ca", + "aolsearch.aol.co.uk", + "search.aol.co.uk", + "aolrecherche.aol.fr", + "sucheaol.aol.de", + "suche.aol.de", + "suche.aolsvc.de", + "aolbusqueda.aol.com.mx", + "alicesuche.aol.de", + "alicesuchet.aol.de", + "suchet2.aol.de", + "search.hp.my.aol.com.au", + "search.hp.my.aol.de", + "search.hp.my.aol.it", + "search-intl.netscape.com" + ], + "parameters": [ + "q", + "query" + ] + }, + "Acoon": { + "domains": [ + "www.acoon.de" + ], + "parameters": [ + "begriff" + ] + }, + "Free": { + "domains": [ + "search.free.fr", + "search1-2.free.fr", + "search1-1.free.fr" + ], + "parameters": [ + "q" + ] + }, + "Apollo Latvia": { + "domains": [ + "apollo.lv/portal/search/" + ], + "parameters": [ + "q" + ] + }, + "HighBeam": { + "domains": [ + "www.highbeam.com" + ], + "parameters": [ + "q" + ] + }, + "I-play": { + "domains": [ + "start.iplay.com" + ], + "parameters": [ + "q" + ] + }, + "FriendFeed": { + "domains": [ + "friendfeed.com" + ], + "parameters": [ + "q" + ] + }, + "Yasni": { + "domains": [ + "www.yasni.de", + "www.yasni.com", + "www.yasni.co.uk", + "www.yasni.ch", + "www.yasni.at" + ], + "parameters": [ + "query" + ] + }, + "Gigablast": { + "domains": [ + "www.gigablast.com", + "dir.gigablast.com" + ], + "parameters": [ + "q" + ] + }, + "arama": { + "domains": [ + "arama.com" + ], + "parameters": [ + "q" + ] + }, + "Fixsuche": { + "domains": [ + "www.fixsuche.de" + ], + "parameters": [ + "q" + ] + }, + "Apontador": { + "domains": [ + "apontador.com.br", + "www.apontador.com.br" + ], + "parameters": [ + "q" + ] + }, + "Search.com": { + "domains": [ + "www.search.com" + ], + "parameters": [ + "q" + ] + }, + "Monstercrawler": { + "domains": [ + "www.monstercrawler.com" + ], + "parameters": [ + "qry" + ] + }, + "Google Images": { + "domains": [ + "google.ac/imgres", + "google.ad/imgres", + "google.ae/imgres", + "google.am/imgres", + "google.as/imgres", + "google.at/imgres", + "google.az/imgres", + "google.ba/imgres", + "google.be/imgres", + "google.bf/imgres", + "google.bg/imgres", + "google.bi/imgres", + "google.bj/imgres", + "google.bs/imgres", + "google.by/imgres", + "google.ca/imgres", + "google.cat/imgres", + "google.cc/imgres", + "google.cd/imgres", + "google.cf/imgres", + "google.cg/imgres", + "google.ch/imgres", + "google.ci/imgres", + "google.cl/imgres", + "google.cm/imgres", + "google.cn/imgres", + "google.co.bw/imgres", + "google.co.ck/imgres", + "google.co.cr/imgres", + "google.co.id/imgres", + "google.co.il/imgres", + "google.co.in/imgres", + "google.co.jp/imgres", + "google.co.ke/imgres", + "google.co.kr/imgres", + "google.co.ls/imgres", + "google.co.ma/imgres", + "google.co.mz/imgres", + "google.co.nz/imgres", + "google.co.th/imgres", + "google.co.tz/imgres", + "google.co.ug/imgres", + "google.co.uk/imgres", + "google.co.uz/imgres", + "google.co.ve/imgres", + "google.co.vi/imgres", + "google.co.za/imgres", + "google.co.zm/imgres", + "google.co.zw/imgres", + "google.com/imgres", + "google.com.af/imgres", + "google.com.ag/imgres", + "google.com.ai/imgres", + "google.com.ar/imgres", + "google.com.au/imgres", + "google.com.bd/imgres", + "google.com.bh/imgres", + "google.com.bn/imgres", + "google.com.bo/imgres", + "google.com.br/imgres", + "google.com.by/imgres", + "google.com.bz/imgres", + "google.com.co/imgres", + "google.com.cu/imgres", + "google.com.cy/imgres", + "google.com.do/imgres", + "google.com.ec/imgres", + "google.com.eg/imgres", + "google.com.et/imgres", + "google.com.fj/imgres", + "google.com.gh/imgres", + "google.com.gi/imgres", + "google.com.gt/imgres", + "google.com.hk/imgres", + "google.com.jm/imgres", + "google.com.kh/imgres", + "google.com.kw/imgres", + "google.com.lb/imgres", + "google.com.lc/imgres", + "google.com.ly/imgres", + "google.com.mt/imgres", + "google.com.mx/imgres", + "google.com.my/imgres", + "google.com.na/imgres", + "google.com.nf/imgres", + "google.com.ng/imgres", + "google.com.ni/imgres", + "google.com.np/imgres", + "google.com.om/imgres", + "google.com.pa/imgres", + "google.com.pe/imgres", + "google.com.ph/imgres", + "google.com.pk/imgres", + "google.com.pr/imgres", + "google.com.py/imgres", + "google.com.qa/imgres", + "google.com.sa/imgres", + "google.com.sb/imgres", + "google.com.sg/imgres", + "google.com.sl/imgres", + "google.com.sv/imgres", + "google.com.tj/imgres", + "google.com.tn/imgres", + "google.com.tr/imgres", + "google.com.tw/imgres", + "google.com.ua/imgres", + "google.com.uy/imgres", + "google.com.vc/imgres", + "google.com.vn/imgres", + "google.cv/imgres", + "google.cz/imgres", + "google.de/imgres", + "google.dj/imgres", + "google.dk/imgres", + "google.dm/imgres", + "google.dz/imgres", + "google.ee/imgres", + "google.es/imgres", + "google.fi/imgres", + "google.fm/imgres", + "google.fr/imgres", + "google.ga/imgres", + "google.gd/imgres", + "google.ge/imgres", + "google.gf/imgres", + "google.gg/imgres", + "google.gl/imgres", + "google.gm/imgres", + "google.gp/imgres", + "google.gr/imgres", + "google.gy/imgres", + "google.hn/imgres", + "google.hr/imgres", + "google.ht/imgres", + "google.hu/imgres", + "google.ie/imgres", + "google.im/imgres", + "google.io/imgres", + "google.iq/imgres", + "google.is/imgres", + "google.it/imgres", + "google.it.ao/imgres", + "google.je/imgres", + "google.jo/imgres", + "google.kg/imgres", + "google.ki/imgres", + "google.kz/imgres", + "google.la/imgres", + "google.li/imgres", + "google.lk/imgres", + "google.lt/imgres", + "google.lu/imgres", + "google.lv/imgres", + "google.md/imgres", + "google.me/imgres", + "google.mg/imgres", + "google.mk/imgres", + "google.ml/imgres", + "google.mn/imgres", + "google.ms/imgres", + "google.mu/imgres", + "google.mv/imgres", + "google.mw/imgres", + "google.ne/imgres", + "google.nl/imgres", + "google.no/imgres", + "google.nr/imgres", + "google.nu/imgres", + "google.pl/imgres", + "google.pn/imgres", + "google.ps/imgres", + "google.pt/imgres", + "google.ro/imgres", + "google.rs/imgres", + "google.ru/imgres", + "google.rw/imgres", + "google.sc/imgres", + "google.se/imgres", + "google.sh/imgres", + "google.si/imgres", + "google.sk/imgres", + "google.sm/imgres", + "google.sn/imgres", + "google.so/imgres", + "google.st/imgres", + "google.td/imgres", + "google.tg/imgres", + "google.tk/imgres", + "google.tl/imgres", + "google.tm/imgres", + "google.to/imgres", + "google.tt/imgres", + "google.us/imgres", + "google.vg/imgres", + "google.vu/imgres", + "images.google.ws", + "images.google.ac", + "images.google.ad", + "images.google.ae", + "images.google.am", + "images.google.as", + "images.google.at", + "images.google.az", + "images.google.ba", + "images.google.be", + "images.google.bf", + "images.google.bg", + "images.google.bi", + "images.google.bj", + "images.google.bs", + "images.google.by", + "images.google.ca", + "images.google.cat", + "images.google.cc", + "images.google.cd", + "images.google.cf", + "images.google.cg", + "images.google.ch", + "images.google.ci", + "images.google.cl", + "images.google.cm", + "images.google.cn", + "images.google.co.bw", + "images.google.co.ck", + "images.google.co.cr", + "images.google.co.id", + "images.google.co.il", + "images.google.co.in", + "images.google.co.jp", + "images.google.co.ke", + "images.google.co.kr", + "images.google.co.ls", + "images.google.co.ma", + "images.google.co.mz", + "images.google.co.nz", + "images.google.co.th", + "images.google.co.tz", + "images.google.co.ug", + "images.google.co.uk", + "images.google.co.uz", + "images.google.co.ve", + "images.google.co.vi", + "images.google.co.za", + "images.google.co.zm", + "images.google.co.zw", + "images.google.com", + "images.google.com.af", + "images.google.com.ag", + "images.google.com.ai", + "images.google.com.ar", + "images.google.com.au", + "images.google.com.bd", + "images.google.com.bh", + "images.google.com.bn", + "images.google.com.bo", + "images.google.com.br", + "images.google.com.by", + "images.google.com.bz", + "images.google.com.co", + "images.google.com.cu", + "images.google.com.cy", + "images.google.com.do", + "images.google.com.ec", + "images.google.com.eg", + "images.google.com.et", + "images.google.com.fj", + "images.google.com.gh", + "images.google.com.gi", + "images.google.com.gt", + "images.google.com.hk", + "images.google.com.jm", + "images.google.com.kh", + "images.google.com.kh", + "images.google.com.kw", + "images.google.com.lb", + "images.google.com.lc", + "images.google.com.ly", + "images.google.com.mt", + "images.google.com.mx", + "images.google.com.my", + "images.google.com.na", + "images.google.com.nf", + "images.google.com.ng", + "images.google.com.ni", + "images.google.com.np", + "images.google.com.om", + "images.google.com.pa", + "images.google.com.pe", + "images.google.com.ph", + "images.google.com.pk", + "images.google.com.pr", + "images.google.com.py", + "images.google.com.qa", + "images.google.com.sa", + "images.google.com.sb", + "images.google.com.sg", + "images.google.com.sl", + "images.google.com.sv", + "images.google.com.tj", + "images.google.com.tn", + "images.google.com.tr", + "images.google.com.tw", + "images.google.com.ua", + "images.google.com.uy", + "images.google.com.vc", + "images.google.com.vn", + "images.google.cv", + "images.google.cz", + "images.google.de", + "images.google.dj", + "images.google.dk", + "images.google.dm", + "images.google.dz", + "images.google.ee", + "images.google.es", + "images.google.fi", + "images.google.fm", + "images.google.fr", + "images.google.ga", + "images.google.gd", + "images.google.ge", + "images.google.gf", + "images.google.gg", + "images.google.gl", + "images.google.gm", + "images.google.gp", + "images.google.gr", + "images.google.gy", + "images.google.hn", + "images.google.hr", + "images.google.ht", + "images.google.hu", + "images.google.ie", + "images.google.im", + "images.google.io", + "images.google.iq", + "images.google.is", + "images.google.it", + "images.google.it.ao", + "images.google.je", + "images.google.jo", + "images.google.kg", + "images.google.ki", + "images.google.kz", + "images.google.la", + "images.google.li", + "images.google.lk", + "images.google.lt", + "images.google.lu", + "images.google.lv", + "images.google.md", + "images.google.me", + "images.google.mg", + "images.google.mk", + "images.google.ml", + "images.google.mn", + "images.google.ms", + "images.google.mu", + "images.google.mv", + "images.google.mw", + "images.google.ne", + "images.google.nl", + "images.google.no", + "images.google.nr", + "images.google.nu", + "images.google.pl", + "images.google.pn", + "images.google.ps", + "images.google.pt", + "images.google.ro", + "images.google.rs", + "images.google.ru", + "images.google.rw", + "images.google.sc", + "images.google.se", + "images.google.sh", + "images.google.si", + "images.google.sk", + "images.google.sm", + "images.google.sn", + "images.google.so", + "images.google.st", + "images.google.td", + "images.google.tg", + "images.google.tk", + "images.google.tl", + "images.google.tm", + "images.google.to", + "images.google.tt", + "images.google.us", + "images.google.vg", + "images.google.vu", + "images.google.ws" + ], + "parameters": [ + "q" + ] + }, + "ABCs\u00f8k": { + "domains": [ + "abcsolk.no", + "verden.abcsok.no" + ], + "parameters": [ + "q" + ] + }, + "Google Product Search": { + "domains": [ + "google.ac/products", + "google.ad/products", + "google.ae/products", + "google.am/products", + "google.as/products", + "google.at/products", + "google.az/products", + "google.ba/products", + "google.be/products", + "google.bf/products", + "google.bg/products", + "google.bi/products", + "google.bj/products", + "google.bs/products", + "google.by/products", + "google.ca/products", + "google.cat/products", + "google.cc/products", + "google.cd/products", + "google.cf/products", + "google.cg/products", + "google.ch/products", + "google.ci/products", + "google.cl/products", + "google.cm/products", + "google.cn/products", + "google.co.bw/products", + "google.co.ck/products", + "google.co.cr/products", + "google.co.id/products", + "google.co.il/products", + "google.co.in/products", + "google.co.jp/products", + "google.co.ke/products", + "google.co.kr/products", + "google.co.ls/products", + "google.co.ma/products", + "google.co.mz/products", + "google.co.nz/products", + "google.co.th/products", + "google.co.tz/products", + "google.co.ug/products", + "google.co.uk/products", + "google.co.uz/products", + "google.co.ve/products", + "google.co.vi/products", + "google.co.za/products", + "google.co.zm/products", + "google.co.zw/products", + "google.com/products", + "google.com.af/products", + "google.com.ag/products", + "google.com.ai/products", + "google.com.ar/products", + "google.com.au/products", + "google.com.bd/products", + "google.com.bh/products", + "google.com.bn/products", + "google.com.bo/products", + "google.com.br/products", + "google.com.by/products", + "google.com.bz/products", + "google.com.co/products", + "google.com.cu/products", + "google.com.cy/products", + "google.com.do/products", + "google.com.ec/products", + "google.com.eg/products", + "google.com.et/products", + "google.com.fj/products", + "google.com.gh/products", + "google.com.gi/products", + "google.com.gt/products", + "google.com.hk/products", + "google.com.jm/products", + "google.com.kh/products", + "google.com.kh/products", + "google.com.kw/products", + "google.com.lb/products", + "google.com.lc/products", + "google.com.ly/products", + "google.com.mt/products", + "google.com.mx/products", + "google.com.my/products", + "google.com.na/products", + "google.com.nf/products", + "google.com.ng/products", + "google.com.ni/products", + "google.com.np/products", + "google.com.om/products", + "google.com.pa/products", + "google.com.pe/products", + "google.com.ph/products", + "google.com.pk/products", + "google.com.pr/products", + "google.com.py/products", + "google.com.qa/products", + "google.com.sa/products", + "google.com.sb/products", + "google.com.sg/products", + "google.com.sl/products", + "google.com.sv/products", + "google.com.tj/products", + "google.com.tn/products", + "google.com.tr/products", + "google.com.tw/products", + "google.com.ua/products", + "google.com.uy/products", + "google.com.vc/products", + "google.com.vn/products", + "google.cv/products", + "google.cz/products", + "google.de/products", + "google.dj/products", + "google.dk/products", + "google.dm/products", + "google.dz/products", + "google.ee/products", + "google.es/products", + "google.fi/products", + "google.fm/products", + "google.fr/products", + "google.ga/products", + "google.gd/products", + "google.ge/products", + "google.gf/products", + "google.gg/products", + "google.gl/products", + "google.gm/products", + "google.gp/products", + "google.gr/products", + "google.gy/products", + "google.hn/products", + "google.hr/products", + "google.ht/products", + "google.hu/products", + "google.ie/products", + "google.im/products", + "google.io/products", + "google.iq/products", + "google.is/products", + "google.it/products", + "google.it.ao/products", + "google.je/products", + "google.jo/products", + "google.kg/products", + "google.ki/products", + "google.kz/products", + "google.la/products", + "google.li/products", + "google.lk/products", + "google.lt/products", + "google.lu/products", + "google.lv/products", + "google.md/products", + "google.me/products", + "google.mg/products", + "google.mk/products", + "google.ml/products", + "google.mn/products", + "google.ms/products", + "google.mu/products", + "google.mv/products", + "google.mw/products", + "google.ne/products", + "google.nl/products", + "google.no/products", + "google.nr/products", + "google.nu/products", + "google.pl/products", + "google.pn/products", + "google.ps/products", + "google.pt/products", + "google.ro/products", + "google.rs/products", + "google.ru/products", + "google.rw/products", + "google.sc/products", + "google.se/products", + "google.sh/products", + "google.si/products", + "google.sk/products", + "google.sm/products", + "google.sn/products", + "google.so/products", + "google.st/products", + "google.td/products", + "google.tg/products", + "google.tk/products", + "google.tl/products", + "google.tm/products", + "google.to/products", + "google.tt/products", + "google.us/products", + "google.vg/products", + "google.vu/products", + "google.ws/products", + "www.google.ac/products", + "www.google.ad/products", + "www.google.ae/products", + "www.google.am/products", + "www.google.as/products", + "www.google.at/products", + "www.google.az/products", + "www.google.ba/products", + "www.google.be/products", + "www.google.bf/products", + "www.google.bg/products", + "www.google.bi/products", + "www.google.bj/products", + "www.google.bs/products", + "www.google.by/products", + "www.google.ca/products", + "www.google.cat/products", + "www.google.cc/products", + "www.google.cd/products", + "www.google.cf/products", + "www.google.cg/products", + "www.google.ch/products", + "www.google.ci/products", + "www.google.cl/products", + "www.google.cm/products", + "www.google.cn/products", + "www.google.co.bw/products", + "www.google.co.ck/products", + "www.google.co.cr/products", + "www.google.co.id/products", + "www.google.co.il/products", + "www.google.co.in/products", + "www.google.co.jp/products", + "www.google.co.ke/products", + "www.google.co.kr/products", + "www.google.co.ls/products", + "www.google.co.ma/products", + "www.google.co.mz/products", + "www.google.co.nz/products", + "www.google.co.th/products", + "www.google.co.tz/products", + "www.google.co.ug/products", + "www.google.co.uk/products", + "www.google.co.uz/products", + "www.google.co.ve/products", + "www.google.co.vi/products", + "www.google.co.za/products", + "www.google.co.zm/products", + "www.google.co.zw/products", + "www.google.com/products", + "www.google.com.af/products", + "www.google.com.ag/products", + "www.google.com.ai/products", + "www.google.com.ar/products", + "www.google.com.au/products", + "www.google.com.bd/products", + "www.google.com.bh/products", + "www.google.com.bn/products", + "www.google.com.bo/products", + "www.google.com.br/products", + "www.google.com.by/products", + "www.google.com.bz/products", + "www.google.com.co/products", + "www.google.com.cu/products", + "www.google.com.cy/products", + "www.google.com.do/products", + "www.google.com.ec/products", + "www.google.com.eg/products", + "www.google.com.et/products", + "www.google.com.fj/products", + "www.google.com.gh/products", + "www.google.com.gi/products", + "www.google.com.gt/products", + "www.google.com.hk/products", + "www.google.com.jm/products", + "www.google.com.kh/products", + "www.google.com.kh/products", + "www.google.com.kw/products", + "www.google.com.lb/products", + "www.google.com.lc/products", + "www.google.com.ly/products", + "www.google.com.mt/products", + "www.google.com.mx/products", + "www.google.com.my/products", + "www.google.com.na/products", + "www.google.com.nf/products", + "www.google.com.ng/products", + "www.google.com.ni/products", + "www.google.com.np/products", + "www.google.com.om/products", + "www.google.com.pa/products", + "www.google.com.pe/products", + "www.google.com.ph/products", + "www.google.com.pk/products", + "www.google.com.pr/products", + "www.google.com.py/products", + "www.google.com.qa/products", + "www.google.com.sa/products", + "www.google.com.sb/products", + "www.google.com.sg/products", + "www.google.com.sl/products", + "www.google.com.sv/products", + "www.google.com.tj/products", + "www.google.com.tn/products", + "www.google.com.tr/products", + "www.google.com.tw/products", + "www.google.com.ua/products", + "www.google.com.uy/products", + "www.google.com.vc/products", + "www.google.com.vn/products", + "www.google.cv/products", + "www.google.cz/products", + "www.google.de/products", + "www.google.dj/products", + "www.google.dk/products", + "www.google.dm/products", + "www.google.dz/products", + "www.google.ee/products", + "www.google.es/products", + "www.google.fi/products", + "www.google.fm/products", + "www.google.fr/products", + "www.google.ga/products", + "www.google.gd/products", + "www.google.ge/products", + "www.google.gf/products", + "www.google.gg/products", + "www.google.gl/products", + "www.google.gm/products", + "www.google.gp/products", + "www.google.gr/products", + "www.google.gy/products", + "www.google.hn/products", + "www.google.hr/products", + "www.google.ht/products", + "www.google.hu/products", + "www.google.ie/products", + "www.google.im/products", + "www.google.io/products", + "www.google.iq/products", + "www.google.is/products", + "www.google.it/products", + "www.google.it.ao/products", + "www.google.je/products", + "www.google.jo/products", + "www.google.kg/products", + "www.google.ki/products", + "www.google.kz/products", + "www.google.la/products", + "www.google.li/products", + "www.google.lk/products", + "www.google.lt/products", + "www.google.lu/products", + "www.google.lv/products", + "www.google.md/products", + "www.google.me/products", + "www.google.mg/products", + "www.google.mk/products", + "www.google.ml/products", + "www.google.mn/products", + "www.google.ms/products", + "www.google.mu/products", + "www.google.mv/products", + "www.google.mw/products", + "www.google.ne/products", + "www.google.nl/products", + "www.google.no/products", + "www.google.nr/products", + "www.google.nu/products", + "www.google.pl/products", + "www.google.pn/products", + "www.google.ps/products", + "www.google.pt/products", + "www.google.ro/products", + "www.google.rs/products", + "www.google.ru/products", + "www.google.rw/products", + "www.google.sc/products", + "www.google.se/products", + "www.google.sh/products", + "www.google.si/products", + "www.google.sk/products", + "www.google.sm/products", + "www.google.sn/products", + "www.google.so/products", + "www.google.st/products", + "www.google.td/products", + "www.google.tg/products", + "www.google.tk/products", + "www.google.tl/products", + "www.google.tm/products", + "www.google.to/products", + "www.google.tt/products", + "www.google.us/products", + "www.google.vg/products", + "www.google.vu/products", + "www.google.ws/products" + ], + "parameters": [ + "q" + ] + }, + "DasOertliche": { + "domains": [ + "www.dasoertliche.de" + ], + "parameters": [ + "kw" + ] + }, + "InfoSpace": { + "domains": [ + "infospace.com", + "dogpile.com", + "www.dogpile.com", + "metacrawler.com", + "webfetch.com", + "webcrawler.com", + "search.kiwee.com", + "isearch.babylon.com", + "start.facemoods.com", + "search.magnetic.com", + "search.searchcompletion.com", + "clusty.com" + ], + "parameters": [ + "q", + "s" + ] + }, + "Weborama": { + "domains": [ + "www.weborama.com" + ], + "parameters": [ + "QUERY" + ] + }, + "Bluewin": { + "domains": [ + "search.bluewin.ch" + ], + "parameters": [ + "searchTerm" + ] + }, + "Neti": { + "domains": [ + "www.neti.ee" + ], + "parameters": [ + "query" + ] + }, + "Winamp": { + "domains": [ + "search.winamp.com" + ], + "parameters": [ + "q" + ] + }, + "Nigma": { + "domains": [ + "nigma.ru" + ], + "parameters": [ + "s" + ] + }, + "Yahoo! Images": { + "domains": [ + "image.yahoo.cn", + "images.search.yahoo.com" + ], + "parameters": [ + "p", + "q" + ] + }, + "Exalead": { + "domains": [ + "www.exalead.fr", + "www.exalead.com" + ], + "parameters": [ + "q" + ] + }, + "Teoma": { + "domains": [ + "www.teoma.com" + ], + "parameters": [ + "q" + ] + }, + "Needtofind": { + "domains": [ + "ko.search.need2find.com" + ], + "parameters": [ + "searchfor" + ] + }, + "Looksmart": { + "domains": [ + "www.looksmart.com" + ], + "parameters": [ + "key" + ] + }, + "Wirtualna Polska": { + "domains": [ + "szukaj.wp.pl" + ], + "parameters": [ + "szukaj" + ] + }, + "Toolbarhome": { + "domains": [ + "www.toolbarhome.com", + "vshare.toolbarhome.com" + ], + "parameters": [ + "q" + ] + }, + "Searchalot": { + "domains": [ + "searchalot.com" + ], + "parameters": [ + "q" + ] + }, + "Yandex": { + "domains": [ + "yandex.ru", + "yandex.ua", + "yandex.com", + "yandex.by", + "www.yandex.ru", + "www.yandex.ua", + "www.yandex.com", + "www.yandex.by" + ], + "parameters": [ + "text" + ] + }, + "canoe.ca": { + "domains": [ + "web.canoe.ca" + ], + "parameters": [ + "q" + ] + }, + "Compuserve": { + "domains": [ + "websearch.cs.com" + ], + "parameters": [ + "query" + ] + }, + "Blogdigger": { + "domains": [ + "www.blogdigger.com" + ], + "parameters": [ + "q" + ] + }, + "Startpagina": { + "domains": [ + "startgoogle.startpagina.nl" + ], + "parameters": [ + "q" + ] + }, + "eo": { + "domains": [ + "eo.st" + ], + "parameters": [ + "x_query" + ] + }, + "Zhongsou": { + "domains": [ + "p.zhongsou.com" + ], + "parameters": [ + "w" + ] + }, + "La Toile Du Quebec Via Google": { + "domains": [ + "www.toile.com", + "web.toile.com" + ], + "parameters": [ + "q" + ] + }, + "Paperball": { + "domains": [ + "www.paperball.de" + ], + "parameters": [ + "q" + ] + }, + "Jungle Spider": { + "domains": [ + "www.jungle-spider.de" + ], + "parameters": [ + "q" + ] + }, + "PeoplePC": { + "domains": [ + "search.peoplepc.com" + ], + "parameters": [ + "q" + ] + }, + "MetaCrawler.de": { + "domains": [ + "s1.metacrawler.de", + "s2.metacrawler.de", + "s3.metacrawler.de" + ], + "parameters": [ + "qry" + ] + }, + "Orange": { + "domains": [ + "busca.orange.es", + "search.orange.co.uk" + ], + "parameters": [ + "q" + ] + }, + "Gule Sider": { + "domains": [ + "www.gulesider.no" + ], + "parameters": [ + "q" + ] + }, + "Francite": { + "domains": [ + "recherche.francite.com" + ], + "parameters": [ + "name" + ] + }, + "Ask Toolbar": { + "domains": [ + "search.tb.ask.com" + ], + "parameters": [ + "searchfor" + ] + }, + "Trusted-Search": { + "domains": [ + "www.trusted--search.com" + ], + "parameters": [ + "w" + ] + }, + "goo": { + "domains": [ + "search.goo.ne.jp", + "ocnsearch.goo.ne.jp" + ], + "parameters": [ + "MT" + ] + }, + "Fast Browser Search": { + "domains": [ + "www.fastbrowsersearch.com" + ], + "parameters": [ + "q" + ] + }, + "Blogpulse": { + "domains": [ + "www.blogpulse.com" + ], + "parameters": [ + "query" + ] + }, + "Volny": { + "domains": [ + "web.volny.cz" + ], + "parameters": [ + "search" + ] + }, + "Icerockeet": { + "domains": [ + "blogs.icerocket.com" + ], + "parameters": [ + "q" + ] + }, + "Terra": { + "domains": [ + "buscador.terra.es", + "buscador.terra.cl", + "buscador.terra.com.br" + ], + "parameters": [ + "query" + ] + }, + "Amazon": { + "domains": [ + "amazon.com", + "www.amazon.com" + ], + "parameters": [ + "keywords" + ] + }, + "Onet": { + "domains": [ + "szukaj.onet.pl" + ], + "parameters": [ + "qt" + ] + }, + "Digg": { + "domains": [ + "digg.com" + ], + "parameters": [ + "s" + ] + }, + "Abacho": { + "domains": [ + "www.abacho.de", + "www.abacho.com", + "www.abacho.co.uk", + "www.se.abacho.com", + "www.tr.abacho.com", + "www.abacho.at", + "www.abacho.fr", + "www.abacho.es", + "www.abacho.ch", + "www.abacho.it" + ], + "parameters": [ + "q" + ] + }, + "maailm": { + "domains": [ + "www.maailm.com" + ], + "parameters": [ + "tekst" + ] + }, + "Flix": { + "domains": [ + "www.flix.de" + ], + "parameters": [ + "keyword" + ] + }, + "Suchnase": { + "domains": [ + "www.suchnase.de" + ], + "parameters": [ + "q" + ] + }, + "Freenet": { + "domains": [ + "suche.freenet.de" + ], + "parameters": [ + "query", + "Keywords" + ] + }, + "Poisk.ru": { + "domains": [ + "www.plazoo.com" + ], + "parameters": [ + "q" + ] + }, + "Sharelook": { + "domains": [ + "www.sharelook.fr" + ], + "parameters": [ + "keyword" + ] + }, + "Najdi": { + "domains": [ + "www.najdi.si" + ], + "parameters": [ + "q" + ] + }, + "Picsearch": { + "domains": [ + "www.picsearch.com" + ], + "parameters": [ + "q" + ] + }, + "Mail.ru": { + "domains": [ + "go.mail.ru" + ], + "parameters": [ + "q" + ] + }, + "Alexa": { + "domains": [ + "alexa.com", + "search.toolbars.alexa.com" + ], + "parameters": [ + "q" + ] + }, + "Metager": { + "domains": [ + "meta.rrzn.uni-hannover.de", + "www.metager.de" + ], + "parameters": [ + "eingabe" + ] + }, + "Technorati": { + "domains": [ + "technorati.com" + ], + "parameters": [ + "q" + ] + }, + "Globososo": { + "domains": [ + "searches.globososo.com", + "search.globososo.com" + ], + "parameters": [ + "q" + ] + }, + "WWW": { + "domains": [ + "search.www.ee" + ], + "parameters": [ + "query" + ] + }, + "Trouvez.com": { + "domains": [ + "www.trouvez.com" + ], + "parameters": [ + "query" + ] + }, + "IXquick": { + "domains": [ + "ixquick.com", + "www.eu.ixquick.com", + "ixquick.de", + "www.ixquick.de", + "us.ixquick.com", + "s1.us.ixquick.com", + "s2.us.ixquick.com", + "s3.us.ixquick.com", + "s4.us.ixquick.com", + "s5.us.ixquick.com", + "eu.ixquick.com", + "s8-eu.ixquick.com", + "s1-eu.ixquick.de" + ], + "parameters": [ + "query" + ] + }, + "Naver Images": { + "domains": [ + "image.search.naver.com", + "imagesearch.naver.com" + ], + "parameters": [ + "query" + ] + }, + "Zapmeta": { + "domains": [ + "www.zapmeta.com", + "www.zapmeta.nl", + "www.zapmeta.de", + "uk.zapmeta.com" + ], + "parameters": [ + "q", + "query" + ] + }, + "Yippy": { + "domains": [ + "search.yippy.com" + ], + "parameters": [ + "q", + "query" + ] + }, + "Gomeo": { + "domains": [ + "www.gomeo.com" + ], + "parameters": [ + "Keywords" + ] + }, + "Walhello": { + "domains": [ + "www.walhello.info", + "www.walhello.com", + "www.walhello.de", + "www.walhello.nl" + ], + "parameters": [ + "key" + ] + }, + "Meta": { + "domains": [ + "meta.ua" + ], + "parameters": [ + "q" + ] + }, + "Skynet": { + "domains": [ + "www.skynet.be" + ], + "parameters": [ + "q" + ] + }, + "Searchy": { + "domains": [ + "www.searchy.co.uk" + ], + "parameters": [ + "q" + ] + }, + "Findwide": { + "domains": [ + "search.findwide.com" + ], + "parameters": [ + "k" + ] + }, + "WebSearch": { + "domains": [ + "www.websearch.com" + ], + "parameters": [ + "qkw", + "q" + ] + }, + "Rambler": { + "domains": [ + "nova.rambler.ru" + ], + "parameters": [ + "query", + "words" + ] + }, + "Latne": { + "domains": [ + "www.latne.lv" + ], + "parameters": [ + "q" + ] + }, + "MySearch": { + "domains": [ + "www.mysearch.com", + "ms114.mysearch.com", + "ms146.mysearch.com", + "kf.mysearch.myway.com", + "ki.mysearch.myway.com", + "search.myway.com", + "search.mywebsearch.com" + ], + "parameters": [ + "searchfor", + "searchFor" + ] + }, + "Cuil": { + "domains": [ + "www.cuil.com" + ], + "parameters": [ + "q" + ] + }, + "Tixuma": { + "domains": [ + "www.tixuma.de" + ], + "parameters": [ + "sc" + ] + }, + "Sapo": { + "domains": [ + "pesquisa.sapo.pt" + ], + "parameters": [ + "q" + ] + }, + "Gnadenmeer": { + "domains": [ + "www.gnadenmeer.de" + ], + "parameters": [ + "keyword" + ] + }, + "Arcor": { + "domains": [ + "www.arcor.de" + ], + "parameters": [ + "Keywords" + ] + }, + "Naver": { + "domains": [ + "search.naver.com" + ], + "parameters": [ + "query" + ] + }, + "Zoeken": { + "domains": [ + "www.zoeken.nl" + ], + "parameters": [ + "q" + ] + }, + "Startsiden": { + "domains": [ + "www.startsiden.no" + ], + "parameters": [ + "q" + ] + }, + "Yam": { + "domains": [ + "search.yam.com" + ], + "parameters": [ + "k" + ] + }, + "Eniro": { + "domains": [ + "www.eniro.se" + ], + "parameters": [ + "q", + "search_word" + ] + }, + "APOLL07": { + "domains": [ + "apollo7.de" + ], + "parameters": [ + "query" + ] + }, + "Biglobe": { + "domains": [ + "cgi.search.biglobe.ne.jp" + ], + "parameters": [ + "q" + ] + }, + "Mozbot": { + "domains": [ + "www.mozbot.fr", + "www.mozbot.co.uk", + "www.mozbot.com" + ], + "parameters": [ + "q" + ] + }, + "ICQ": { + "domains": [ + "www.icq.com", + "search.icq.com" + ], + "parameters": [ + "q" + ] + }, + "Baidu": { + "domains": [ + "www.baidu.com", + "www1.baidu.com", + "zhidao.baidu.com", + "tieba.baidu.com", + "news.baidu.com", + "web.gougou.com" + ], + "parameters": [ + "wd", + "word", + "kw", + "k" + ] + }, + "Conduit": { + "domains": [ + "search.conduit.com" + ], + "parameters": [ + "q" + ] + }, + "Vindex": { + "domains": [ + "www.vindex.nl", + "search.vindex.nl" + ], + "parameters": [ + "search_for" + ] + }, + "Babylon": { + "domains": [ + "search.babylon.com", + "searchassist.babylon.com" + ], + "parameters": [ + "q" + ] + }, + "TrovaRapido": { + "domains": [ + "www.trovarapido.com" + ], + "parameters": [ + "q" + ] + }, + "Suchmaschine.com": { + "domains": [ + "www.suchmaschine.com" + ], + "parameters": [ + "suchstr" + ] + }, + "Lycos": { + "domains": [ + "search.lycos.com", + "www.lycos.com", + "lycos.com" + ], + "parameters": [ + "query" + ] + }, + "Vinden": { + "domains": [ + "www.vinden.nl" + ], + "parameters": [ + "q" + ] + }, + "Altavista": { + "domains": [ + "www.altavista.com", + "search.altavista.com", + "listings.altavista.com", + "altavista.de", + "altavista.fr", + "be-nl.altavista.com", + "be-fr.altavista.com" + ], + "parameters": [ + "q" + ] + }, + "dmoz": { + "domains": [ + "dmoz.org", + "editors.dmoz.org" + ], + "parameters": [ + "q" + ] + }, + "Ecosia": { + "domains": [ + "ecosia.org" + ], + "parameters": [ + "q" + ] + }, + "Maxwebsearch": { + "domains": [ + "maxwebsearch.com" + ], + "parameters": [ + "query" + ] + }, + "Euroseek": { + "domains": [ + "www.euroseek.com" + ], + "parameters": [ + "string" + ] + }, + "Bing": { + "domains": [ + "bing.com", + "www.bing.com", + "msnbc.msn.com", + "dizionario.it.msn.com", + "cc.bingj.com", + "m.bing.com" + ], + "parameters": [ + "q", + "Q" + ] + }, + "X-recherche": { + "domains": [ + "www.x-recherche.com" + ], + "parameters": [ + "MOTS" + ] + }, + "Yandex Images": { + "domains": [ + "images.yandex.ru", + "images.yandex.ua", + "images.yandex.com" + ], + "parameters": [ + "text" + ] + }, + "GMX": { + "domains": [ + "suche.gmx.net" + ], + "parameters": [ + "su" + ] + }, + "Daemon search": { + "domains": [ + "daemon-search.com", + "my.daemon-search.com" + ], + "parameters": [ + "q" + ] + }, + "Jungle Key": { + "domains": [ + "junglekey.com", + "junglekey.fr" + ], + "parameters": [ + "query" + ] + }, + "Firstfind": { + "domains": [ + "www.firstsfind.com" + ], + "parameters": [ + "qry" + ] + }, + "Crawler": { + "domains": [ + "www.crawler.com" + ], + "parameters": [ + "q" + ] + }, + "Holmes": { + "domains": [ + "holmes.ge" + ], + "parameters": [ + "q" + ] + }, + "Charter": { + "domains": [ + "www.charter.net" + ], + "parameters": [ + "q" + ] + }, + "Ilse": { + "domains": [ + "www.ilse.nl" + ], + "parameters": [ + "search_for" + ] + }, + "earthlink": { + "domains": [ + "search.earthlink.net" + ], + "parameters": [ + "q" + ] + }, + "Qualigo": { + "domains": [ + "www.qualigo.at", + "www.qualigo.ch", + "www.qualigo.de", + "www.qualigo.nl" + ], + "parameters": [ + "q" + ] + }, + "El Mundo": { + "domains": [ + "ariadna.elmundo.es" + ], + "parameters": [ + "q" + ] + }, + "Metager2": { + "domains": [ + "metager2.de" + ], + "parameters": [ + "q" + ] + }, + "Forestle": { + "domains": [ + "forestle.org", + "www.forestle.org", + "forestle.mobi" + ], + "parameters": [ + "q" + ] + }, + "Search.ch": { + "domains": [ + "www.search.ch" + ], + "parameters": [ + "q" + ] + }, + "Meinestadt": { + "domains": [ + "www.meinestadt.de" + ], + "parameters": [ + "words" + ] + }, + "Freshweather": { + "domains": [ + "www.fresh-weather.com" + ], + "parameters": [ + "q" + ] + }, + "AllTheWeb": { + "domains": [ + "www.alltheweb.com" + ], + "parameters": [ + "q" + ] + }, + "Snapdo": { + "domains": [ + "search.snapdo.com" + ], + "parameters": [ + "q" + ] + }, + "Zoek": { + "domains": [ + "www3.zoek.nl" + ], + "parameters": [ + "q" + ] + }, + "Daum": { + "domains": [ + "search.daum.net" + ], + "parameters": [ + "q" + ] + }, + "Marktplaats": { + "domains": [ + "www.marktplaats.nl" + ], + "parameters": [ + "query" + ] + }, + "suche.info": { + "domains": [ + "suche.info" + ], + "parameters": [ + "q" + ] + }, + "Google News": { + "domains": [ + "news.google.ac", + "news.google.ad", + "news.google.ae", + "news.google.am", + "news.google.as", + "news.google.at", + "news.google.az", + "news.google.ba", + "news.google.be", + "news.google.bf", + "news.google.bg", + "news.google.bi", + "news.google.bj", + "news.google.bs", + "news.google.by", + "news.google.ca", + "news.google.cat", + "news.google.cc", + "news.google.cd", + "news.google.cf", + "news.google.cg", + "news.google.ch", + "news.google.ci", + "news.google.cl", + "news.google.cm", + "news.google.cn", + "news.google.co.bw", + "news.google.co.ck", + "news.google.co.cr", + "news.google.co.id", + "news.google.co.il", + "news.google.co.in", + "news.google.co.jp", + "news.google.co.ke", + "news.google.co.kr", + "news.google.co.ls", + "news.google.co.ma", + "news.google.co.mz", + "news.google.co.nz", + "news.google.co.th", + "news.google.co.tz", + "news.google.co.ug", + "news.google.co.uk", + "news.google.co.uz", + "news.google.co.ve", + "news.google.co.vi", + "news.google.co.za", + "news.google.co.zm", + "news.google.co.zw", + "news.google.com", + "news.google.com.af", + "news.google.com.ag", + "news.google.com.ai", + "news.google.com.ar", + "news.google.com.au", + "news.google.com.bd", + "news.google.com.bh", + "news.google.com.bn", + "news.google.com.bo", + "news.google.com.br", + "news.google.com.by", + "news.google.com.bz", + "news.google.com.co", + "news.google.com.cu", + "news.google.com.cy", + "news.google.com.do", + "news.google.com.ec", + "news.google.com.eg", + "news.google.com.et", + "news.google.com.fj", + "news.google.com.gh", + "news.google.com.gi", + "news.google.com.gt", + "news.google.com.hk", + "news.google.com.jm", + "news.google.com.kh", + "news.google.com.kh", + "news.google.com.kw", + "news.google.com.lb", + "news.google.com.lc", + "news.google.com.ly", + "news.google.com.mt", + "news.google.com.mx", + "news.google.com.my", + "news.google.com.na", + "news.google.com.nf", + "news.google.com.ng", + "news.google.com.ni", + "news.google.com.np", + "news.google.com.om", + "news.google.com.pa", + "news.google.com.pe", + "news.google.com.ph", + "news.google.com.pk", + "news.google.com.pr", + "news.google.com.py", + "news.google.com.qa", + "news.google.com.sa", + "news.google.com.sb", + "news.google.com.sg", + "news.google.com.sl", + "news.google.com.sv", + "news.google.com.tj", + "news.google.com.tn", + "news.google.com.tr", + "news.google.com.tw", + "news.google.com.ua", + "news.google.com.uy", + "news.google.com.vc", + "news.google.com.vn", + "news.google.cv", + "news.google.cz", + "news.google.de", + "news.google.dj", + "news.google.dk", + "news.google.dm", + "news.google.dz", + "news.google.ee", + "news.google.es", + "news.google.fi", + "news.google.fm", + "news.google.fr", + "news.google.ga", + "news.google.gd", + "news.google.ge", + "news.google.gf", + "news.google.gg", + "news.google.gl", + "news.google.gm", + "news.google.gp", + "news.google.gr", + "news.google.gy", + "news.google.hn", + "news.google.hr", + "news.google.ht", + "news.google.hu", + "news.google.ie", + "news.google.im", + "news.google.io", + "news.google.iq", + "news.google.is", + "news.google.it", + "news.google.it.ao", + "news.google.je", + "news.google.jo", + "news.google.kg", + "news.google.ki", + "news.google.kz", + "news.google.la", + "news.google.li", + "news.google.lk", + "news.google.lt", + "news.google.lu", + "news.google.lv", + "news.google.md", + "news.google.me", + "news.google.mg", + "news.google.mk", + "news.google.ml", + "news.google.mn", + "news.google.ms", + "news.google.mu", + "news.google.mv", + "news.google.mw", + "news.google.ne", + "news.google.nl", + "news.google.no", + "news.google.nr", + "news.google.nu", + "news.google.pl", + "news.google.pn", + "news.google.ps", + "news.google.pt", + "news.google.ro", + "news.google.rs", + "news.google.ru", + "news.google.rw", + "news.google.sc", + "news.google.se", + "news.google.sh", + "news.google.si", + "news.google.sk", + "news.google.sm", + "news.google.sn", + "news.google.so", + "news.google.st", + "news.google.td", + "news.google.tg", + "news.google.tk", + "news.google.tl", + "news.google.tm", + "news.google.to", + "news.google.tt", + "news.google.us", + "news.google.vg", + "news.google.vu", + "news.google.ws" + ], + "parameters": [ + "q" + ] + }, + "Zoohoo": { + "domains": [ + "zoohoo.cz" + ], + "parameters": [ + "q" + ] + }, + "Seznam": { + "domains": [ + "search.seznam.cz" + ], + "parameters": [ + "q" + ] + }, + "Online.no": { + "domains": [ + "online.no" + ], + "parameters": [ + "q" + ] + }, + "Eurip": { + "domains": [ + "www.eurip.com" + ], + "parameters": [ + "q" + ] + }, + "all.by": { + "domains": [ + "all.by" + ], + "parameters": [ + "query" + ] + }, + "Road Runner Search": { + "domains": [ + "search.rr.com" + ], + "parameters": [ + "q" + ] + }, + "Opplysningen 1881": { + "domains": [ + "www.1881.no" + ], + "parameters": [ + "Query" + ] + }, + "YouGoo": { + "domains": [ + "www.yougoo.fr" + ], + "parameters": [ + "q" + ] + }, + "Bing Images": { + "domains": [ + "bing.com/images/search", + "www.bing.com/images/search" + ], + "parameters": [ + "q", + "Q" + ] + }, + "Geona": { + "domains": [ + "geona.net" + ], + "parameters": [ + "q" + ] + }, + "Nate": { + "domains": [ + "search.nate.com" + ], + "parameters": [ + "q" + ] + }, + "DuckDuckGo": { + "domains": [ + "duckduckgo.com" + ], + "parameters": [ + "q" + ] + }, + "Hotbot": { + "domains": [ + "www.hotbot.com" + ], + "parameters": [ + "query" + ] + }, + "Kvasir": { + "domains": [ + "www.kvasir.no" + ], + "parameters": [ + "q" + ] + }, + "Austronaut": { + "domains": [ + "www2.austronaut.at", + "www1.astronaut.at" + ], + "parameters": [ + "q" + ] + }, + "Excite": { + "domains": [ + "search.excite.it", + "search.excite.fr", + "search.excite.de", + "search.excite.co.uk", + "serach.excite.es", + "search.excite.nl", + "msxml.excite.com", + "www.excite.co.jp" + ], + "parameters": [ + "q", + "search" + ] + }, + "qip": { + "domains": [ + "search.qip.ru" + ], + "parameters": [ + "query" + ] + }, + "Certified-Toolbar": { + "domains": [ + "search.certified-toolbar.com" + ], + "parameters": [ + "q" + ] + }, + "Yahoo!": { + "domains": [ + "search.yahoo.com", + "yahoo.com", + "ar.search.yahoo.com", + "ar.yahoo.com", + "au.search.yahoo.com", + "au.yahoo.com", + "br.search.yahoo.com", + "br.yahoo.com", + "cade.searchde.yahoo.com", + "cade.yahoo.com", + "chinese.searchinese.yahoo.com", + "chinese.yahoo.com", + "cn.search.yahoo.com", + "cn.yahoo.com", + "de.search.yahoo.com", + "de.yahoo.com", + "dk.search.yahoo.com", + "dk.yahoo.com", + "es.search.yahoo.com", + "es.yahoo.com", + "espanol.searchpanol.yahoo.com", + "espanol.searchpanol.yahoo.com", + "espanol.yahoo.com", + "espanol.yahoo.com", + "fr.search.yahoo.com", + "fr.yahoo.com", + "ie.search.yahoo.com", + "ie.yahoo.com", + "it.search.yahoo.com", + "it.yahoo.com", + "kr.search.yahoo.com", + "kr.yahoo.com", + "mx.search.yahoo.com", + "mx.yahoo.com", + "no.search.yahoo.com", + "no.yahoo.com", + "nz.search.yahoo.com", + "nz.yahoo.com", + "one.cn.yahoo.com", + "one.searchn.yahoo.com", + "qc.search.yahoo.com", + "qc.search.yahoo.com", + "qc.search.yahoo.com", + "qc.yahoo.com", + "qc.yahoo.com", + "se.search.yahoo.com", + "se.search.yahoo.com", + "se.yahoo.com", + "search.searcharch.yahoo.com", + "search.yahoo.com", + "uk.search.yahoo.com", + "uk.yahoo.com", + "www.yahoo.co.jp", + "search.yahoo.co.jp", + "www.cercato.it", + "search.offerbox.com", + "ys.mirostart.com" + ], + "parameters": [ + "p", + "q" + ] + }, + "URL.ORGanizier": { + "domains": [ + "www.url.org" + ], + "parameters": [ + "q" + ] + }, + "Witch": { + "domains": [ + "www.witch.de" + ], + "parameters": [ + "search" + ] + }, + "Mister Wong": { + "domains": [ + "www.mister-wong.com", + "www.mister-wong.de" + ], + "parameters": [ + "Keywords" + ] + }, + "Aport": { + "domains": [ + "sm.aport.ru" + ], + "parameters": [ + "r" + ] + }, + "Web.de": { + "domains": [ + "suche.web.de" + ], + "parameters": [ + "su" + ] + }, + "Ask": { + "domains": [ + "ask.com", + "www.ask.com", + "web.ask.com", + "int.ask.com", + "mws.ask.com", + "uk.ask.com", + "images.ask.com", + "ask.reference.com", + "www.askkids.com", + "iwon.ask.com", + "www.ask.co.uk", + "www.qbyrd.com", + "search-results.com", + "uk.search-results.com", + "www.search-results.com", + "int.search-results.com" + ], + "parameters": [ + "q" + ] + }, + "Centrum": { + "domains": [ + "serach.centrum.cz", + "morfeo.centrum.cz" + ], + "parameters": [ + "q" + ] + }, + "Everyclick": { + "domains": [ + "www.everyclick.com" + ], + "parameters": [ + "keyword" + ] + }, + "Google Video": { + "domains": [ + "video.google.com" + ], + "parameters": [ + "q" + ] + }, + "Delfi": { + "domains": [ + "otsing.delfi.ee" + ], + "parameters": [ + "q" + ] + }, + "blekko": { + "domains": [ + "blekko.com" + ], + "parameters": [ + "q" + ] + }, + "Jyxo": { + "domains": [ + "jyxo.1188.cz" + ], + "parameters": [ + "q" + ] + }, + "Kataweb": { + "domains": [ + "www.kataweb.it" + ], + "parameters": [ + "q" + ] + }, + "uol.com.br": { + "domains": [ + "busca.uol.com.br" + ], + "parameters": [ + "q" + ] + }, + "Arianna": { + "domains": [ + "arianna.libero.it", + "www.arianna.com" + ], + "parameters": [ + "query" + ] + }, + "Mamma": { + "domains": [ + "www.mamma.com", + "mamma75.mamma.com" + ], + "parameters": [ + "query" + ] + }, + "Yatedo": { + "domains": [ + "www.yatedo.com", + "www.yatedo.fr" + ], + "parameters": [ + "q" + ] + }, + "Twingly": { + "domains": [ + "www.twingly.com" + ], + "parameters": [ + "q" + ] + }, + "Delfi latvia": { + "domains": [ + "smart.delfi.lv" + ], + "parameters": [ + "q" + ] + }, + "PriceRunner": { + "domains": [ + "www.pricerunner.co.uk" + ], + "parameters": [ + "q" + ] + }, + "Rakuten": { + "domains": [ + "websearch.rakuten.co.jp" + ], + "parameters": [ + "qt" + ] + }, + "Google": { + "domains": [ + "www.google.com", + "www.google.ac", + "www.google.ad", + "www.google.com.af", + "www.google.com.ag", + "www.google.com.ai", + "www.google.am", + "www.google.it.ao", + "www.google.com.ar", + "www.google.as", + "www.google.at", + "www.google.com.au", + "www.google.az", + "www.google.ba", + "www.google.com.bd", + "www.google.be", + "www.google.bf", + "www.google.bg", + "www.google.com.bh", + "www.google.bi", + "www.google.bj", + "www.google.com.bn", + "www.google.com.bo", + "www.google.com.br", + "www.google.bs", + "www.google.co.bw", + "www.google.com.by", + "www.google.by", + "www.google.com.bz", + "www.google.ca", + "www.google.com.kh", + "www.google.cc", + "www.google.cd", + "www.google.cf", + "www.google.cat", + "www.google.cg", + "www.google.ch", + "www.google.ci", + "www.google.co.ck", + "www.google.cl", + "www.google.cm", + "www.google.cn", + "www.google.com.co", + "www.google.co.cr", + "www.google.com.cu", + "www.google.cv", + "www.google.com.cy", + "www.google.cz", + "www.google.de", + "www.google.dj", + "www.google.dk", + "www.google.dm", + "www.google.com.do", + "www.google.dz", + "www.google.com.ec", + "www.google.ee", + "www.google.com.eg", + "www.google.es", + "www.google.com.et", + "www.google.fi", + "www.google.com.fj", + "www.google.fm", + "www.google.fr", + "www.google.ga", + "www.google.gd", + "www.google.ge", + "www.google.gf", + "www.google.gg", + "www.google.com.gh", + "www.google.com.gi", + "www.google.gl", + "www.google.gm", + "www.google.gp", + "www.google.gr", + "www.google.com.gt", + "www.google.gy", + "www.google.com.hk", + "www.google.hn", + "www.google.hr", + "www.google.ht", + "www.google.hu", + "www.google.co.id", + "www.google.iq", + "www.google.ie", + "www.google.co.il", + "www.google.im", + "www.google.co.in", + "www.google.io", + "www.google.is", + "www.google.it", + "www.google.je", + "www.google.com.jm", + "www.google.jo", + "www.google.co.jp", + "www.google.co.ke", + "www.google.com.kh", + "www.google.ki", + "www.google.kg", + "www.google.co.kr", + "www.google.com.kw", + "www.google.kz", + "www.google.la", + "www.google.com.lb", + "www.google.com.lc", + "www.google.li", + "www.google.lk", + "www.google.co.ls", + "www.google.lt", + "www.google.lu", + "www.google.lv", + "www.google.com.ly", + "www.google.co.ma", + "www.google.md", + "www.google.me", + "www.google.mg", + "www.google.mk", + "www.google.ml", + "www.google.mn", + "www.google.ms", + "www.google.com.mt", + "www.google.mu", + "www.google.mv", + "www.google.mw", + "www.google.com.mx", + "www.google.com.my", + "www.google.co.mz", + "www.google.com.na", + "www.google.ne", + "www.google.com.nf", + "www.google.com.ng", + "www.google.com.ni", + "www.google.nl", + "www.google.no", + "www.google.com.np", + "www.google.nr", + "www.google.nu", + "www.google.co.nz", + "www.google.com.om", + "www.google.com.pa", + "www.google.com.pe", + "www.google.com.ph", + "www.google.com.pk", + "www.google.pl", + "www.google.pn", + "www.google.com.pr", + "www.google.ps", + "www.google.pt", + "www.google.com.py", + "www.google.com.qa", + "www.google.ro", + "www.google.rs", + "www.google.ru", + "www.google.rw", + "www.google.com.sa", + "www.google.com.sb", + "www.google.sc", + "www.google.se", + "www.google.com.sg", + "www.google.sh", + "www.google.si", + "www.google.sk", + "www.google.com.sl", + "www.google.sn", + "www.google.sm", + "www.google.so", + "www.google.st", + "www.google.com.sv", + "www.google.td", + "www.google.tg", + "www.google.co.th", + "www.google.com.tj", + "www.google.tk", + "www.google.tl", + "www.google.tm", + "www.google.to", + "www.google.com.tn", + "www.google.com.tr", + "www.google.tt", + "www.google.com.tw", + "www.google.co.tz", + "www.google.com.ua", + "www.google.co.ug", + "www.google.ae", + "www.google.co.uk", + "www.google.us", + "www.google.com.uy", + "www.google.co.uz", + "www.google.com.vc", + "www.google.co.ve", + "www.google.vg", + "www.google.co.vi", + "www.google.com.vn", + "www.google.vu", + "www.google.ws", + "www.google.co.za", + "www.google.co.zm", + "www.google.co.zw", + "google.com", + "google.ac", + "google.ad", + "google.com.af", + "google.com.ag", + "google.com.ai", + "google.am", + "google.it.ao", + "google.com.ar", + "google.as", + "google.at", + "google.com.au", + "google.az", + "google.ba", + "google.com.bd", + "google.be", + "google.bf", + "google.bg", + "google.com.bh", + "google.bi", + "google.bj", + "google.com.bn", + "google.com.bo", + "google.com.br", + "google.bs", + "google.co.bw", + "google.com.by", + "google.by", + "google.com.bz", + "google.ca", + "google.com.kh", + "google.cc", + "google.cd", + "google.cf", + "google.cat", + "google.cg", + "google.ch", + "google.ci", + "google.co.ck", + "google.cl", + "google.cm", + "google.cn", + "google.com.co", + "google.co.cr", + "google.com.cu", + "google.cv", + "google.com.cy", + "google.cz", + "google.de", + "google.dj", + "google.dk", + "google.dm", + "google.com.do", + "google.dz", + "google.com.ec", + "google.ee", + "google.com.eg", + "google.es", + "google.com.et", + "google.fi", + "google.com.fj", + "google.fm", + "google.fr", + "google.ga", + "google.gd", + "google.ge", + "google.gf", + "google.gg", + "google.com.gh", + "google.com.gi", + "google.gl", + "google.gm", + "google.gp", + "google.gr", + "google.com.gt", + "google.gy", + "google.com.hk", + "google.hn", + "google.hr", + "google.ht", + "google.hu", + "google.co.id", + "google.iq", + "google.ie", + "google.co.il", + "google.im", + "google.co.in", + "google.io", + "google.is", + "google.it", + "google.je", + "google.com.jm", + "google.jo", + "google.co.jp", + "google.co.ke", + "google.com.kh", + "google.ki", + "google.kg", + "google.co.kr", + "google.com.kw", + "google.kz", + "google.la", + "google.com.lb", + "google.com.lc", + "google.li", + "google.lk", + "google.co.ls", + "google.lt", + "google.lu", + "google.lv", + "google.com.ly", + "google.co.ma", + "google.md", + "google.me", + "google.mg", + "google.mk", + "google.ml", + "google.mn", + "google.ms", + "google.com.mt", + "google.mu", + "google.mv", + "google.mw", + "google.com.mx", + "google.com.my", + "google.co.mz", + "google.com.na", + "google.ne", + "google.com.nf", + "google.com.ng", + "google.com.ni", + "google.nl", + "google.no", + "google.com.np", + "google.nr", + "google.nu", + "google.co.nz", + "google.com.om", + "google.com.pa", + "google.com.pe", + "google.com.ph", + "google.com.pk", + "google.pl", + "google.pn", + "google.com.pr", + "google.ps", + "google.pt", + "google.com.py", + "google.com.qa", + "google.ro", + "google.rs", + "google.ru", + "google.rw", + "google.com.sa", + "google.com.sb", + "google.sc", + "google.se", + "google.com.sg", + "google.sh", + "google.si", + "google.sk", + "google.com.sl", + "google.sn", + "google.sm", + "google.so", + "google.st", + "google.com.sv", + "google.td", + "google.tg", + "google.co.th", + "google.com.tj", + "google.tk", + "google.tl", + "google.tm", + "google.to", + "google.com.tn", + "google.com.tr", + "google.tt", + "google.com.tw", + "google.co.tz", + "google.com.ua", + "google.co.ug", + "google.ae", + "google.co.uk", + "google.us", + "google.com.uy", + "google.co.uz", + "google.com.vc", + "google.co.ve", + "google.vg", + "google.co.vi", + "google.com.vn", + "google.vu", + "google.ws", + "google.co.za", + "google.co.zm", + "google.co.zw", + "search.avg.com", + "isearch.avg.com", + "www.cnn.com", + "darkoogle.com", + "search.darkoogle.com", + "search.foxtab.com", + "www.gooofullsearch.com", + "search.hiyo.com", + "search.incredimail.com", + "search1.incredimail.com", + "search2.incredimail.com", + "search3.incredimail.com", + "search4.incredimail.com", + "search.incredibar.com", + "search.sweetim.com", + "www.fastweb.it", + "search.juno.com", + "find.tdc.dk", + "searchresults.verizon.com", + "search.walla.co.il", + "search.alot.com", + "www.googleearth.de", + "www.googleearth.fr", + "webcache.googleusercontent.com", + "encrypted.google.com", + "googlesyndicatedsearch.com" + ], + "parameters": [ + "q", + "query", + "Keywords" + ] + }, + "Google Blogsearch": { + "domains": [ + "blogsearch.google.ac", + "blogsearch.google.ad", + "blogsearch.google.ae", + "blogsearch.google.am", + "blogsearch.google.as", + "blogsearch.google.at", + "blogsearch.google.az", + "blogsearch.google.ba", + "blogsearch.google.be", + "blogsearch.google.bf", + "blogsearch.google.bg", + "blogsearch.google.bi", + "blogsearch.google.bj", + "blogsearch.google.bs", + "blogsearch.google.by", + "blogsearch.google.ca", + "blogsearch.google.cat", + "blogsearch.google.cc", + "blogsearch.google.cd", + "blogsearch.google.cf", + "blogsearch.google.cg", + "blogsearch.google.ch", + "blogsearch.google.ci", + "blogsearch.google.cl", + "blogsearch.google.cm", + "blogsearch.google.cn", + "blogsearch.google.co.bw", + "blogsearch.google.co.ck", + "blogsearch.google.co.cr", + "blogsearch.google.co.id", + "blogsearch.google.co.il", + "blogsearch.google.co.in", + "blogsearch.google.co.jp", + "blogsearch.google.co.ke", + "blogsearch.google.co.kr", + "blogsearch.google.co.ls", + "blogsearch.google.co.ma", + "blogsearch.google.co.mz", + "blogsearch.google.co.nz", + "blogsearch.google.co.th", + "blogsearch.google.co.tz", + "blogsearch.google.co.ug", + "blogsearch.google.co.uk", + "blogsearch.google.co.uz", + "blogsearch.google.co.ve", + "blogsearch.google.co.vi", + "blogsearch.google.co.za", + "blogsearch.google.co.zm", + "blogsearch.google.co.zw", + "blogsearch.google.com", + "blogsearch.google.com.af", + "blogsearch.google.com.ag", + "blogsearch.google.com.ai", + "blogsearch.google.com.ar", + "blogsearch.google.com.au", + "blogsearch.google.com.bd", + "blogsearch.google.com.bh", + "blogsearch.google.com.bn", + "blogsearch.google.com.bo", + "blogsearch.google.com.br", + "blogsearch.google.com.by", + "blogsearch.google.com.bz", + "blogsearch.google.com.co", + "blogsearch.google.com.cu", + "blogsearch.google.com.cy", + "blogsearch.google.com.do", + "blogsearch.google.com.ec", + "blogsearch.google.com.eg", + "blogsearch.google.com.et", + "blogsearch.google.com.fj", + "blogsearch.google.com.gh", + "blogsearch.google.com.gi", + "blogsearch.google.com.gt", + "blogsearch.google.com.hk", + "blogsearch.google.com.jm", + "blogsearch.google.com.kh", + "blogsearch.google.com.kh", + "blogsearch.google.com.kw", + "blogsearch.google.com.lb", + "blogsearch.google.com.lc", + "blogsearch.google.com.ly", + "blogsearch.google.com.mt", + "blogsearch.google.com.mx", + "blogsearch.google.com.my", + "blogsearch.google.com.na", + "blogsearch.google.com.nf", + "blogsearch.google.com.ng", + "blogsearch.google.com.ni", + "blogsearch.google.com.np", + "blogsearch.google.com.om", + "blogsearch.google.com.pa", + "blogsearch.google.com.pe", + "blogsearch.google.com.ph", + "blogsearch.google.com.pk", + "blogsearch.google.com.pr", + "blogsearch.google.com.py", + "blogsearch.google.com.qa", + "blogsearch.google.com.sa", + "blogsearch.google.com.sb", + "blogsearch.google.com.sg", + "blogsearch.google.com.sl", + "blogsearch.google.com.sv", + "blogsearch.google.com.tj", + "blogsearch.google.com.tn", + "blogsearch.google.com.tr", + "blogsearch.google.com.tw", + "blogsearch.google.com.ua", + "blogsearch.google.com.uy", + "blogsearch.google.com.vc", + "blogsearch.google.com.vn", + "blogsearch.google.cv", + "blogsearch.google.cz", + "blogsearch.google.de", + "blogsearch.google.dj", + "blogsearch.google.dk", + "blogsearch.google.dm", + "blogsearch.google.dz", + "blogsearch.google.ee", + "blogsearch.google.es", + "blogsearch.google.fi", + "blogsearch.google.fm", + "blogsearch.google.fr", + "blogsearch.google.ga", + "blogsearch.google.gd", + "blogsearch.google.ge", + "blogsearch.google.gf", + "blogsearch.google.gg", + "blogsearch.google.gl", + "blogsearch.google.gm", + "blogsearch.google.gp", + "blogsearch.google.gr", + "blogsearch.google.gy", + "blogsearch.google.hn", + "blogsearch.google.hr", + "blogsearch.google.ht", + "blogsearch.google.hu", + "blogsearch.google.ie", + "blogsearch.google.im", + "blogsearch.google.io", + "blogsearch.google.iq", + "blogsearch.google.is", + "blogsearch.google.it", + "blogsearch.google.it.ao", + "blogsearch.google.je", + "blogsearch.google.jo", + "blogsearch.google.kg", + "blogsearch.google.ki", + "blogsearch.google.kz", + "blogsearch.google.la", + "blogsearch.google.li", + "blogsearch.google.lk", + "blogsearch.google.lt", + "blogsearch.google.lu", + "blogsearch.google.lv", + "blogsearch.google.md", + "blogsearch.google.me", + "blogsearch.google.mg", + "blogsearch.google.mk", + "blogsearch.google.ml", + "blogsearch.google.mn", + "blogsearch.google.ms", + "blogsearch.google.mu", + "blogsearch.google.mv", + "blogsearch.google.mw", + "blogsearch.google.ne", + "blogsearch.google.nl", + "blogsearch.google.no", + "blogsearch.google.nr", + "blogsearch.google.nu", + "blogsearch.google.pl", + "blogsearch.google.pn", + "blogsearch.google.ps", + "blogsearch.google.pt", + "blogsearch.google.ro", + "blogsearch.google.rs", + "blogsearch.google.ru", + "blogsearch.google.rw", + "blogsearch.google.sc", + "blogsearch.google.se", + "blogsearch.google.sh", + "blogsearch.google.si", + "blogsearch.google.sk", + "blogsearch.google.sm", + "blogsearch.google.sn", + "blogsearch.google.so", + "blogsearch.google.st", + "blogsearch.google.td", + "blogsearch.google.tg", + "blogsearch.google.tk", + "blogsearch.google.tl", + "blogsearch.google.tm", + "blogsearch.google.to", + "blogsearch.google.tt", + "blogsearch.google.us", + "blogsearch.google.vg", + "blogsearch.google.vu", + "blogsearch.google.ws" + ], + "parameters": [ + "q" + ] + }, + "Hooseek.com": { + "domains": [ + "www.hooseek.com" + ], + "parameters": [ + "recherche" + ] + }, + "Dalesearch": { + "domains": [ + "www.dalesearch.com" + ], + "parameters": [ + "q" + ] + }, + "Alice Adsl": { + "domains": [ + "rechercher.aliceadsl.fr" + ], + "parameters": [ + "q" + ] + }, + "T-Online": { + "domains": [ + "suche.t-online.de", + "brisbane.t-online.de", + "navigationshilfe.t-online.de" + ], + "parameters": [ + "q" + ] + }, + "soso.com": { + "domains": [ + "www.soso.com" + ], + "parameters": [ + "w" + ] + }, + "Sogou": { + "domains": [ + "www.sougou.com" + ], + "parameters": [ + "query" + ] + }, + "Hit-Parade": { + "domains": [ + "req.-hit-parade.com", + "class.hit-parade.com", + "www.hit-parade.com" + ], + "parameters": [ + "p7" + ] + }, + "SearchCanvas": { + "domains": [ + "www.searchcanvas.com" + ], + "parameters": [ + "q" + ] + }, + "Interia": { + "domains": [ + "www.google.interia.pl" + ], + "parameters": [ + "q" + ] + }, + "Genieo": { + "domains": [ + "search.genieo.com" + ], + "parameters": [ + "q" + ] + }, + "Tiscali": { + "domains": [ + "search.tiscali.it", + "search-dyn.tiscali.it", + "hledani.tiscali.cz" + ], + "parameters": [ + "q", + "key" + ] + }, + "Clix": { + "domains": [ + "pesquisa.clix.pt" + ], + "parameters": [ + "question" + ] + } + }, + "email": { + "Bigpond": { + "domains": [ + "webmail.bigpond.com", + "webmail2.bigpond.com" + ] + }, + "Naver Mail": { + "domains": [ + "mail.naver.com" + ] + }, + "Optus Zoo": { + "domains": [ + "webmail.optuszoo.com.au" + ] + }, + "Seznam Mail": { + "domains": [ + "email.seznam.cz" + ] + }, + "126 Mail": { + "domains": [ + "mail.126.com" + ] + }, + "Outlook.com": { + "domains": [ + "mail.live.com" + ] + }, + "AOL Mail": { + "domains": [ + "mail.aol.com" + ] + }, + "Daum Mail": { + "domains": [ + "mail2.daum.net" + ] + }, + "Yahoo! Mail": { + "domains": [ + "mail.yahoo.net", + "mail.yahoo.com", + "mail.yahoo.co.uk", + "mail.yahoo.co.jp" + ] + }, + "163 Mail": { + "domains": [ + "mail.163.com" + ] + }, + "Orange Webmail": { + "domains": [ + "orange.fr/webmail" + ] + }, + "QQ Mail": { + "domains": [ + "mail.qq.com" + ] + }, + "Mynet Mail": { + "domains": [ + "mail.mynet.com" + ] + }, + "Gmail": { + "domains": [ + "mail.google.com" + ] + } + }, + "social": { + "hi5": { + "domains": [ + "hi5.com" + ] + }, + "Friendster": { + "domains": [ + "friendster.com" + ] + }, + "Weibo": { + "domains": [ + "weibo.com", + "t.cn" + ] + }, + "Xanga": { + "domains": [ + "xanga.com" + ] + }, + "Myspace": { + "domains": [ + "myspace.com" + ] + }, + "Buzznet": { + "domains": [ + "wayn.com" + ] + }, + "MyLife": { + "domains": [ + "mylife.ru" + ] + }, + "Flickr": { + "domains": [ + "flickr.com" + ] + }, + "Sonico.com": { + "domains": [ + "sonico.com" + ] + }, + "Odnoklassniki": { + "domains": [ + "odnoklassniki.ru" + ] + }, + "GitHub": { + "domains": [ + "github.com" + ] + }, + "Classmates": { + "domains": [ + "classmates.com" + ] + }, + "Friends Reunited": { + "domains": [ + "friendsreunited.com" + ] + }, + "Renren": { + "domains": [ + "renren.com" + ] + }, + "Quora": { + "domains": [ + "quora.com" + ] + }, + "Gaia Online": { + "domains": [ + "gaiaonline.com" + ] + }, + "Netlog": { + "domains": [ + "netlog.com" + ] + }, + "Orkut": { + "domains": [ + "orkut.com" + ] + }, + "MyHeritage": { + "domains": [ + "myheritage.com" + ] + }, + "Multiply": { + "domains": [ + "multiply.com" + ] + }, + "myYearbook": { + "domains": [ + "myyearbook.com" + ] + }, + "WeeWorld": { + "domains": [ + "weeworld.com" + ] + }, + "Vimeo": { + "domains": [ + "vimeo.com" + ] + }, + "Eksi Sozluk": { + "domains": [ + "Sozluk.com", + "sourtimes.org" + ] + }, + "Geni": { + "domains": [ + "geni.com" + ] + }, + "Uludag Sozluk": { + "domains": [ + "uludagsozluk.com", + "ulusozluk.com" + ] + }, + "SourceForge": { + "domains": [ + "sourceforge.net" + ] + }, + "Plaxo": { + "domains": [ + "plaxo.com" + ] + }, + "Taringa!": { + "domains": [ + "taringa.net" + ] + }, + "Tagged": { + "domains": [ + "login.tagged.com" + ] + }, + "XING": { + "domains": [ + "xing.com" + ] + }, + "Instagram": { + "domains": [ + "instagram.com" + ] + }, + "Vkontakte": { + "domains": [ + "vk.com", + "vkontakte.ru" + ] + }, + "Twitter": { + "domains": [ + "twitter.com", + "t.co" + ] + }, + "vKruguDruzei.ru": { + "domains": [ + "vkrugudruzei.ru" + ] + }, + "Donanimhaber": { + "domains": [ + "donanimhaber.com" + ] + }, + "WAYN": { + "domains": [ + "wayn.com" + ] + }, + "Tuenti": { + "domains": [ + "tuenti.com" + ] + }, + "Mail.ru": { + "domains": [ + "my.mail.ru" + ] + }, + "Badoo": { + "domains": [ + "badoo.com" + ] + }, + "Instela": { + "domains": [ + "instela.com" + ] + }, + "Habbo": { + "domains": [ + "habbo.com" + ] + }, + "Pinterest": { + "domains": [ + "pinterest.com" + ] + }, + "LinkedIn": { + "domains": [ + "linkedin.com", + "lnkd.in" + ] + }, + "Foursquare": { + "domains": [ + "foursquare.com" + ] + }, + "Flixster": { + "domains": [ + "flixster.com" + ] + }, + "Windows Live Spaces": { + "domains": [ + "login.live.com" + ] + }, + "BlackPlanet": { + "domains": [ + "blackplanet.com" + ] + }, + "Cyworld": { + "domains": [ + "global.cyworld.com" + ] + }, + "Pocket": { + "domains": [ + "itusozluk.com" + ], + "ITU Sozluk": null + }, + "Skyrock": { + "domains": [ + "skyrock.com" + ] + }, + "Facebook": { + "domains": [ + "facebook.com", + "fb.me", + "m.facebook.com", + "l.facebook.com", + "lm.facebook.com" + ] + }, + "Disqus": { + "domains": [ + "redirect.disqus.com", + "disq.us", + "disqus.com" + ] + }, + "StudiVZ": { + "domains": [ + "studivz.net" + ] + }, + "Fotolog": { + "domains": [ + "fotolog.com" + ] + }, + "Google+": { + "domains": [ + "url.google.com", + "plus.google.com" + ] + }, + "Nasza-klasa.pl": { + "domains": [ + "nk.pl" + ] + }, + "Qzone": { + "domains": [ + "qzone.qq.com" + ] + }, + "Douban": { + "domains": [ + "douban.com" + ] + }, + "Bebo": { + "domains": [ + "bebo.com" + ] + }, + "Youtube": { + "domains": [ + "youtube.com", + "youtu.be" + ] + }, + "Reddit": { + "domains": [ + "reddit.com" + ] + }, + "Identi.ca": { + "domains": [ + "identi.ca" + ] + }, + "StackOverflow": { + "domains": [ + "stackoverflow.com" + ] + }, + "Mixi": { + "domains": [ + "mixi.jp" + ] + }, + "StumbleUpon": { + "domains": [ + "stumbleupon.com" + ] + }, + "Inci Sozluk": { + "domains": [ + "inci.sozlukspot.com", + "incisozluk.com", + "incisozluk.cc" + ] + }, + "Viadeo": { + "domains": [ + "viadeo.com" + ] + }, + "Last.fm": { + "domains": [ + "lastfm.ru" + ] + }, + "LiveJournal": { + "domains": [ + "livejournal.ru" + ] + }, + "Tumblr": { + "domains": [ + "tumblr.com" + ] + }, + "Hacker News": { + "domains": [ + "news.ycombinator.com" + ] + }, + "Hocam.com": { + "domains": [ + "hocam.com" + ] + }, + "Delicious": { + "domains": [ + "delicious.com" + ] + }, + "Hyves": { + "domains": [ + "hyves.nl" + ] + }, + "Paper.li": { + "domains": [ + "paper.li" + ] + }, + "MoiKrug.ru": { + "domains": [ + "moikrug.ru" + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/referers.yml b/src/main/resources/referers.yml new file mode 100644 index 0000000..35577b6 --- /dev/null +++ b/src/main/resources/referers.yml @@ -0,0 +1,3919 @@ +# ####################################################################################################### +# +# ALL SUPPORTED REFERERS +# +# Broken down into: +# +# 1. Medium-unknown providers +# 2. Email providers +# 3. Social providers +# 4. Search providers +# 5. Paid media + + +# ####################################################################################################### +# +# MEDIUM-UNKNOWN PROVIDERS +# +# We know the source, but not the medium. +# This section is useful for reducing false positives in the other sections + +unknown: + + Google: + domains: + - support.google.com + - developers.google.com + - maps.google.com + - accounts.google.com + - drive.google.com + - sites.google.com + - groups.google.com + - groups.google.co.uk + + Yahoo!: + domains: + - finance.yahoo.com + - news.yahoo.com + - eurosport.yahoo.com + - sports.yahoo.com + - astrology.yahoo.com + - travel.yahoo.com + - answers.yahoo.com + - screen.yahoo.com + - weather.yahoo.com + - messenger.yahoo.com + - games.yahoo.com + - shopping.yahoo.net + - movies.yahoo.com + - cars.yahoo.com + - lifestyle.yahoo.com + - omg.yahoo.com + - match.yahoo.net + + + +# ####################################################################################################### +# +# EMAIL PROVIDERS + +email: + + 126 Mail: + domains: + - mail.126.com + + 163 Mail: + domains: + - mail.163.com + + 2degrees: + domains: + - webmail.2degreesbroadband.co.nz + + Adam Internet: + domains: + - webmail.adam.com.au + + AOL Mail: + domains: + - mail.aol.com + + Bigpond: + domains: + - webmail.bigpond.com + - webmail2.bigpond.com + - email.telstra.com + - basic.messaging.bigpond.com + + Commander: + domains: + - webmail.commander.net.au + + Daum Mail: + domains: + - mail2.daum.net + - mail.daum.net + + Dodo: + domains: + - webmail.dodo.com.au + + Freenet: + domains: + - webmail.freenet.de + + Gmail: + domains: + - mail.google.com + - inbox.google.com + + iiNet: + domains: + - webmail.iinet.net.au + - mail.iinet.net.au + + Inbox.com: + domains: + - inbox.com + + iPrimus: + domains: + - webmail.iprimus.com.au + + Mynet Mail: + domains: + - mail.mynet.com + + Naver Mail: + domains: + - mail.naver.com + + Netspace: + domains: + - webmail.netspace.net.au + + Optus Zoo: + domains: + - webmail.optuszoo.com.au + - webmail.optusnet.com.au + + Orange Webmail: + domains: + - orange.fr/webmail + + Outlook.com: + domains: + - mail.live.com + - outlook.live.com + + QQ Mail: + domains: + - mail.qq.com + + Seznam Mail: + domains: + - email.seznam.cz + + Virgin: + domains: + - webmail.virginbroadband.com.au + + Vodafone: + domains: + - webmail.vodafone.co.nz + + Westnet: + domains: + - webmail.westnet.com.au + + Yahoo! Mail: + domains: + - mail.yahoo.net + - mail.yahoo.com + - mail.yahoo.co.uk + - mail.yahoo.co.jp + + Zoho: + domains: + - mail.zoho.com + +# ####################################################################################################### +# +# SOCIAL PROVIDERS + +social: + + Facebook: + domains: + - facebook.com + - fb.me + - m.facebook.com + - l.facebook.com + - lm.facebook.com + + Qzone: + domains: + - qzone.qq.com + + Habbo: + domains: + - habbo.com + + Twitter: + domains: + - twitter.com + - t.co + + Instagram: + domains: + - instagram.com + + Youtube: + domains: + - youtube.com + - youtu.be + + Vimeo: + domains: + - vimeo.com + + Renren: + domains: + - renren.com + + Windows Live Spaces: + domains: + - login.live.com + + LinkedIn: + domains: + - linkedin.com + - lnkd.in + + Bebo: + domains: + - bebo.com + + Vkontakte: + domains: + - vk.com + - vkontakte.ru + + Tagged: + domains: + - login.tagged.com + + Orkut: + domains: + - orkut.com + + Myspace: + domains: + - myspace.com + + Friendster: + domains: + - friendster.com + + Badoo: + domains: + - badoo.com + + hi5: + domains: + - hi5.com + + Netlog: + domains: + - netlog.com + + Flixster: + domains: + - flixster.com + + MyLife: + domains: + - mylife.ru + + Paper.li: + domains: + - paper.li + + Classmates: + domains: + - classmates.com + + GitHub: + domains: + - github.com + + Google+: + domains: + - url.google.com + - plus.google.com + + Douban: + domains: + - douban.com + + Odnoklassniki: + domains: + - odnoklassniki.ru + + Viadeo: + domains: + - viadeo.com + + Flickr: + domains: + - flickr.com + + WeeWorld: + domains: + - weeworld.com + + Last.fm: + domains: + - lastfm.ru + + MyHeritage: + domains: + - myheritage.com + + Xanga: + domains: + - xanga.com + + Mixi: + domains: + - mixi.jp + + Cyworld: + domains: + - global.cyworld.com + + Gaia Online: + domains: + - gaiaonline.com + + Skyrock: + domains: + - skyrock.com + + BlackPlanet: + domains: + - blackplanet.com + + myYearbook: + domains: + - myyearbook.com + + Fotolog: + domains: + - fotolog.com + + Friends Reunited: + domains: + - friendsreunited.com + + LiveJournal: + domains: + - livejournal.ru + + StudiVZ: + domains: + - studivz.net + + StackOverflow: + domains: + - stackoverflow.com + + Sonico.com: + domains: + - sonico.com + + Pinterest: + domains: + - pinterest.com + + Plaxo: + domains: + - plaxo.com + + Geni: + domains: + - geni.com + + Tuenti: + domains: + - tuenti.com + + XING: + domains: + - xing.com + + Taringa!: + domains: + - taringa.net + + Tumblr: + domains: + - tumblr.com + - t.umblr.com + + Nasza-klasa.pl: + domains: + - nk.pl + + StumbleUpon: + domains: + - stumbleupon.com + + SourceForge: + domains: + - sourceforge.net + + Hyves: + domains: + - hyves.nl + + WAYN: + domains: + - wayn.com + + Buzznet: + domains: + - buzznet.com + + Multiply: + domains: + - multiply.com + + Foursquare: + domains: + - foursquare.com + + vKruguDruzei.ru: + domains: + - vkrugudruzei.ru + + Mail.ru: + domains: + - my.mail.ru + + MoiKrug.ru: + domains: + - moikrug.ru + + Reddit: + domains: + - reddit.com + + Hacker News: + domains: + - news.ycombinator.com + + Identi.ca: + domains: + - identi.ca + + Weibo: + domains: + - weibo.com + - t.cn + + Delicious: + domains: + - delicious.com + + Pocket: + domains: + - getpocket.com + + ITU Sozluk: + domains: + - itusozluk.com + + Instela: + domains: + - instela.com + + Eksi Sozluk: + domains: + - Sozluk.com + - sourtimes.org + + Uludag Sozluk: + domains: + - uludagsozluk.com + - ulusozluk.com + + Inci Sozluk: + domains: + - inci.sozlukspot.com + - incisozluk.com + - incisozluk.cc + + Hocam.com: + domains: + - hocam.com + + Donanimhaber: + domains: + - donanimhaber.com + + Disqus: + domains: + - redirect.disqus.com + - disq.us + - disqus.com + + Quora: + domains: + - quora.com + + Whirlpool: + domains: + - forums.whirlpool.net.au + +# ####################################################################################################### +# +# SEARCH PROVIDERS + +search: + + 1.cz: + parameters: + - q + domains: + - 1.cz + + # 123people TODO + + 1&1: + parameters: + - q + domains: + - search.1and1.com + + 1und1: + parameters: + - su + domains: + - search.1und1.de + + 360.cn: + parameters: + - q + domains: + - so.360.cn + - www.so.com + + Abacho: + parameters: + - q + domains: + - www.abacho.de + - www.abacho.com + - www.abacho.co.uk + - www.se.abacho.com + - www.tr.abacho.com + - www.abacho.at + - www.abacho.fr + - www.abacho.es + - www.abacho.ch + - www.abacho.it + + ABCsøk: + parameters: + - q + domains: + - abcsolk.no + - verden.abcsok.no + + Acoon: + parameters: + - begriff + domains: + - www.acoon.de + + Alexa: + parameters: + - q + domains: + - alexa.com + - search.toolbars.alexa.com + + Alice Adsl: + parameters: + - q + domains: + - rechercher.aliceadsl.fr + + AllTheWeb: + parameters: + - q + domains: + - www.alltheweb.com + + all.by: + parameters: + - query + domains: + - all.by + + Altavista: + parameters: + - q + domains: + - www.altavista.com + - search.altavista.com + - listings.altavista.com + - altavista.de + - altavista.fr + - be-nl.altavista.com + - be-fr.altavista.com + + Amazon: + parameters: + - keywords + domains: + - amazon.com + - www.amazon.com + + AOL: + parameters: + - q + - query + domains: + - search.aol.com + - search.aol.it + - aolsearch.aol.com + - aolsearch.com + - www.aolrecherche.aol.fr + - www.aolrecherches.aol.fr + - www.aolimages.aol.fr + - aim.search.aol.com + - www.recherche.aol.fr + - recherche.aol.fr + - find.web.aol.com + - recherche.aol.ca + - aolsearch.aol.co.uk + - search.aol.co.uk + - aolrecherche.aol.fr + - sucheaol.aol.de + - suche.aol.de + - suche.aolsvc.de + - aolbusqueda.aol.com.mx + - alicesuche.aol.de + - alicesuchet.aol.de + - suchet2.aol.de + - search.hp.my.aol.com.au + - search.hp.my.aol.de + - search.hp.my.aol.it + - search-intl.netscape.com + + Apollo Latvia: + parameters: + - q + domains: + - apollo.lv/portal/search/ + + APOLL07: + parameters: + - query + domains: + - apollo7.de + + Apontador: + parameters: + - q + domains: + - apontador.com.br + - www.apontador.com.br + + Aport: + parameters: + - r + domains: + - sm.aport.ru + + arama: + parameters: + - q + domains: + - arama.com + + Arcor: + parameters: + - Keywords + domains: + - www.arcor.de + + Arianna: + parameters: + - query + domains: + - arianna.libero.it + - www.arianna.com + + Ask: + parameters: + - q + domains: + - ask.com + - www.ask.com + - web.ask.com + - int.ask.com + - mws.ask.com + - uk.ask.com + - images.ask.com + - ask.reference.com + - www.askkids.com + - iwon.ask.com + - www.ask.co.uk + - www.qbyrd.com + - search-results.com + - uk.search-results.com + - www.search-results.com + - int.search-results.com + + Ask Toolbar: + parameters: + - searchfor + domains: + - search.tb.ask.com + + Atlas: + parameters: + - q + domains: + - searchatlas.centrum.cz + + Austronaut: + parameters: + - q + domains: + - www2.austronaut.at + - www1.astronaut.at + + Babylon: + parameters: + - q + domains: + - search.babylon.com + - searchassist.babylon.com + + Baidu: + parameters: + - wd + - word + - kw + - k + domains: + - www.baidu.com + - www1.baidu.com + - zhidao.baidu.com + - tieba.baidu.com + - news.baidu.com + - web.gougou.com + - m.baidu.com + + Biglobe: + parameters: + - q + domains: + - cgi.search.biglobe.ne.jp + + Bing: + parameters: + - q + - Q + domains: + - bing.com + - www.bing.com + - msnbc.msn.com + - dizionario.it.msn.com + - cc.bingj.com + - m.bing.com + + Bing Images: + parameters: + - q + - Q + domains: + - bing.com/images/search + - www.bing.com/images/search + + blekko: + parameters: + - q + domains: + - blekko.com + + Blogdigger: + parameters: + - q + domains: + - www.blogdigger.com + + Blogpulse: + parameters: + - query + domains: + - www.blogpulse.com + + Bluewin: + parameters: + - searchTerm + domains: + - search.bluewin.ch + + British Telecommunications: + parameters: + - p + domains: + - search.bt.com + + canoe.ca: + parameters: + - q + domains: + - web.canoe.ca + + Centrum: + parameters: + - q + domains: + - serach.centrum.cz + - morfeo.centrum.cz + + Certified-Toolbar: + parameters: + - q + domains: + - search.certified-toolbar.com + + Charter: + parameters: + - q + domains: + - www.charter.net + + Clix: + parameters: + - question + domains: + - pesquisa.clix.pt + + Conduit: + parameters: + - q + domains: + - search.conduit.com + + Comcast: + parameters: + - q + domains: + - serach.comcast.net + + Crawler: + parameters: + - q + domains: + - www.crawler.com + + Compuserve: + parameters: + - query + domains: + - websearch.cs.com + + Cuil: + parameters: + - q + domains: + - www.cuil.com + + Daemon search: + parameters: + - q + domains: + - daemon-search.com + - my.daemon-search.com + + Dalesearch: + parameters: + - q + domains: + - www.dalesearch.com + + DasOertliche: + parameters: + - kw + domains: + - www.dasoertliche.de + + DasTelefonbuch: + parameters: + - kw + domains: + - www1.dastelefonbuch.de + + Daum: + parameters: + - q + domains: + - search.daum.net + + Delfi latvia: + parameters: + - q + domains: + - smart.delfi.lv + + Delfi: + parameters: + - q + domains: + - otsing.delfi.ee + + Digg: + parameters: + - s + domains: + - digg.com + + dmoz: + parameters: + - q + domains: + - dmoz.org + - editors.dmoz.org + + Dodo: + parameters: + - q + domains: + - google.dodo.com.au + + DuckDuckGo: + parameters: + - q + domains: + - duckduckgo.com + + earthlink: + parameters: + - q + domains: + - search.earthlink.net + + Ecosia: + parameters: + - q + domains: + - ecosia.org + + Eniro: + parameters: + - q + - search_word + domains: + - www.eniro.se + + Eurip: + parameters: + - q + domains: + - www.eurip.com + + Euroseek: + parameters: + - string + domains: + - www.euroseek.com + + Everyclick: + parameters: + - keyword + domains: + - www.everyclick.com + + Excite: + parameters: + - q + - search + domains: + - search.excite.it + - search.excite.fr + - search.excite.de + - search.excite.co.uk + - serach.excite.es + - search.excite.nl + - msxml.excite.com + - www.excite.co.jp + + Exalead: + parameters: + - q + domains: + - www.exalead.fr + - www.exalead.com + + eo: + parameters: + - x_query + domains: + - eo.st + + Fast Browser Search: + parameters: + - q + domains: + - www.fastbrowsersearch.com + + Francite: + parameters: + - name + domains: + - recherche.francite.com + + Finderoo: + parameters: + - q + domains: + - www.finderoo.com + + Findwide: + parameters: + - k + domains: + - search.findwide.com + + Fireball: + parameters: + - q + domains: + - www.fireball.de + + Firstfind: + parameters: + - qry + domains: + - www.firstsfind.com + + Fixsuche: + parameters: + - q + domains: + - www.fixsuche.de + + Flix: + parameters: + - keyword + domains: + - www.flix.de + + Forestle: + parameters: + - q + domains: + - forestle.org + - www.forestle.org + - forestle.mobi + + Free: + parameters: + - q + domains: + - search.free.fr + - search1-2.free.fr + - search1-1.free.fr + + Freecause: + parameters: + - p + domains: + - search.freecause.com + + Freenet: + parameters: + - query + - Keywords + domains: + - suche.freenet.de + + Freshweather: + parameters: + - q + domains: + - www.fresh-weather.com + + FriendFeed: + parameters: + - q + domains: + - friendfeed.com + + GAIS: + parameters: + - q + domains: + - gais.cs.ccu.edu.tw + + Geona: + parameters: + - q + domains: + - geona.net + + Genieo: + parameters: + - q + domains: + - search.genieo.com + + Gigablast: + parameters: + - q + domains: + - www.gigablast.com + - dir.gigablast.com + + Globososo: + parameters: + - q + domains: + - searches.globososo.com + - search.globososo.com + + GMX: + parameters: + - su + domains: + - suche.gmx.net + + Gnadenmeer: + parameters: + - keyword + domains: + - www.gnadenmeer.de + + Gomeo: + parameters: + - Keywords + domains: + - www.gomeo.com + + goo: + parameters: + - MT + domains: + - search.goo.ne.jp + - ocnsearch.goo.ne.jp + + Google: + parameters: + - q + - query # For www.cnn.com (powered by Google) + - Keywords # For gooofullsearch.com (powered by Google) + domains: + - www.google.com + - www.google.ac + - www.google.ad + - www.google.com.af + - www.google.com.ag + - www.google.com.ai + - www.google.am + - www.google.it.ao + - www.google.com.ar + - www.google.as + - www.google.at + - www.google.com.au + - www.google.az + - www.google.ba + - www.google.com.bd + - www.google.be + - www.google.bf + - www.google.bg + - www.google.com.bh + - www.google.bi + - www.google.bj + - www.google.com.bn + - www.google.com.bo + - www.google.com.br + - www.google.bs + - www.google.co.bw + - www.google.com.by + - www.google.by + - www.google.com.bz + - www.google.ca + - www.google.com.kh + - www.google.cc + - www.google.cd + - www.google.cf + - www.google.cat + - www.google.cg + - www.google.ch + - www.google.ci + - www.google.co.ck + - www.google.cl + - www.google.cm + - www.google.cn + - www.google.com.co + - www.google.co.cr + - www.google.com.cu + - www.google.cv + - www.google.com.cy + - www.google.cz + - www.google.de + - www.google.dj + - www.google.dk + - www.google.dm + - www.google.com.do + - www.google.dz + - www.google.com.ec + - www.google.ee + - www.google.com.eg + - www.google.es + - www.google.com.et + - www.google.fi + - www.google.com.fj + - www.google.fm + - www.google.fr + - www.google.ga + - www.google.gd + - www.google.ge + - www.google.gf + - www.google.gg + - www.google.com.gh + - www.google.com.gi + - www.google.gl + - www.google.gm + - www.google.gp + - www.google.gr + - www.google.com.gt + - www.google.gy + - www.google.com.hk + - www.google.hn + - www.google.hr + - www.google.ht + - www.google.hu + - www.google.co.id + - www.google.iq + - www.google.ie + - www.google.co.il + - www.google.im + - www.google.co.in + - www.google.io + - www.google.is + - www.google.it + - www.google.je + - www.google.com.jm + - www.google.jo + - www.google.co.jp + - www.google.co.ke + - www.google.ki + - www.google.kg + - www.google.co.kr + - www.google.com.kw + - www.google.kz + - www.google.la + - www.google.com.lb + - www.google.com.lc + - www.google.li + - www.google.lk + - www.google.co.ls + - www.google.lt + - www.google.lu + - www.google.lv + - www.google.com.ly + - www.google.co.ma + - www.google.md + - www.google.me + - www.google.mg + - www.google.mk + - www.google.ml + - www.google.mn + - www.google.ms + - www.google.com.mt + - www.google.mu + - www.google.mv + - www.google.mw + - www.google.com.mx + - www.google.com.my + - www.google.co.mz + - www.google.com.na + - www.google.ne + - www.google.com.nf + - www.google.com.ng + - www.google.com.ni + - www.google.nl + - www.google.no + - www.google.com.np + - www.google.nr + - www.google.nu + - www.google.co.nz + - www.google.com.om + - www.google.com.pa + - www.google.com.pe + - www.google.com.ph + - www.google.com.pk + - www.google.pl + - www.google.pn + - www.google.com.pr + - www.google.ps + - www.google.pt + - www.google.com.py + - www.google.com.qa + - www.google.ro + - www.google.rs + - www.google.ru + - www.google.rw + - www.google.com.sa + - www.google.com.sb + - www.google.sc + - www.google.se + - www.google.com.sg + - www.google.sh + - www.google.si + - www.google.sk + - www.google.com.sl + - www.google.sn + - www.google.sm + - www.google.so + - www.google.st + - www.google.com.sv + - www.google.td + - www.google.tg + - www.google.co.th + - www.google.com.tj + - www.google.tk + - www.google.tl + - www.google.tm + - www.google.to + - www.google.com.tn + - www.google.tn + - www.google.com.tr + - www.google.tt + - www.google.com.tw + - www.google.co.tz + - www.google.com.ua + - www.google.co.ug + - www.google.ae + - www.google.co.uk + - www.google.us + - www.google.com.uy + - www.google.co.uz + - www.google.com.vc + - www.google.co.ve + - www.google.vg + - www.google.co.vi + - www.google.com.vn + - www.google.vu + - www.google.ws + - www.google.co.za + - www.google.co.zm + - www.google.co.zw + - google.com + - google.ac + - google.ad + - google.com.af + - google.com.ag + - google.com.ai + - google.am + - google.it.ao + - google.com.ar + - google.as + - google.at + - google.com.au + - google.az + - google.ba + - google.com.bd + - google.be + - google.bf + - google.bg + - google.com.bh + - google.bi + - google.bj + - google.com.bn + - google.com.bo + - google.com.br + - google.bs + - google.co.bw + - google.com.by + - google.by + - google.com.bz + - google.ca + - google.com.kh + - google.cc + - google.cd + - google.cf + - google.cat + - google.cg + - google.ch + - google.ci + - google.co.ck + - google.cl + - google.cm + - google.cn + - google.com.co + - google.co.cr + - google.com.cu + - google.cv + - google.com.cy + - google.cz + - google.de + - google.dj + - google.dk + - google.dm + - google.com.do + - google.dz + - google.com.ec + - google.ee + - google.com.eg + - google.es + - google.com.et + - google.fi + - google.com.fj + - google.fm + - google.fr + - google.ga + - google.gd + - google.ge + - google.gf + - google.gg + - google.com.gh + - google.com.gi + - google.gl + - google.gm + - google.gp + - google.gr + - google.com.gt + - google.gy + - google.com.hk + - google.hn + - google.hr + - google.ht + - google.hu + - google.co.id + - google.iq + - google.ie + - google.co.il + - google.im + - google.co.in + - google.io + - google.is + - google.it + - google.je + - google.com.jm + - google.jo + - google.co.jp + - google.co.ke + - google.ki + - google.kg + - google.co.kr + - google.com.kw + - google.kz + - google.la + - google.com.lb + - google.com.lc + - google.li + - google.lk + - google.co.ls + - google.lt + - google.lu + - google.lv + - google.com.ly + - google.co.ma + - google.md + - google.me + - google.mg + - google.mk + - google.ml + - google.mn + - google.ms + - google.com.mt + - google.mu + - google.mv + - google.mw + - google.com.mx + - google.com.my + - google.co.mz + - google.com.na + - google.ne + - google.com.nf + - google.com.ng + - google.com.ni + - google.nl + - google.no + - google.com.np + - google.nr + - google.nu + - google.co.nz + - google.com.om + - google.com.pa + - google.com.pe + - google.com.ph + - google.com.pk + - google.pl + - google.pn + - google.com.pr + - google.ps + - google.pt + - google.com.py + - google.com.qa + - google.ro + - google.rs + - google.ru + - google.rw + - google.com.sa + - google.com.sb + - google.sc + - google.se + - google.com.sg + - google.sh + - google.si + - google.sk + - google.com.sl + - google.sn + - google.sm + - google.so + - google.st + - google.com.sv + - google.td + - google.tg + - google.co.th + - google.com.tj + - google.tk + - google.tl + - google.tm + - google.to + - google.com.tn + - google.com.tr + - google.tt + - google.com.tw + - google.co.tz + - google.com.ua + - google.co.ug + - google.ae + - google.co.uk + - google.us + - google.com.uy + - google.co.uz + - google.com.vc + - google.co.ve + - google.vg + - google.co.vi + - google.com.vn + - google.vu + - google.ws + - google.co.za + - google.co.zm + - google.co.zw + - google.tn + # powered by Google + - search.avg.com + - isearch.avg.com + - www.cnn.com + - darkoogle.com + - search.darkoogle.com + - search.foxtab.com + - www.gooofullsearch.com + - search.hiyo.com + - search.incredimail.com + - search1.incredimail.com + - search2.incredimail.com + - search3.incredimail.com + - search4.incredimail.com + - search.incredibar.com + - search.sweetim.com + - www.fastweb.it + - search.juno.com + - find.tdc.dk + - searchresults.verizon.com + - search.walla.co.il + - search.alot.com + # Google Earch + - www.googleearth.de + - www.googleearth.fr + # Google Cache + - webcache.googleusercontent.com + # Google SSL + - encrypted.google.com + # Syndicated search + - googlesyndicatedsearch.com + + Google Blogsearch: + parameters: + - q + domains: + - blogsearch.google.ac + - blogsearch.google.ad + - blogsearch.google.ae + - blogsearch.google.am + - blogsearch.google.as + - blogsearch.google.at + - blogsearch.google.az + - blogsearch.google.ba + - blogsearch.google.be + - blogsearch.google.bf + - blogsearch.google.bg + - blogsearch.google.bi + - blogsearch.google.bj + - blogsearch.google.bs + - blogsearch.google.by + - blogsearch.google.ca + - blogsearch.google.cat + - blogsearch.google.cc + - blogsearch.google.cd + - blogsearch.google.cf + - blogsearch.google.cg + - blogsearch.google.ch + - blogsearch.google.ci + - blogsearch.google.cl + - blogsearch.google.cm + - blogsearch.google.cn + - blogsearch.google.co.bw + - blogsearch.google.co.ck + - blogsearch.google.co.cr + - blogsearch.google.co.id + - blogsearch.google.co.il + - blogsearch.google.co.in + - blogsearch.google.co.jp + - blogsearch.google.co.ke + - blogsearch.google.co.kr + - blogsearch.google.co.ls + - blogsearch.google.co.ma + - blogsearch.google.co.mz + - blogsearch.google.co.nz + - blogsearch.google.co.th + - blogsearch.google.co.tz + - blogsearch.google.co.ug + - blogsearch.google.co.uk + - blogsearch.google.co.uz + - blogsearch.google.co.ve + - blogsearch.google.co.vi + - blogsearch.google.co.za + - blogsearch.google.co.zm + - blogsearch.google.co.zw + - blogsearch.google.com + - blogsearch.google.com.af + - blogsearch.google.com.ag + - blogsearch.google.com.ai + - blogsearch.google.com.ar + - blogsearch.google.com.au + - blogsearch.google.com.bd + - blogsearch.google.com.bh + - blogsearch.google.com.bn + - blogsearch.google.com.bo + - blogsearch.google.com.br + - blogsearch.google.com.by + - blogsearch.google.com.bz + - blogsearch.google.com.co + - blogsearch.google.com.cu + - blogsearch.google.com.cy + - blogsearch.google.com.do + - blogsearch.google.com.ec + - blogsearch.google.com.eg + - blogsearch.google.com.et + - blogsearch.google.com.fj + - blogsearch.google.com.gh + - blogsearch.google.com.gi + - blogsearch.google.com.gt + - blogsearch.google.com.hk + - blogsearch.google.com.jm + - blogsearch.google.com.kh + - blogsearch.google.com.kw + - blogsearch.google.com.lb + - blogsearch.google.com.lc + - blogsearch.google.com.ly + - blogsearch.google.com.mt + - blogsearch.google.com.mx + - blogsearch.google.com.my + - blogsearch.google.com.na + - blogsearch.google.com.nf + - blogsearch.google.com.ng + - blogsearch.google.com.ni + - blogsearch.google.com.np + - blogsearch.google.com.om + - blogsearch.google.com.pa + - blogsearch.google.com.pe + - blogsearch.google.com.ph + - blogsearch.google.com.pk + - blogsearch.google.com.pr + - blogsearch.google.com.py + - blogsearch.google.com.qa + - blogsearch.google.com.sa + - blogsearch.google.com.sb + - blogsearch.google.com.sg + - blogsearch.google.com.sl + - blogsearch.google.com.sv + - blogsearch.google.com.tj + - blogsearch.google.com.tn + - blogsearch.google.com.tr + - blogsearch.google.com.tw + - blogsearch.google.com.ua + - blogsearch.google.com.uy + - blogsearch.google.com.vc + - blogsearch.google.com.vn + - blogsearch.google.cv + - blogsearch.google.cz + - blogsearch.google.de + - blogsearch.google.dj + - blogsearch.google.dk + - blogsearch.google.dm + - blogsearch.google.dz + - blogsearch.google.ee + - blogsearch.google.es + - blogsearch.google.fi + - blogsearch.google.fm + - blogsearch.google.fr + - blogsearch.google.ga + - blogsearch.google.gd + - blogsearch.google.ge + - blogsearch.google.gf + - blogsearch.google.gg + - blogsearch.google.gl + - blogsearch.google.gm + - blogsearch.google.gp + - blogsearch.google.gr + - blogsearch.google.gy + - blogsearch.google.hn + - blogsearch.google.hr + - blogsearch.google.ht + - blogsearch.google.hu + - blogsearch.google.ie + - blogsearch.google.im + - blogsearch.google.io + - blogsearch.google.iq + - blogsearch.google.is + - blogsearch.google.it + - blogsearch.google.it.ao + - blogsearch.google.je + - blogsearch.google.jo + - blogsearch.google.kg + - blogsearch.google.ki + - blogsearch.google.kz + - blogsearch.google.la + - blogsearch.google.li + - blogsearch.google.lk + - blogsearch.google.lt + - blogsearch.google.lu + - blogsearch.google.lv + - blogsearch.google.md + - blogsearch.google.me + - blogsearch.google.mg + - blogsearch.google.mk + - blogsearch.google.ml + - blogsearch.google.mn + - blogsearch.google.ms + - blogsearch.google.mu + - blogsearch.google.mv + - blogsearch.google.mw + - blogsearch.google.ne + - blogsearch.google.nl + - blogsearch.google.no + - blogsearch.google.nr + - blogsearch.google.nu + - blogsearch.google.pl + - blogsearch.google.pn + - blogsearch.google.ps + - blogsearch.google.pt + - blogsearch.google.ro + - blogsearch.google.rs + - blogsearch.google.ru + - blogsearch.google.rw + - blogsearch.google.sc + - blogsearch.google.se + - blogsearch.google.sh + - blogsearch.google.si + - blogsearch.google.sk + - blogsearch.google.sm + - blogsearch.google.sn + - blogsearch.google.so + - blogsearch.google.st + - blogsearch.google.td + - blogsearch.google.tg + - blogsearch.google.tk + - blogsearch.google.tl + - blogsearch.google.tm + - blogsearch.google.to + - blogsearch.google.tt + - blogsearch.google.us + - blogsearch.google.vg + - blogsearch.google.vu + - blogsearch.google.ws + + Google Images: + parameters: + - q + domains: + - google.ac/imgres + - google.ad/imgres + - google.ae/imgres + - google.am/imgres + - google.as/imgres + - google.at/imgres + - google.az/imgres + - google.ba/imgres + - google.be/imgres + - google.bf/imgres + - google.bg/imgres + - google.bi/imgres + - google.bj/imgres + - google.bs/imgres + - google.by/imgres + - google.ca/imgres + - google.cat/imgres + - google.cc/imgres + - google.cd/imgres + - google.cf/imgres + - google.cg/imgres + - google.ch/imgres + - google.ci/imgres + - google.cl/imgres + - google.cm/imgres + - google.cn/imgres + - google.co.bw/imgres + - google.co.ck/imgres + - google.co.cr/imgres + - google.co.id/imgres + - google.co.il/imgres + - google.co.in/imgres + - google.co.jp/imgres + - google.co.ke/imgres + - google.co.kr/imgres + - google.co.ls/imgres + - google.co.ma/imgres + - google.co.mz/imgres + - google.co.nz/imgres + - google.co.th/imgres + - google.co.tz/imgres + - google.co.ug/imgres + - google.co.uk/imgres + - google.co.uz/imgres + - google.co.ve/imgres + - google.co.vi/imgres + - google.co.za/imgres + - google.co.zm/imgres + - google.co.zw/imgres + - google.com/imgres + - google.com.af/imgres + - google.com.ag/imgres + - google.com.ai/imgres + - google.com.ar/imgres + - google.com.au/imgres + - google.com.bd/imgres + - google.com.bh/imgres + - google.com.bn/imgres + - google.com.bo/imgres + - google.com.br/imgres + - google.com.by/imgres + - google.com.bz/imgres + - google.com.co/imgres + - google.com.cu/imgres + - google.com.cy/imgres + - google.com.do/imgres + - google.com.ec/imgres + - google.com.eg/imgres + - google.com.et/imgres + - google.com.fj/imgres + - google.com.gh/imgres + - google.com.gi/imgres + - google.com.gt/imgres + - google.com.hk/imgres + - google.com.jm/imgres + - google.com.kh/imgres + - google.com.kw/imgres + - google.com.lb/imgres + - google.com.lc/imgres + - google.com.ly/imgres + - google.com.mt/imgres + - google.com.mx/imgres + - google.com.my/imgres + - google.com.na/imgres + - google.com.nf/imgres + - google.com.ng/imgres + - google.com.ni/imgres + - google.com.np/imgres + - google.com.om/imgres + - google.com.pa/imgres + - google.com.pe/imgres + - google.com.ph/imgres + - google.com.pk/imgres + - google.com.pr/imgres + - google.com.py/imgres + - google.com.qa/imgres + - google.com.sa/imgres + - google.com.sb/imgres + - google.com.sg/imgres + - google.com.sl/imgres + - google.com.sv/imgres + - google.com.tj/imgres + - google.com.tn/imgres + - google.com.tr/imgres + - google.com.tw/imgres + - google.com.ua/imgres + - google.com.uy/imgres + - google.com.vc/imgres + - google.com.vn/imgres + - google.cv/imgres + - google.cz/imgres + - google.de/imgres + - google.dj/imgres + - google.dk/imgres + - google.dm/imgres + - google.dz/imgres + - google.ee/imgres + - google.es/imgres + - google.fi/imgres + - google.fm/imgres + - google.fr/imgres + - google.ga/imgres + - google.gd/imgres + - google.ge/imgres + - google.gf/imgres + - google.gg/imgres + - google.gl/imgres + - google.gm/imgres + - google.gp/imgres + - google.gr/imgres + - google.gy/imgres + - google.hn/imgres + - google.hr/imgres + - google.ht/imgres + - google.hu/imgres + - google.ie/imgres + - google.im/imgres + - google.io/imgres + - google.iq/imgres + - google.is/imgres + - google.it/imgres + - google.it.ao/imgres + - google.je/imgres + - google.jo/imgres + - google.kg/imgres + - google.ki/imgres + - google.kz/imgres + - google.la/imgres + - google.li/imgres + - google.lk/imgres + - google.lt/imgres + - google.lu/imgres + - google.lv/imgres + - google.md/imgres + - google.me/imgres + - google.mg/imgres + - google.mk/imgres + - google.ml/imgres + - google.mn/imgres + - google.ms/imgres + - google.mu/imgres + - google.mv/imgres + - google.mw/imgres + - google.ne/imgres + - google.nl/imgres + - google.no/imgres + - google.nr/imgres + - google.nu/imgres + - google.pl/imgres + - google.pn/imgres + - google.ps/imgres + - google.pt/imgres + - google.ro/imgres + - google.rs/imgres + - google.ru/imgres + - google.rw/imgres + - google.sc/imgres + - google.se/imgres + - google.sh/imgres + - google.si/imgres + - google.sk/imgres + - google.sm/imgres + - google.sn/imgres + - google.so/imgres + - google.st/imgres + - google.td/imgres + - google.tg/imgres + - google.tk/imgres + - google.tl/imgres + - google.tm/imgres + - google.to/imgres + - google.tt/imgres + - google.us/imgres + - google.vg/imgres + - google.vu/imgres + - images.google.ws + - images.google.ac + - images.google.ad + - images.google.ae + - images.google.am + - images.google.as + - images.google.at + - images.google.az + - images.google.ba + - images.google.be + - images.google.bf + - images.google.bg + - images.google.bi + - images.google.bj + - images.google.bs + - images.google.by + - images.google.ca + - images.google.cat + - images.google.cc + - images.google.cd + - images.google.cf + - images.google.cg + - images.google.ch + - images.google.ci + - images.google.cl + - images.google.cm + - images.google.cn + - images.google.co.bw + - images.google.co.ck + - images.google.co.cr + - images.google.co.id + - images.google.co.il + - images.google.co.in + - images.google.co.jp + - images.google.co.ke + - images.google.co.kr + - images.google.co.ls + - images.google.co.ma + - images.google.co.mz + - images.google.co.nz + - images.google.co.th + - images.google.co.tz + - images.google.co.ug + - images.google.co.uk + - images.google.co.uz + - images.google.co.ve + - images.google.co.vi + - images.google.co.za + - images.google.co.zm + - images.google.co.zw + - images.google.com + - images.google.com.af + - images.google.com.ag + - images.google.com.ai + - images.google.com.ar + - images.google.com.au + - images.google.com.bd + - images.google.com.bh + - images.google.com.bn + - images.google.com.bo + - images.google.com.br + - images.google.com.by + - images.google.com.bz + - images.google.com.co + - images.google.com.cu + - images.google.com.cy + - images.google.com.do + - images.google.com.ec + - images.google.com.eg + - images.google.com.et + - images.google.com.fj + - images.google.com.gh + - images.google.com.gi + - images.google.com.gt + - images.google.com.hk + - images.google.com.jm + - images.google.com.kh + - images.google.com.kw + - images.google.com.lb + - images.google.com.lc + - images.google.com.ly + - images.google.com.mt + - images.google.com.mx + - images.google.com.my + - images.google.com.na + - images.google.com.nf + - images.google.com.ng + - images.google.com.ni + - images.google.com.np + - images.google.com.om + - images.google.com.pa + - images.google.com.pe + - images.google.com.ph + - images.google.com.pk + - images.google.com.pr + - images.google.com.py + - images.google.com.qa + - images.google.com.sa + - images.google.com.sb + - images.google.com.sg + - images.google.com.sl + - images.google.com.sv + - images.google.com.tj + - images.google.com.tn + - images.google.com.tr + - images.google.com.tw + - images.google.com.ua + - images.google.com.uy + - images.google.com.vc + - images.google.com.vn + - images.google.cv + - images.google.cz + - images.google.de + - images.google.dj + - images.google.dk + - images.google.dm + - images.google.dz + - images.google.ee + - images.google.es + - images.google.fi + - images.google.fm + - images.google.fr + - images.google.ga + - images.google.gd + - images.google.ge + - images.google.gf + - images.google.gg + - images.google.gl + - images.google.gm + - images.google.gp + - images.google.gr + - images.google.gy + - images.google.hn + - images.google.hr + - images.google.ht + - images.google.hu + - images.google.ie + - images.google.im + - images.google.io + - images.google.iq + - images.google.is + - images.google.it + - images.google.it.ao + - images.google.je + - images.google.jo + - images.google.kg + - images.google.ki + - images.google.kz + - images.google.la + - images.google.li + - images.google.lk + - images.google.lt + - images.google.lu + - images.google.lv + - images.google.md + - images.google.me + - images.google.mg + - images.google.mk + - images.google.ml + - images.google.mn + - images.google.ms + - images.google.mu + - images.google.mv + - images.google.mw + - images.google.ne + - images.google.nl + - images.google.no + - images.google.nr + - images.google.nu + - images.google.pl + - images.google.pn + - images.google.ps + - images.google.pt + - images.google.ro + - images.google.rs + - images.google.ru + - images.google.rw + - images.google.sc + - images.google.se + - images.google.sh + - images.google.si + - images.google.sk + - images.google.sm + - images.google.sn + - images.google.so + - images.google.st + - images.google.td + - images.google.tg + - images.google.tk + - images.google.tl + - images.google.tm + - images.google.to + - images.google.tt + - images.google.us + - images.google.vg + - images.google.vu + + Google News: + parameters: + - q + domains: + - news.google.ac + - news.google.ad + - news.google.ae + - news.google.am + - news.google.as + - news.google.at + - news.google.az + - news.google.ba + - news.google.be + - news.google.bf + - news.google.bg + - news.google.bi + - news.google.bj + - news.google.bs + - news.google.by + - news.google.ca + - news.google.cat + - news.google.cc + - news.google.cd + - news.google.cf + - news.google.cg + - news.google.ch + - news.google.ci + - news.google.cl + - news.google.cm + - news.google.cn + - news.google.co.bw + - news.google.co.ck + - news.google.co.cr + - news.google.co.id + - news.google.co.il + - news.google.co.in + - news.google.co.jp + - news.google.co.ke + - news.google.co.kr + - news.google.co.ls + - news.google.co.ma + - news.google.co.mz + - news.google.co.nz + - news.google.co.th + - news.google.co.tz + - news.google.co.ug + - news.google.co.uk + - news.google.co.uz + - news.google.co.ve + - news.google.co.vi + - news.google.co.za + - news.google.co.zm + - news.google.co.zw + - news.google.com + - news.google.com.af + - news.google.com.ag + - news.google.com.ai + - news.google.com.ar + - news.google.com.au + - news.google.com.bd + - news.google.com.bh + - news.google.com.bn + - news.google.com.bo + - news.google.com.br + - news.google.com.by + - news.google.com.bz + - news.google.com.co + - news.google.com.cu + - news.google.com.cy + - news.google.com.do + - news.google.com.ec + - news.google.com.eg + - news.google.com.et + - news.google.com.fj + - news.google.com.gh + - news.google.com.gi + - news.google.com.gt + - news.google.com.hk + - news.google.com.jm + - news.google.com.kh + - news.google.com.kw + - news.google.com.lb + - news.google.com.lc + - news.google.com.ly + - news.google.com.mt + - news.google.com.mx + - news.google.com.my + - news.google.com.na + - news.google.com.nf + - news.google.com.ng + - news.google.com.ni + - news.google.com.np + - news.google.com.om + - news.google.com.pa + - news.google.com.pe + - news.google.com.ph + - news.google.com.pk + - news.google.com.pr + - news.google.com.py + - news.google.com.qa + - news.google.com.sa + - news.google.com.sb + - news.google.com.sg + - news.google.com.sl + - news.google.com.sv + - news.google.com.tj + - news.google.com.tn + - news.google.com.tr + - news.google.com.tw + - news.google.com.ua + - news.google.com.uy + - news.google.com.vc + - news.google.com.vn + - news.google.cv + - news.google.cz + - news.google.de + - news.google.dj + - news.google.dk + - news.google.dm + - news.google.dz + - news.google.ee + - news.google.es + - news.google.fi + - news.google.fm + - news.google.fr + - news.google.ga + - news.google.gd + - news.google.ge + - news.google.gf + - news.google.gg + - news.google.gl + - news.google.gm + - news.google.gp + - news.google.gr + - news.google.gy + - news.google.hn + - news.google.hr + - news.google.ht + - news.google.hu + - news.google.ie + - news.google.im + - news.google.io + - news.google.iq + - news.google.is + - news.google.it + - news.google.it.ao + - news.google.je + - news.google.jo + - news.google.kg + - news.google.ki + - news.google.kz + - news.google.la + - news.google.li + - news.google.lk + - news.google.lt + - news.google.lu + - news.google.lv + - news.google.md + - news.google.me + - news.google.mg + - news.google.mk + - news.google.ml + - news.google.mn + - news.google.ms + - news.google.mu + - news.google.mv + - news.google.mw + - news.google.ne + - news.google.nl + - news.google.no + - news.google.nr + - news.google.nu + - news.google.pl + - news.google.pn + - news.google.ps + - news.google.pt + - news.google.ro + - news.google.rs + - news.google.ru + - news.google.rw + - news.google.sc + - news.google.se + - news.google.sh + - news.google.si + - news.google.sk + - news.google.sm + - news.google.sn + - news.google.so + - news.google.st + - news.google.td + - news.google.tg + - news.google.tk + - news.google.tl + - news.google.tm + - news.google.to + - news.google.tt + - news.google.us + - news.google.vg + - news.google.vu + - news.google.ws + + Google Product Search: + parameters: + - q + domains: + - google.ac/products + - google.ad/products + - google.ae/products + - google.am/products + - google.as/products + - google.at/products + - google.az/products + - google.ba/products + - google.be/products + - google.bf/products + - google.bg/products + - google.bi/products + - google.bj/products + - google.bs/products + - google.by/products + - google.ca/products + - google.cat/products + - google.cc/products + - google.cd/products + - google.cf/products + - google.cg/products + - google.ch/products + - google.ci/products + - google.cl/products + - google.cm/products + - google.cn/products + - google.co.bw/products + - google.co.ck/products + - google.co.cr/products + - google.co.id/products + - google.co.il/products + - google.co.in/products + - google.co.jp/products + - google.co.ke/products + - google.co.kr/products + - google.co.ls/products + - google.co.ma/products + - google.co.mz/products + - google.co.nz/products + - google.co.th/products + - google.co.tz/products + - google.co.ug/products + - google.co.uk/products + - google.co.uz/products + - google.co.ve/products + - google.co.vi/products + - google.co.za/products + - google.co.zm/products + - google.co.zw/products + - google.com/products + - google.com.af/products + - google.com.ag/products + - google.com.ai/products + - google.com.ar/products + - google.com.au/products + - google.com.bd/products + - google.com.bh/products + - google.com.bn/products + - google.com.bo/products + - google.com.br/products + - google.com.by/products + - google.com.bz/products + - google.com.co/products + - google.com.cu/products + - google.com.cy/products + - google.com.do/products + - google.com.ec/products + - google.com.eg/products + - google.com.et/products + - google.com.fj/products + - google.com.gh/products + - google.com.gi/products + - google.com.gt/products + - google.com.hk/products + - google.com.jm/products + - google.com.kh/products + - google.com.kw/products + - google.com.lb/products + - google.com.lc/products + - google.com.ly/products + - google.com.mt/products + - google.com.mx/products + - google.com.my/products + - google.com.na/products + - google.com.nf/products + - google.com.ng/products + - google.com.ni/products + - google.com.np/products + - google.com.om/products + - google.com.pa/products + - google.com.pe/products + - google.com.ph/products + - google.com.pk/products + - google.com.pr/products + - google.com.py/products + - google.com.qa/products + - google.com.sa/products + - google.com.sb/products + - google.com.sg/products + - google.com.sl/products + - google.com.sv/products + - google.com.tj/products + - google.com.tn/products + - google.com.tr/products + - google.com.tw/products + - google.com.ua/products + - google.com.uy/products + - google.com.vc/products + - google.com.vn/products + - google.cv/products + - google.cz/products + - google.de/products + - google.dj/products + - google.dk/products + - google.dm/products + - google.dz/products + - google.ee/products + - google.es/products + - google.fi/products + - google.fm/products + - google.fr/products + - google.ga/products + - google.gd/products + - google.ge/products + - google.gf/products + - google.gg/products + - google.gl/products + - google.gm/products + - google.gp/products + - google.gr/products + - google.gy/products + - google.hn/products + - google.hr/products + - google.ht/products + - google.hu/products + - google.ie/products + - google.im/products + - google.io/products + - google.iq/products + - google.is/products + - google.it/products + - google.it.ao/products + - google.je/products + - google.jo/products + - google.kg/products + - google.ki/products + - google.kz/products + - google.la/products + - google.li/products + - google.lk/products + - google.lt/products + - google.lu/products + - google.lv/products + - google.md/products + - google.me/products + - google.mg/products + - google.mk/products + - google.ml/products + - google.mn/products + - google.ms/products + - google.mu/products + - google.mv/products + - google.mw/products + - google.ne/products + - google.nl/products + - google.no/products + - google.nr/products + - google.nu/products + - google.pl/products + - google.pn/products + - google.ps/products + - google.pt/products + - google.ro/products + - google.rs/products + - google.ru/products + - google.rw/products + - google.sc/products + - google.se/products + - google.sh/products + - google.si/products + - google.sk/products + - google.sm/products + - google.sn/products + - google.so/products + - google.st/products + - google.td/products + - google.tg/products + - google.tk/products + - google.tl/products + - google.tm/products + - google.to/products + - google.tt/products + - google.us/products + - google.vg/products + - google.vu/products + - google.ws/products + - www.google.ac/products + - www.google.ad/products + - www.google.ae/products + - www.google.am/products + - www.google.as/products + - www.google.at/products + - www.google.az/products + - www.google.ba/products + - www.google.be/products + - www.google.bf/products + - www.google.bg/products + - www.google.bi/products + - www.google.bj/products + - www.google.bs/products + - www.google.by/products + - www.google.ca/products + - www.google.cat/products + - www.google.cc/products + - www.google.cd/products + - www.google.cf/products + - www.google.cg/products + - www.google.ch/products + - www.google.ci/products + - www.google.cl/products + - www.google.cm/products + - www.google.cn/products + - www.google.co.bw/products + - www.google.co.ck/products + - www.google.co.cr/products + - www.google.co.id/products + - www.google.co.il/products + - www.google.co.in/products + - www.google.co.jp/products + - www.google.co.ke/products + - www.google.co.kr/products + - www.google.co.ls/products + - www.google.co.ma/products + - www.google.co.mz/products + - www.google.co.nz/products + - www.google.co.th/products + - www.google.co.tz/products + - www.google.co.ug/products + - www.google.co.uk/products + - www.google.co.uz/products + - www.google.co.ve/products + - www.google.co.vi/products + - www.google.co.za/products + - www.google.co.zm/products + - www.google.co.zw/products + - www.google.com/products + - www.google.com.af/products + - www.google.com.ag/products + - www.google.com.ai/products + - www.google.com.ar/products + - www.google.com.au/products + - www.google.com.bd/products + - www.google.com.bh/products + - www.google.com.bn/products + - www.google.com.bo/products + - www.google.com.br/products + - www.google.com.by/products + - www.google.com.bz/products + - www.google.com.co/products + - www.google.com.cu/products + - www.google.com.cy/products + - www.google.com.do/products + - www.google.com.ec/products + - www.google.com.eg/products + - www.google.com.et/products + - www.google.com.fj/products + - www.google.com.gh/products + - www.google.com.gi/products + - www.google.com.gt/products + - www.google.com.hk/products + - www.google.com.jm/products + - www.google.com.kh/products + - www.google.com.kw/products + - www.google.com.lb/products + - www.google.com.lc/products + - www.google.com.ly/products + - www.google.com.mt/products + - www.google.com.mx/products + - www.google.com.my/products + - www.google.com.na/products + - www.google.com.nf/products + - www.google.com.ng/products + - www.google.com.ni/products + - www.google.com.np/products + - www.google.com.om/products + - www.google.com.pa/products + - www.google.com.pe/products + - www.google.com.ph/products + - www.google.com.pk/products + - www.google.com.pr/products + - www.google.com.py/products + - www.google.com.qa/products + - www.google.com.sa/products + - www.google.com.sb/products + - www.google.com.sg/products + - www.google.com.sl/products + - www.google.com.sv/products + - www.google.com.tj/products + - www.google.com.tn/products + - www.google.com.tr/products + - www.google.com.tw/products + - www.google.com.ua/products + - www.google.com.uy/products + - www.google.com.vc/products + - www.google.com.vn/products + - www.google.cv/products + - www.google.cz/products + - www.google.de/products + - www.google.dj/products + - www.google.dk/products + - www.google.dm/products + - www.google.dz/products + - www.google.ee/products + - www.google.es/products + - www.google.fi/products + - www.google.fm/products + - www.google.fr/products + - www.google.ga/products + - www.google.gd/products + - www.google.ge/products + - www.google.gf/products + - www.google.gg/products + - www.google.gl/products + - www.google.gm/products + - www.google.gp/products + - www.google.gr/products + - www.google.gy/products + - www.google.hn/products + - www.google.hr/products + - www.google.ht/products + - www.google.hu/products + - www.google.ie/products + - www.google.im/products + - www.google.io/products + - www.google.iq/products + - www.google.is/products + - www.google.it/products + - www.google.it.ao/products + - www.google.je/products + - www.google.jo/products + - www.google.kg/products + - www.google.ki/products + - www.google.kz/products + - www.google.la/products + - www.google.li/products + - www.google.lk/products + - www.google.lt/products + - www.google.lu/products + - www.google.lv/products + - www.google.md/products + - www.google.me/products + - www.google.mg/products + - www.google.mk/products + - www.google.ml/products + - www.google.mn/products + - www.google.ms/products + - www.google.mu/products + - www.google.mv/products + - www.google.mw/products + - www.google.ne/products + - www.google.nl/products + - www.google.no/products + - www.google.nr/products + - www.google.nu/products + - www.google.pl/products + - www.google.pn/products + - www.google.ps/products + - www.google.pt/products + - www.google.ro/products + - www.google.rs/products + - www.google.ru/products + - www.google.rw/products + - www.google.sc/products + - www.google.se/products + - www.google.sh/products + - www.google.si/products + - www.google.sk/products + - www.google.sm/products + - www.google.sn/products + - www.google.so/products + - www.google.st/products + - www.google.td/products + - www.google.tg/products + - www.google.tk/products + - www.google.tl/products + - www.google.tm/products + - www.google.to/products + - www.google.tt/products + - www.google.us/products + - www.google.vg/products + - www.google.vu/products + - www.google.ws/products + + Google Video: + parameters: + - q + domains: + - video.google.com + + Goyellow.de: + parameters: + - MDN + domains: + - www.goyellow.de + + Gule Sider: + parameters: + - q + domains: + - www.gulesider.no + + HighBeam: + parameters: + - q + domains: + - www.highbeam.com + + Hit-Parade: + parameters: + - p7 + domains: + - req.-hit-parade.com + - class.hit-parade.com + - www.hit-parade.com + + Holmes: + parameters: + - q + domains: + - holmes.ge + + Hooseek.com: + parameters: + - recherche + domains: + - www.hooseek.com + + Hotbot: + parameters: + - query + domains: + - www.hotbot.com + + Icerockeet: + parameters: + - q + domains: + - blogs.icerocket.com + + ICQ: + parameters: + - q + domains: + - www.icq.com + - search.icq.com + + Ilse: + parameters: + - search_for + domains: + - www.ilse.nl + + Inbox.com: + parameters: + - q + domains: + - inbox.com/search/ + + InfoSpace: + parameters: + - q + - s + domains: + - infospace.com + - dogpile.com + - www.dogpile.com + - metacrawler.com + - webfetch.com + - webcrawler.com + - search.kiwee.com + # powered by InfoSpace + - isearch.babylon.com + - start.facemoods.com + - search.magnetic.com + - search.searchcompletion.com + - clusty.com + + Flyingbird: + parameters: + - q + domains: + - inspsearch.com + - viview.inspsearch.com + + Interia: + parameters: + - q + domains: + - www.google.interia.pl + + I-play: + parameters: + - q + domains: + - start.iplay.com + + I.ua: + parameters: + - q + domains: + - search.i.ua + + IXquick: + parameters: + - query + domains: + - ixquick.com + - www.eu.ixquick.com + - ixquick.de + - www.ixquick.de + - us.ixquick.com + - s1.us.ixquick.com + - s2.us.ixquick.com + - s3.us.ixquick.com + - s4.us.ixquick.com + - s5.us.ixquick.com + - eu.ixquick.com + - s8-eu.ixquick.com + - s1-eu.ixquick.de + + Jyxo: + parameters: + - q + domains: + - jyxo.1188.cz + + Jungle Spider: + parameters: + - q + domains: + - www.jungle-spider.de + + Jungle Key: + parameters: + - query + domains: + - junglekey.com + - junglekey.fr + + Kataweb: + parameters: + - q + domains: + - www.kataweb.it + + Kvasir: + parameters: + - q + domains: + - www.kvasir.no + + kununu: + parameters: + - q + domains: + - kununu.com + + Latne: + parameters: + - q + domains: + - www.latne.lv + + La Toile Du Quebec Via Google: + parameters: + - q + domains: + - www.toile.com + - web.toile.com + + Looksmart: + parameters: + - key + domains: + - www.looksmart.com + + Lo.st: + parameters: + - x_query + domains: + - lo.st + + Lycos: + parameters: + - query + domains: + - search.lycos.com + - www.lycos.com + - lycos.com + + maailm: + parameters: + - tekst + domains: + - www.maailm.com + + Mail.ru: + parameters: + - q + domains: + - go.mail.ru + + Mamma: + parameters: + - query + domains: + - www.mamma.com + - mamma75.mamma.com + + Marktplaats: + parameters: + - query + domains: + - www.marktplaats.nl + + Maxwebsearch: + parameters: + - query + domains: + - maxwebsearch.com + + Meta: + parameters: + - q + domains: + - meta.ua + + MetaCrawler.de: + parameters: + - qry + domains: + - s1.metacrawler.de + - s2.metacrawler.de + - s3.metacrawler.de + + Metager: + parameters: + - eingabe + domains: + - meta.rrzn.uni-hannover.de + - www.metager.de + + Metager2: + parameters: + - q + domains: + - metager2.de + + Meinestadt: + parameters: + - words + domains: + - www.meinestadt.de + + Mister Wong: + parameters: + - Keywords + domains: + - www.mister-wong.com + - www.mister-wong.de + + Monstercrawler: + parameters: + - qry + domains: + - www.monstercrawler.com + + Mozbot: + parameters: + - q + domains: + - www.mozbot.fr + - www.mozbot.co.uk + - www.mozbot.com + + El Mundo: + parameters: + - q + domains: + - ariadna.elmundo.es + + MySearch: + parameters: + - searchfor + - searchFor + domains: + - www.mysearch.com + - ms114.mysearch.com + - ms146.mysearch.com + - kf.mysearch.myway.com + - ki.mysearch.myway.com + - search.myway.com + - search.mywebsearch.com + + Najdi: + parameters: + - q + domains: + - www.najdi.si + + Nate: + parameters: + - q + domains: + - search.nate.com + + Naver: + parameters: + - query + domains: + - search.naver.com + + Naver Images: + parameters: + - query + domains: + - image.search.naver.com + - imagesearch.naver.com + + Needtofind: + parameters: + - searchfor + domains: + - ko.search.need2find.com + + Neti: + parameters: + - query + domains: + - www.neti.ee + + Nifty: + parameters: + - q + domains: + - search.nifty.com + + Nigma: + parameters: + - s + domains: + - nigma.ru + + Onet: + parameters: + - qt + domains: + - szukaj.onet.pl + + Online.no: + parameters: + - q + domains: + - online.no + + Opplysningen 1881: + parameters: + - Query + domains: + - www.1881.no + + Orange: + parameters: + - q + - kw + domains: + - busca.orange.es + - search.orange.co.uk + - lemoteur.orange.fr + + Paperball: + parameters: + - q + domains: + - www.paperball.de + + PeoplePC: + parameters: + - q + domains: + - search.peoplepc.com + + Picsearch: + parameters: + - q + domains: + - www.picsearch.com + + Plazoo: + parameters: + - q + domains: + - www.plazoo.com + + Poisk.ru: + parameters: + - q + domains: + - poisk.ru + + PriceRunner: + parameters: + - q + domains: + - www.pricerunner.co.uk + + qip: + parameters: + - query + domains: + - search.qip.ru + + Qualigo: + parameters: + - q + domains: + - www.qualigo.at + - www.qualigo.ch + - www.qualigo.de + - www.qualigo.nl + + Rakuten: + parameters: + - qt + domains: + - websearch.rakuten.co.jp + + Rambler: + parameters: + - query + - words + domains: + - nova.rambler.ru + + RPMFind: + parameters: + - query + domains: + - rpmfind.net + - fr2.rpmfind.net + + Road Runner Search: + parameters: + - q + domains: + - search.rr.com + + Sapo: + parameters: + - q + domains: + - pesquisa.sapo.pt + + # Add Scour.com + + Search This: + parameters: + - q + domains: + - www.searchthis.com + + Search.com: + parameters: + - q + domains: + - www.search.com + + Search.ch: + parameters: + - q + domains: + - www.search.ch + + Searchalot: + parameters: + - q + domains: + - searchalot.com + + SearchCanvas: + parameters: + - q + domains: + - www.searchcanvas.com + + Searchy: + parameters: + - q + domains: + - www.searchy.co.uk + + # Add setooz.com + + Seznam: + parameters: + - q + domains: + - search.seznam.cz + + Sharelook: + parameters: + - keyword + domains: + - www.sharelook.fr + + Skynet: + parameters: + - q + domains: + - www.skynet.be + + The Smart Search: + parameters: + - q + domains: + - thesmartsearch.net + - www.thesmartsearch.net + + Sogou: + parameters: + - query + - w + domains: + - www.sougou.com + - www.soso.com + + Softonic: + parameters: + - q + domains: + - search.softonic.com + + SoSoDesk: + parameters: + - q + domains: + - sosodesktop.com + - search.sosodesktop.com + + Snapdo: + parameters: + - q + domains: + - search.snapdo.com + + Startpagina: + parameters: + - q + domains: + - startgoogle.startpagina.nl + + Startsiden: + parameters: + - q + domains: + - www.startsiden.no + + suche.info: + parameters: + - q + domains: + - suche.info + + Suchmaschine.com: + parameters: + - suchstr + domains: + - www.suchmaschine.com + + Suchnase: + parameters: + - q + domains: + - www.suchnase.de + + TalkTalk: + parameters: + - query + domains: + - www.talktalk.co.uk + + Technorati: + parameters: + - q + domains: + - technorati.com + + Telstra: + parameters: + - find + domains: + - search.media.telstra.com.au + + Teoma: + parameters: + - q + domains: + - www.teoma.com + + Terra: + parameters: + - query + domains: + - buscador.terra.es + - buscador.terra.cl + - buscador.terra.com.br + + Tiscali: + parameters: + - q + - key + domains: + - search.tiscali.it + - search-dyn.tiscali.it + - hledani.tiscali.cz + + Tixuma: + parameters: + - sc + domains: + - www.tixuma.de + + T-Online: + parameters: + - q + domains: + - suche.t-online.de + - brisbane.t-online.de + - navigationshilfe.t-online.de + + Toolbarhome: + parameters: + - q + domains: + - www.toolbarhome.com + - vshare.toolbarhome.com + + Trouvez.com: + parameters: + - query + domains: + - www.trouvez.com + + TrovaRapido: + parameters: + - q + domains: + - www.trovarapido.com + + Trusted-Search: + parameters: + - w + domains: + - www.trusted--search.com + + Tut.by: + parameters: + - query + domains: + - search.tut.by + + Twingly: + parameters: + - q + domains: + - www.twingly.com + + UKR.net: + parameters: + - q + domains: + - search.ukr.net + + uol.com.br: + parameters: + - q + domains: + - busca.uol.com.br + + URL.ORGanizier: + parameters: + - q + domains: + - www.url.org + + Vinden: + parameters: + - q + domains: + - www.vinden.nl + + Vindex: + parameters: + - search_for + domains: + - www.vindex.nl + - search.vindex.nl + + Virgilio: + parameters: + - qs + domains: + - ricerca.virgilio.it + - ricercaimmagini.virgilio.it + - ricercavideo.virgilio.it + - ricercanews.virgilio.it + - mobile.virgilio.it + + Voila: + parameters: + - rdata + - kw + domains: + - search.ke.voila.fr + - www.lemoteur.fr + + Volny: + parameters: + - search + domains: + - web.volny.cz + + Walhello : + parameters: + - key + domains: + - www.walhello.info + - www.walhello.com + - www.walhello.de + - www.walhello.nl + + Web.de: + parameters: + - su + domains: + - suche.web.de + + Web.nl: + parameters: + - zoekwoord + domains: + - www.web.nl + + Weborama: + parameters: + - QUERY + domains: + - www.weborama.com + + WebSearch: + parameters: + - qkw + - q + domains: + - www.websearch.com + + Winamp: + parameters: + - q + domains: + - search.winamp.com + + Witch: + parameters: + - search + domains: + - www.witch.de + + Wirtualna Polska: + parameters: + - szukaj + domains: + - szukaj.wp.pl + + WWW: + parameters: + - query + domains: + - search.www.ee + + X-recherche: + parameters: + - MOTS + domains: + - www.x-recherche.com + + Yahoo!: + parameters: + - p + - q + domains: + - search.yahoo.com + - yahoo.com + - ar.search.yahoo.com + - ar.yahoo.com + - au.search.yahoo.com + - au.yahoo.com + - br.search.yahoo.com + - br.yahoo.com + - cade.searchde.yahoo.com + - cade.yahoo.com + - chinese.searchinese.yahoo.com + - chinese.yahoo.com + - cn.search.yahoo.com + - cn.yahoo.com + - de.search.yahoo.com + - de.yahoo.com + - dk.search.yahoo.com + - dk.yahoo.com + - es.search.yahoo.com + - es.yahoo.com + - espanol.searchpanol.yahoo.com + - espanol.yahoo.com + - fr.search.yahoo.com + - fr.yahoo.com + - ie.search.yahoo.com + - ie.yahoo.com + - it.search.yahoo.com + - it.yahoo.com + - kr.search.yahoo.com + - kr.yahoo.com + - mx.search.yahoo.com + - mx.yahoo.com + - no.search.yahoo.com + - no.yahoo.com + - nz.search.yahoo.com + - nz.yahoo.com + - one.cn.yahoo.com + - one.searchn.yahoo.com + - qc.search.yahoo.com + - qc.yahoo.com + - se.search.yahoo.com + - se.yahoo.com + - search.searcharch.yahoo.com + - uk.search.yahoo.com + - uk.yahoo.com + - www.yahoo.co.jp + - search.yahoo.co.jp + # powered by Yahoo + - www.cercato.it + - search.offerbox.com + - ys.mirostart.com + + Yahoo! Images: + parameters: + - p + - q + domains: + - image.yahoo.cn + - images.search.yahoo.com + + Yam: + parameters: + - k + domains: + - search.yam.com + + Yandex: + parameters: + - text + domains: + - yandex.ru + - yandex.ua + - yandex.com + - yandex.by + - www.yandex.ru + - www.yandex.ua + - www.yandex.com + - www.yandex.by + + Yandex Images: + parameters: + - text + domains: + - images.yandex.ru + - images.yandex.ua + - images.yandex.com + + Yasni: + parameters: + - query + domains: + - www.yasni.de + - www.yasni.com + - www.yasni.co.uk + - www.yasni.ch + - www.yasni.at + + Yatedo: + parameters: + - q + domains: + - www.yatedo.com + - www.yatedo.fr + + # Add Yellowmap: + + Yippy: + parameters: + - q + - query + domains: + - search.yippy.com + + YouGoo: + parameters: + - q + domains: + - www.yougoo.fr + + Zapmeta: + parameters: + - q + - query + domains: + - www.zapmeta.com + - www.zapmeta.nl + - www.zapmeta.de + - uk.zapmeta.com + + Zoek: + parameters: + - q + domains: + - www3.zoek.nl + + Zhongsou: + parameters: + - w + domains: + - p.zhongsou.com + + Zoeken: + parameters: + - q + domains: + - www.zoeken.nl + + Zoohoo: + parameters: + - q + domains: + - zoohoo.cz + + + +# ####################################################################################################### +# +# PAID MEDIA + +paid: + + Acuity Ads: + domains: + - acuityplatform.com + + Adform: + domains: + - adform.net + + AdRoll: + domains: + - adroll.com + + AppNexus: + domains: + - ib.adnxs.com + - adnxs.com + - 247realmedia.com + + AudienceScience: + domains: + - wunderloop.net + + BidSwitch: + domains: + - bidswitch.net + + Casale Media: + domains: + - casalemedia.com + + Criteo: + domains: + - cas.jp.as.criteo.com + - cas.criteo.com + + Doubleclick: + domains: + - ad.doubleclick.net + - ad-apac.doubleclick.net + - s0.2mdn.net + - s1.2mdn.net + - dp.g.doubleclick.net + - pubads.g.doubleclick.net + + Eyeota: + domains: + - eyeota.net + + Flashtalking: + domains: + - flashtalking.com + - servedby.flashtalking.com + + Fluct: + domains: + - adingo.jp + + Google: + domains: + - www.googleadservices.com + - partner.googleadservices.com + - googleads.g.doubleclick.net + - tpc.googlesyndication.com + - googleadservices.com + - imasdk.googleapis.com + + LifeStreet: + domains: + - lfstmedia.com + + Jivox: + domains: + - jivox.com + + MicroAd: + domains: + - microad.jp + + Mixpo: + domains: + - mixpo.com + + Mozo: + domains: + - mozo.com.au + - a.mozo.com.au + + Neustar AdAdvisor: + domains: + - adadvisor.net + + ONE by AOL: + domains: + - nexage.com + + OpenX: + domains: + - us-ads.openx.net + - openx.net + - servedbyopenx.com + - openxenterprise.com + + Outbrain: + domains: + - paid.outbrain.com + + Plista: + domains: + - farm.plista.com + + PubMatic: + domains: + - sshowads.pubmatic.com + + Rubicon Project: + domains: + - optimized-by.rubiconproject.com + + Sizmek: + domains: + - bs.serving-sys.com + + Sociomantic Labs: + domains: + - sociomantic.com + + Sonobi: + domains: + - sonobi.com + + Sovrn: + domains: + - lijit.com + + SteelHouse: + domains: + - steelhousemedia.com + + StickyADS.tv: + domains: + - stickyadstv.com + - sfx.stickyadstv.com + + Taboola: + domains: + - trc.taboola.com + - api.taboola.com + - taboola.com + + Tribal Fusion: + domains: + - cdnx.tribalfusion.com + + White Pages: + domains: + - www.whitepages.com.au + - mobile.whitepages.com.au + + Yieldmo: + domains: + - yieldmo.com + + ZEDO: + domains: + - zedo.com + - z1.zedo.com diff --git a/src/test/java/com/snowplowanalytics/refererparser/ParserTest.java b/src/test/java/com/snowplowanalytics/refererparser/ParserTest.java new file mode 100644 index 0000000..3ea1be8 --- /dev/null +++ b/src/test/java/com/snowplowanalytics/refererparser/ParserTest.java @@ -0,0 +1,69 @@ +package com.snowplowanalytics.refererparser; + +import static org.junit.Assert.assertEquals; + +import java.io.IOException; +import java.net.URL; +import java.net.MalformedURLException; +import java.net.URI; +import java.net.URISyntaxException; + +import org.junit.Before; +import org.junit.Test; +import org.json.JSONException; +import org.json.JSONTokener; +import org.json.JSONObject; +import org.json.JSONArray; + +public class ParserTest { + + private Parser parser; + + @Before + public void createParser() throws CorruptYamlException { + parser = new Parser(); + } + + @Test + public void refererTests() throws MalformedURLException, JSONException { + JSONTokener tok = new JSONTokener( ParserTest.class.getResourceAsStream("/referer-tests.json")); + JSONArray root = new JSONArray(tok); + + for (int i = 0; i < root.length(); i++) { + JSONObject entry = (JSONObject) root.get(i); + + Referer actual = parser.parse(new URL(entry.getString("uri")), "www.snowplowanalytics.com"); + assertEquals(entry.getString("spec") + " medium", entry.getString("medium"), actual.medium.toString()); + assertEquals(entry.getString("spec") + " source", entry.get("source"), actual.source); + assertEquals(entry.getString("spec") + " term", entry.get("term"), actual.term); + } + } + + @Test + public void basicTests() throws URISyntaxException, MalformedURLException, JSONException{ + //Test every signature. + String u = "http://www.google.com/search?q=gateway+oracle+cards+denise+linn&hl=en&client=safari"; + String ref = "www.example.com"; + String expected = "{medium: search, source: Google, term: gateway oracle cards denise linn}"; + + //URI, URI + Referer result = parser.parse(new URI(u), new URI("http://"+ref)); + assertEquals("URI, URI", expected, result.toString()); + + //String, URI + result = parser.parse(u, new URI("http://"+ref)); + assertEquals("String, URI", expected, result.toString()); + + //String, String + result = parser.parse(u, ref); + assertEquals("String, String", expected, result.toString()); + + //URI, String + result = parser.parse(new URI(u), ref); + assertEquals("URI, String", expected, result.toString()); + + //URL, String + result = parser.parse(new URL(u), ref); + assertEquals("URL, String", expected, result.toString()); + } +} diff --git a/src/test/resources/referer-tests.json b/src/test/resources/referer-tests.json new file mode 100644 index 0000000..4397630 --- /dev/null +++ b/src/test/resources/referer-tests.json @@ -0,0 +1,250 @@ +[ + { + "spec": "Google Images search", + "uri": "http://www.google.fr/imgres?q=Ogham+the+celtic+oracle&hl=fr&safe=off&client=firefox-a&hs=ZDu&sa=X&rls=org.mozilla:fr-FR:unofficial&tbm=isch&prmd=imvnsa&tbnid=HUVaj-o88ZRdYM:&imgrefurl=http://www.psychicbazaar.com/oracles/101-ogham-the-celtic-oracle-set.html&docid=DY5_pPFMliYUQM&imgurl=http://mdm.pbzstatic.com/oracles/ogham-the-celtic-oracle-set/montage.png&w=734&h=250&ei=GPdWUIePCOqK0AWp3oCQBA&zoom=1&iact=hc&vpx=129&vpy=276&dur=827&hovh=131&hovw=385&tx=204&ty=71&sig=104115776612919232039&page=1&tbnh=69&tbnw=202&start=0&ndsp=26&ved=1t:429,r:13,s:0,i:114&biw=1272&bih=826", + "medium": "search", + "source": "Google Images", + "term": "Ogham the celtic oracle", + "known": true + }, + { + "spec": "Yahoo! Images search", + "uri": "http://it.images.search.yahoo.com/images/view;_ylt=A0PDodgQmGBQpn4AWQgdDQx.;_ylu=X3oDMTBlMTQ4cGxyBHNlYwNzcgRzbGsDaW1n?back=http%3A%2F%2Fit.images.search.yahoo.com%2Fsearch%2Fimages%3Fp%3DEarth%2BMagic%2BOracle%2BCards%26fr%3Dmcafee%26fr2%3Dpiv-web%26tab%3Dorganic%26ri%3D5&w=1064&h=1551&imgurl=mdm.pbzstatic.com%2Foracles%2Fearth-magic-oracle-cards%2Fcard-1.png&rurl=http%3A%2F%2Fwww.psychicbazaar.com%2Foracles%2F143-earth-magic-oracle-cards.html&size=2.8+KB&name=Earth+Magic+Oracle+Cards+-+Psychic+Bazaar&p=Earth+Magic+Oracle+Cards&oid=f0a5ad5c4211efe1c07515f56cf5a78e&fr2=piv-web&fr=mcafee&tt=Earth%2BMagic%2BOracle%2BCards%2B-%2BPsychic%2BBazaar&b=0&ni=90&no=5&ts=&tab=organic&sigr=126n355ib&sigb=13hbudmkc&sigi=11ta8f0gd&.crumb=IZBOU1c0UHU", + "medium": "search", + "source": "Yahoo! Images", + "term": "Earth Magic Oracle Cards", + "known": true + }, + { + "spec": "Powered by Google", + "uri": "http://isearch.avg.com/pages/images.aspx?q=tarot+card+change&sap=dsp&lang=en&mid=209215200c4147d1a9d6d1565005540b-b0d4f81a8999f5981f04537c5ec8468fd5234593&cid=%7B50F9298B-C111-4C7E-9740-363BF0015949%7D&v=12.1.0.21&ds=AVG&d=7%2F23%2F2012+10%3A31%3A08+PM&pr=fr&sba=06oENya4ZG1YS6vOLJwpLiFdjG91ICt2YE59W2p5ENc2c4w8KvJb5xbvjkj3ceMjnyTSpZq-e6pj7GQUylIQtuK4psJU60wZuI-8PbjX-OqtdX3eIcxbMoxg3qnIasP0ww2fuID1B-p2qJln8vBHxWztkpxeixjZPSppHnrb9fEcx62a9DOR0pZ-V-Kjhd-85bIL0QG5qi1OuA4M1eOP4i_NzJQVRXPQDmXb-CpIcruc2h5FE92Tc8QMUtNiTEWBbX-QiCoXlgbHLpJo5Jlq-zcOisOHNWU2RSHYJnK7IUe_SH6iQ.%2CYT0zO2s9MTA7aD1mNjZmZDBjMjVmZDAxMGU4&snd=hdr&tc=test1", + "medium": "search", + "source": "Google", + "term": "tarot card change", + "known": true + }, + { + "spec": "Google search #1", + "uri": "http://www.google.com/search", + "medium": "search", + "source": "Google", + "term": null, + "known": true + }, + { + "spec": "Google search #2", + "uri": "http://www.google.com/search?q=gateway+oracle+cards+denise+linn&hl=en&client=safari", + "medium": "search", + "source": "Google", + "term": "gateway oracle cards denise linn", + "known": true + }, + { + "spec": "Yahoo! search", + "uri": "http://es.search.yahoo.com/search;_ylt=A7x9QbwbZXxQ9EMAPCKT.Qt.?p=BIEDERMEIER+FORTUNE+TELLING+CARDS&ei=utf-8&type=685749&fr=chr-greentree_gc&xargs=0&pstart=1&b=11", + "medium": "search", + "source": "Yahoo!", + "term": "BIEDERMEIER FORTUNE TELLING CARDS", + "known": true + }, + { + "spec": "PriceRunner search", + "uri": "http://www.pricerunner.co.uk/search?displayNoHitsMessage=1&q=wild+wisdom+of+the+faery+oracle", + "medium": "search", + "source": "PriceRunner", + "term": "wild wisdom of the faery oracle", + "known": true + }, + { + "spec": "Bing Images search", + "uri": "http://www.bing.com/images/search?q=psychic+oracle+cards&view=detail&id=D268EDDEA8D3BF20AF887E62AF41E8518FE96F08", + "medium": "search", + "source": "Bing Images", + "term": "psychic oracle cards", + "known": true + }, + { + "spec": "IXquick search", + "uri": "https://s3-us3.ixquick.com/do/search", + "medium": "search", + "source": "IXquick", + "term": null, + "known": true + }, + { + "spec": "AOL search", + "uri": "http://aolsearch.aol.co.uk/aol/search?s_chn=hp&enabled_terms=&s_it=aoluk-homePage50&q=pendulums", + "medium": "search", + "source": "AOL", + "term": "pendulums", + "known": true + }, + { + "spec": "AOL search.com", + "uri": "http://www.aolsearch.com/search?s_pt=hp&s_gl=NL&query=voorbeeld+cv+competenties&invocationType=tb50hpcnnbie7-nl-nl", + "medium": "search", + "source": "AOL", + "term": "voorbeeld cv competenties", + "known": true + }, + { + "spec": "Ask search", + "uri": "http://uk.search-results.com/web?qsrc=1&o=1921&l=dis&q=pendulums&dm=ctry&atb=sysid%3D406%3Aappid%3D113%3Auid%3D8f40f651e7b608b5%3Auc%3D1346336505%3Aqu%3Dpendulums%3Asrc%3Dcrt%3Ao%3D1921&locale=en_GB", + "medium": "search", + "source": "Ask", + "term": "pendulums", + "known": true + }, + { + "spec": "Mail.ru search", + "uri": "http://go.mail.ru/search?q=Gothic%20Tarot%20Cards&where=any&num=10&rch=e&sf=20", + "medium": "search", + "source": "Mail.ru", + "term": "Gothic Tarot Cards", + "known": true + }, + { + "spec": "Yandex search", + "uri": "http://images.yandex.ru/yandsearch?text=Blue%20Angel%20Oracle%20Blue%20Angel%20Oracle&noreask=1&pos=16&rpt=simage&lr=45&img_url=http%3A%2F%2Fmdm.pbzstatic.com%2Foracles%2Fblue-angel-oracle%2Fbox-small.png", + "medium": "search", + "source": "Yandex Images", + "term": "Blue Angel Oracle Blue Angel Oracle", + "known": true + }, + { + "spec": "Ask toolbar search", + "uri": "http://search.tb.ask.com/search/GGmain.jhtml?cb=AYY&pg=GGmain&p2=%5EAYY%5Exdm071%5EYYA%5Eid&n=77fdaa55&qid=c2678d9147654034bb8b16daa7bfb48c&ss=sub&st=hp&ptb=F9FC6C22-EAE6-4D1E-8126-A70119B6E02F&si=flvrunner&tpr=hst&searchfor=CARA+MEMASAK+CUMI+CUMI&ots=1219016089614", + "medium": "search", + "source": "Ask Toolbar", + "term": "CARA MEMASAK CUMI CUMI", + "known": true + }, + { + "spec": "Ask toolbar search #2", + "uri": "http://search.tb.ask.com/search/GGmain.jhtml?&st=hp&p2=%5EZU%5Exdm458%5EYYA%5Eus&n=77fda1bd&ptb=F0B68CA5-4791-4376-BFCC-5F0100329FB6&si=CMKg9-nX07oCFSjZQgodcikACQ&tpr=hpsbsug&searchfor=test", + "medium": "search", + "source": "Ask Toolbar", + "term": "test", + "known": true + }, + { + "spec": "Voila search", + "uri": "http://search.ke.voila.fr/?module=voila&bhv=web_fr&kw=test", + "medium": "search", + "source": "Voila", + "term": "test", + "known": true + }, + { + "spec": "Dale search", + "uri": "http://www.dalesearch.com/?q=+lego.nl+%2Fclub&s=web&as=0&rlz=0&babsrc=HP_ss", + "medium": "search", + "source": "Dalesearch", + "term": " lego.nl /club", + "known": true + }, + { + "spec": "Twitter redirect", + "uri": "http://t.co/chrgFZDb", + "medium": "social", + "source": "Twitter", + "term": null, + "known": true + }, + { + "spec": "Facebook social", + "uri": "http://www.facebook.com/l.php?u=http%3A%2F%2Fwww.psychicbazaar.com&h=yAQHZtXxS&s=1", + "medium": "social", + "source": "Facebook", + "term": null, + "known": true + }, + { + "spec": "Facebook mobile", + "uri": "http://m.facebook.com/l.php?u=http%3A%2F%2Fwww.psychicbazaar.com%2Fblog%2F2012%2F09%2Fpsychic-bazaar-reviews-tarot-foundations-31-days-to-read-tarot-with-confidence%2F&h=kAQGXKbf9&s=1", + "medium": "social", + "source": "Facebook", + "term": null, + "known": true + }, + { + "spec": "Odnoklassniki", + "uri": "http://www.odnoklassniki.ru/dk?cmd=logExternal&st._aid=Conversations_Openlink&st.name=externalLinkRedirect&st.link=http%3A%2F%2Fwww.psychicbazaar.com%2Foracles%2F187-blue-angel-oracle.html", + "medium": "social", + "source": "Odnoklassniki", + "term": null, + "known": true + }, + { + "spec": "Tumblr social #1", + "uri": "http://www.tumblr.com/dashboard", + "medium": "social", + "source": "Tumblr", + "term": null, + "known": true + }, + { + "spec": "Tumblr w subdomain", + "uri": "http://psychicbazaar.tumblr.com/", + "medium": "social", + "source": "Tumblr", + "term": null, + "known": true + }, + { + "spec": "Yahoo! Mail", + "uri": "http://36ohk6dgmcd1n-c.c.yom.mail.yahoo.net/om/api/1.0/openmail.app.invoke/36ohk6dgmcd1n/11/1.0.35/us/en-US/view.html/0", + "medium": "email", + "source": "Yahoo! Mail", + "term": null, + "known": true + }, + { + "spec": "Outlook.com mail", + "uri": "http://co106w.col106.mail.live.com/default.aspx?rru=inbox", + "medium": "email", + "source": "Outlook.com", + "term": null, + "known": true + }, + { + "spec": "Orange Webmail", + "uri": "http://webmail1m.orange.fr/webmail/fr_FR/read.html?FOLDER=SF_INBOX&IDMSG=8594&check=&SORTBY=31", + "medium": "email", + "source": "Orange Webmail", + "term": null, + "known": true + }, + { + "spec": "Internal HTTP", + "uri": "http://www.snowplowanalytics.com/about/team", + "medium": "internal", + "source": null, + "term": null, + "known": false + }, + { + "spec": "Internal HTTPS", + "uri": "https://www.snowplowanalytics.com/account/profile", + "medium": "internal", + "source": null, + "term": null, + "known": false + }, + { + "spec": "Internal subdomain HTTP", + "uri": "http://www.subdomain1.snowplowanalytics.com/account/profile", + "medium": "internal", + "source": null, + "term": null, + "known": false + }, + { + "spec": "Internal subdomain HTTPS", + "uri": "http://www.subdomain2.snowplowanalytics.com/account/profile", + "medium": "internal", + "source": null, + "term": null, + "known": false + } +] From 7fbe6f105056347b1aa96d85d640702ad7c39069 Mon Sep 17 00:00:00 2001 From: wiktorolko <40569041+wiktorolko@users.noreply.github.com> Date: Wed, 31 Oct 2018 11:05:33 +0100 Subject: [PATCH 2/5] Add ability to publish to bintray and central (closes #3) --- .travis.yml | 7 ++ .travis/deploy.sh | 14 ++++ build.gradle | 82 +++++++++++++++++++ settings.gradle | 1 + .../refererparser/Medium.java | 2 +- .../refererparser/Parser.java | 2 +- .../refererparser/Referer.java | 2 +- 7 files changed, 107 insertions(+), 3 deletions(-) create mode 100755 .travis/deploy.sh create mode 100644 settings.gradle diff --git a/.travis.yml b/.travis.yml index 1776473..812bdcf 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,3 +6,10 @@ jdk: script: - ./gradlew build + +deploy: + skip_cleanup: true + provider: script + script: ./.travis/deploy.sh $TRAVIS_TAG + on: + tags: true diff --git a/.travis/deploy.sh b/.travis/deploy.sh new file mode 100755 index 0000000..036d5dc --- /dev/null +++ b/.travis/deploy.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +tag_version=$1 + +cd $TRAVIS_BUILD_DIR +pwd + +project_version=`cat VERSION` +if [ "${project_version}" == "${tag_version}" ]; then + ./gradlew bintrayUpload +else + echo "Tag version '${tag_version}' doesn't match version in project ('${project_version}'). Aborting!" + exit 1 +fi diff --git a/build.gradle b/build.gradle index 098d53b..e902bdf 100644 --- a/build.gradle +++ b/build.gradle @@ -1,9 +1,13 @@ plugins { id 'java' + id 'maven-publish' + id 'com.jfrog.bintray' version '1.8.4' } group = 'com.snowplowanalytics' +archivesBaseName = 'java-referer-parser' version = '0.4.0' + sourceCompatibility = '1.8' targetCompatibility = '1.8' @@ -16,4 +20,82 @@ dependencies { compile 'org.apache.httpcomponents:httpclient:4.5.3' testCompile 'junit:junit:4.12' testCompile 'org.json:json:20180813' +} + +bintray { + user = System.getenv('BINTRAY_USER') + key = System.getenv('BINTRAY_API_KEY') + + pkg { + repo = 'snowplow-maven' + name = archivesBaseName + licenses = ['Apache-2.0'] + vcsUrl = 'https://github.com/snowplow-referer-parser/java-referer-parser.git' + } + publications = ['mavenJava'] + version { + name = version + gpg { + sign = true + } + mavenCentralSync { + sync = true + user = System.getenv('SONA_USER') + password = System.getenv('SONA_PASS') + } + } +} + +task javadocJar(type: Jar) { + classifier = 'javadoc' + from javadoc +} + +task sourcesJar(type: Jar) { + classifier = 'sources' + from sourceSets.main.allSource +} + +def pomConfig = { + licenses { + license { + name "The Apache Software License, Version 2.0" + url "http://www.apache.org/licenses/LICENSE-2.0.txt" + distribution "repo" + } + } + developers { + developer { + id 'alexanderdean' + name 'Alexander Dean' + email 'alex@snowplowanalytics.com' + } + } + + scm { + connection 'https://github.com/snowplow-referer-parser/java-referer-parser.git' + developerConnection 'https://github.com/snowplow-referer-parser/java-referer-parser.git' + url 'https://github.com/snowplow-referer-parser/java-referer-parser' + } +} + +// Create the publication with the pom configuration: +publishing { + publications { + mavenJava(MavenPublication) { + from components.java + artifact sourcesJar + artifact javadocJar + groupId group + artifactId 'java-referer-parser' + version version + pom.withXml { + def root = asNode() + root.appendNode('description', 'This is the Java implementation of referer-parser, the library for extracting attribution data from referer (sic) URLs.') + root.appendNode('name', 'Java Referer Parser') + root.appendNode('url', 'https://github.com/snowplow-referer-parser/java-referer-parser') + root.children().last() + pomConfig + } + } + } } \ No newline at end of file diff --git a/settings.gradle b/settings.gradle new file mode 100644 index 0000000..3749d0e --- /dev/null +++ b/settings.gradle @@ -0,0 +1 @@ +enableFeaturePreview('STABLE_PUBLISHING') diff --git a/src/main/java/com/snowplowanalytics/refererparser/Medium.java b/src/main/java/com/snowplowanalytics/refererparser/Medium.java index 17db3d7..7a4c799 100644 --- a/src/main/java/com/snowplowanalytics/refererparser/Medium.java +++ b/src/main/java/com/snowplowanalytics/refererparser/Medium.java @@ -21,7 +21,7 @@ * that we can detect - "medium" * in Google's language. * - * @author Alex Dean (@alexatkeplar) + * @author Alex Dean (@alexatkeplar) */ public enum Medium { UNKNOWN, diff --git a/src/main/java/com/snowplowanalytics/refererparser/Parser.java b/src/main/java/com/snowplowanalytics/refererparser/Parser.java index ee50cc5..4d9c232 100644 --- a/src/main/java/com/snowplowanalytics/refererparser/Parser.java +++ b/src/main/java/com/snowplowanalytics/refererparser/Parser.java @@ -37,7 +37,7 @@ /** * Java implementation of Referer Parser * - * @author Alex Dean (@alexatkeplar) + * @author Alex Dean (@alexatkeplar) */ public class Parser { diff --git a/src/main/java/com/snowplowanalytics/refererparser/Referer.java b/src/main/java/com/snowplowanalytics/refererparser/Referer.java index a8df9b6..b191516 100644 --- a/src/main/java/com/snowplowanalytics/refererparser/Referer.java +++ b/src/main/java/com/snowplowanalytics/refererparser/Referer.java @@ -21,7 +21,7 @@ /** * Referer data class * - * @author Alex Dean (@alexatkeplar) + * @author Alex Dean (@alexatkeplar) */ public class Referer { public final Medium medium; From c275312fc7210bf1d3de96dd5318de55554cd359 Mon Sep 17 00:00:00 2001 From: Alex Dean Date: Sat, 3 Nov 2018 01:07:07 +0000 Subject: [PATCH 3/5] Add sonatype credentials to .travis.yml (close #5) --- .travis.yml | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/.travis.yml b/.travis.yml index 812bdcf..55a97b4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,15 +1,17 @@ language: java install: true - jdk: - oraclejdk8 - script: -- ./gradlew build - +- "./gradlew build" deploy: skip_cleanup: true provider: script - script: ./.travis/deploy.sh $TRAVIS_TAG + script: "./.travis/deploy.sh $TRAVIS_TAG" on: tags: true +env: + global: + - SONA_USER=snowplow + # SONA_PASS + - secure: O0vS0VkbTNmikWAslDvisek/Sq+CjWD5t7znNku7lmyafmEn69aSTeVUtY4+h/xH13r3+aeD61OcsgZ/xKy9t6OGqFqiAZca01B5wey6yG3kvJl3x/nLf/uCC4Fx58nWg+khKnlZSih4xYazEvZ6/mDwWnzCQGxO93la0ml1xpUETXFi+CRHFvcNvP5JV41ESVDEWYslCg4Sn6BzFD77AaHEl7s1efYe1mZm5znsFzc9fn6MtnG7NkDp91CJjwbSrdxAeWl0qVjvViDRk2St+RrsfOq/Dpg3hs947QVT4DGRlch/gfIkFIEmAf9FmdmGo7X/DpBz0zDpw8XEwxcuPrDPvwPiZM11eQ+Vsx/rDbYMr4uBSYfwVJ5n9n94Rd3J5zIJ3rUg1PinXSRD06R51Xk1XyN6xpljZazqFyCLZSY4Hep4FUtu+Ru92co4JbolGp3ttYxWQp3T+LzZTA33j2veJ0GS5oii6S20mEWWCG36ewVKkYw9i8S9ccosXXnAdVELM6I1nVEyZj8YGk/jvxDT+JSRS7r9TZIFVzDl5z1lp7zR+nHRjFy07B2PbVEdaJ41vf8xB+0L9kabjxQdTCrI5pjsQ35MIAEFnD87ZpnD2RnO24WeH1yATQ6FayiPAC52cQmuPXypiQPeG1blA2wib/Lgg2LV9o9Tte0Wt8w= From f13e7352d708b0071dad3d0a2c2c0db743beafd3 Mon Sep 17 00:00:00 2001 From: Alex Dean Date: Sat, 3 Nov 2018 15:21:15 +0000 Subject: [PATCH 4/5] Add Bintray credentials to .travis.yml (close #4) --- .travis.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.travis.yml b/.travis.yml index 55a97b4..f8bcc8b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -15,3 +15,8 @@ env: - SONA_USER=snowplow # SONA_PASS - secure: O0vS0VkbTNmikWAslDvisek/Sq+CjWD5t7znNku7lmyafmEn69aSTeVUtY4+h/xH13r3+aeD61OcsgZ/xKy9t6OGqFqiAZca01B5wey6yG3kvJl3x/nLf/uCC4Fx58nWg+khKnlZSih4xYazEvZ6/mDwWnzCQGxO93la0ml1xpUETXFi+CRHFvcNvP5JV41ESVDEWYslCg4Sn6BzFD77AaHEl7s1efYe1mZm5znsFzc9fn6MtnG7NkDp91CJjwbSrdxAeWl0qVjvViDRk2St+RrsfOq/Dpg3hs947QVT4DGRlch/gfIkFIEmAf9FmdmGo7X/DpBz0zDpw8XEwxcuPrDPvwPiZM11eQ+Vsx/rDbYMr4uBSYfwVJ5n9n94Rd3J5zIJ3rUg1PinXSRD06R51Xk1XyN6xpljZazqFyCLZSY4Hep4FUtu+Ru92co4JbolGp3ttYxWQp3T+LzZTA33j2veJ0GS5oii6S20mEWWCG36ewVKkYw9i8S9ccosXXnAdVELM6I1nVEyZj8YGk/jvxDT+JSRS7r9TZIFVzDl5z1lp7zR+nHRjFy07B2PbVEdaJ41vf8xB+0L9kabjxQdTCrI5pjsQ35MIAEFnD87ZpnD2RnO24WeH1yATQ6FayiPAC52cQmuPXypiQPeG1blA2wib/Lgg2LV9o9Tte0Wt8w= + # BINTRAY_SNOWPLOW_MAVEN_USER + - secure: h5rmXW4fBlOVosqD+SqZ4XKCSXkWOOs6NvyskVrSeRy4la51U7Y1cy8nf3y7s2wlVPrkNMHiUreqrCJST0BZHXABmtxZ1n+oD0pmhQeIi40/z1J7Q/XMhHFqu9dcZAnr3IrdklytnjBHtfchZ5N+DFWa3rsbdJD19kfSo+qUn/+PXBo9ECxJxvAgF4/JYbtNmcoLFoyIp2hJyPkmA8fw1ywCA8bH29SegLMjWsECKp75ZOd0haGcWpSTBRspQV3XlsV8P1i5Q253Xi7qECFdxg5BL3H5b0FzctMZRoUGpeVZdZn7Kuq6zDJOrqgeS+2TJvdAIdrQG0WZCrhSUn7ZWut8n/9fc9kCtgX93fVa1ACTzwfMj3N0eqawkY3HKJQdCvdxtSUDTMRyziUGoD3AkeJaxOQeUuO7O1uzz3+rEzHfzmM+uhD8oWNc0FCaQbpzWGtl3/QkG+13cGjTiOaAJJ+eTDTkamsPLG6k+KJve4xx+xbZsUbo3R7Cx7M9Snt3sKEozg1H6KRCtxSg5soAOWRGihGAh9QwOQ4E2aOS04lqsaLdYtSPlTUDMxcuEnCzBEHlJ/t/ZrfGuV5vKHl3ld0IedM5x143XUwqtuh3KXyzSCq84rHtzDjXpomo0Jk0xU4jqWO5fW6w3zRo0vefa3IqS3/bWRpRVUpmvZZymvY= + # BINTRAY_SNOWPLOW_MAVEN_API_KEY + - secure: RVUO4rsDZsGiYFJMJBhZxXDWqTYNbWCF5PGOpF/FYdZm4a/Nw7++xagbFDX1XrC+Tgp4EoESSwk2aGJI8gRYMkYoculsG7UZDXQ/l7H98tYu6iG0kGf4nZohzZHK2ZiHthANcffsJEW8B+dAIv+v8inml5QgurYUPr5e7vwvqGfZIzUSMoTY+juFm/GK/jMX+gge5ZbSEg8iq+Ven+Vha2jw3KLynKl8L06c0Yjsxja2YLySCjNhQ0aXcp37FuBMt/8oaDalGljXQSPLdo1OXD1nYcg6hATzYavEsvGEGzynNl78CZDIMD6eY+u17tOXSmjW8Tdzk1Y8L0q03NPAbJaLi8ruoGoyiNyApsNBzXqmfUvN+4rgRLv+mYM1R+WqRavMvk0mZWw/kY9A7lUKdML81rCl9jHgMlFLwNOj8r6IxWk9JrpI4lD+TxASt4pprAeyGcZKzjMZxgtjwmsU4Hdx468WjZWxfYIIB5VK5DzxOgghkBN+wKtKKG9OVw3RSOaG99MzJB951e71K/khM3mi/83i4DVSrb49c0Wvx3aWntyIccvmst4FBss939cWo2D0c6IYgPp7mH7TGjeDSJ27nHdmjjSBQxTZM8+3tn/P9x4NjjupR8V7nx17/sc74Q9HopVKayfp8BdrtaUGmWMRkVhJ2MZYt3wtyzHRmSc= +>>>>>>> fb9ba41... Add Bintray credentials to .travis.yml (close #4) From f856253836f20ac1328878550104711ed9c87679 Mon Sep 17 00:00:00 2001 From: Nick Date: Thu, 27 Jun 2024 16:41:08 +0100 Subject: [PATCH 5/5] Update README.md --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 3436671..5e1a8dc 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,6 @@ +> [!WARNING] +> This library is no longer maintained. Please see https://github.com/snowplow-referer-parser/scala-referer-parser. + # referer-parser This is the Java implementation of [referer-parser][referer-parser], the library for extracting attribution data from referer (sic) URLs.