Top Related Projects
Open a web search in your terminal.
Privacy-respecting metasearch engine
🖥 📊 🕹 🛠 A curated list of command line apps
A Vim-like interface for Firefox, inspired by Vimperator/Pentadactyl.
Lightweight YouTube client for Linux
Quick Overview
Googler is a command-line tool that allows users to search the web using the Google search engine directly from the terminal. It provides a fast and efficient way to access information without having to open a web browser.
Pros
- Efficient Search: Googler enables users to perform web searches directly from the terminal, saving time and improving productivity.
- Customizable Output: The tool offers various output options, allowing users to customize the display of search results to their preferences.
- Keyboard-Friendly: Googler is designed to be keyboard-friendly, making it easy to navigate and use without a mouse.
- Offline Functionality: The tool can be used offline, making it a useful resource even in areas with limited internet connectivity.
Cons
- Limited Functionality: While Googler provides a convenient way to search the web, it may lack some of the advanced features and customization options available in web-based search engines.
- Dependency on Google: Googler relies on the Google search engine, which means users are subject to any changes or limitations imposed by Google.
- Learning Curve: Some users may find the command-line interface of Googler less intuitive than a traditional web-based search engine, requiring a learning curve.
- Potential Privacy Concerns: By using Googler, users may be sharing their search history and other data with Google, which could raise privacy concerns for some individuals.
Getting Started
To get started with Googler, follow these steps:
-
Install Googler by following the instructions in the project's README.
-
Open a terminal or command prompt and type
googler
followed by your search query. For example:googler "Python programming"
-
Googler will display the search results in the terminal, and you can navigate through them using the provided keyboard shortcuts.
-
Customize the output by using various command-line options, such as:
googler -n 5 "Python programming"
to display the top 5 search resultsgoogler -C "Python programming"
to display the search results in colorgoogler -j "Python programming"
to display the search results in JSON format
-
Explore the project's documentation to learn more about the available features and customization options.
Competitor Comparisons
Open a web search in your terminal.
Pros of s
- Supports multiple search engines (Google, Bing, DuckDuckGo, etc.)
- Offers customizable search providers and aliases
- Provides a more extensive set of command-line options
Cons of s
- Written in Go, which may have a steeper learning curve for contributors
- Larger codebase, potentially more complex to maintain
- May have slower startup time compared to googler
Code Comparison
s:
func (p *Provider) Search(q string, opts *Options) (*http.Response, error) {
// Build the search URL
u := p.BuildURL(q, opts)
// Perform the HTTP request
return HttpRequest(u, opts)
}
googler:
def fetch(url):
try:
return urlopen(url).read().decode('utf-8')
except Exception as e:
print(e, file=sys.stderr)
sys.exit(1)
Key Differences
- s is more versatile with multiple search engine support
- googler focuses specifically on Google search
- s offers more customization options
- googler has a simpler codebase, potentially easier for Python developers to contribute
- Both provide command-line search functionality, but with different levels of complexity and features
Privacy-respecting metasearch engine
Pros of searx
- Web-based interface, accessible from any browser
- Supports multiple search engines and categories
- Self-hostable, providing enhanced privacy
Cons of searx
- More complex setup and maintenance
- Requires server infrastructure to run
- May have slower response times due to aggregating results
Code comparison
searx (Python):
@app.route('/search', methods=['GET', 'POST'])
def search():
if request.method == 'POST':
# Handle POST request
else:
# Handle GET request
googler (Python):
def google_search(query, num_results):
url = f"https://www.google.com/search?q={query}&num={num_results}"
response = requests.get(url)
# Parse and process search results
Key differences
- searx is a full-fledged web application, while googler is a command-line tool
- searx aggregates results from multiple search engines, googler focuses on Google search
- searx offers a graphical interface, googler provides text-based output
- searx requires server setup, googler can be run locally with minimal dependencies
Both projects aim to provide alternative search experiences, but cater to different use cases and user preferences. searx offers a more comprehensive solution for privacy-conscious users, while googler provides a lightweight, terminal-based option for quick searches.
🖥 📊 🕹 🛠 A curated list of command line apps
Pros of awesome-cli-apps
- Comprehensive collection of CLI apps across various categories
- Regularly updated with new additions and community contributions
- Serves as a valuable resource for discovering new CLI tools
Cons of awesome-cli-apps
- Not a standalone application, just a curated list
- Requires additional steps to install and use the listed apps
- May include outdated or deprecated tools if not regularly maintained
Code comparison
Not applicable, as awesome-cli-apps is a curated list and doesn't contain executable code. Googler, on the other hand, is a functional CLI application for Google search. Here's a sample usage of Googler:
googler -n 5 "python programming"
Summary
awesome-cli-apps is a comprehensive resource for discovering CLI applications, while Googler is a specific tool for performing Google searches from the command line. awesome-cli-apps offers a wide range of options but requires additional steps to use the listed tools. Googler provides immediate functionality for its specific purpose. The choice between them depends on whether you're looking for a variety of CLI tools or a dedicated Google search solution.
A Vim-like interface for Firefox, inspired by Vimperator/Pentadactyl.
Pros of Tridactyl
- Browser extension for Firefox, providing keyboard-centric navigation
- Highly customizable with user-defined commands and key bindings
- Emulates Vim-like behavior in the browser, enhancing productivity for power users
Cons of Tridactyl
- Limited to Firefox browser, not available for other platforms
- Steeper learning curve for users unfamiliar with Vim-style commands
- May conflict with some website functionalities or other extensions
Code Comparison
Tridactyl (JavaScript):
tri.excmds.tabopen("https://example.com")
tri.excmds.fillcmdline("open ")
tri.excmds.scrollpage(1)
Googler (Python):
parser.add_argument('-n', '--count', type=int, default=10, help='show N results (default 10)')
url = google_url + urllib.parse.urlencode(url_params)
print(G + '[1]' + W + ' ' + title)
While both projects aim to enhance user experience, Tridactyl focuses on browser interaction, whereas Googler is a command-line tool for Google searches. Tridactyl offers more extensive customization within the browser environment, while Googler provides a lightweight solution for quick searches from the terminal. The code snippets reflect their different approaches: Tridactyl uses JavaScript for browser manipulation, while Googler employs Python for command-line operations and URL handling.
Lightweight YouTube client for Linux
Pros of youtube-viewer
- Specifically designed for YouTube, offering more YouTube-centric features
- Supports video playback within the terminal using mpv or other players
- Provides a GTK GUI option for a more user-friendly interface
Cons of youtube-viewer
- Limited to YouTube searches and functionality
- May require additional dependencies for full feature set
- Less frequently updated compared to googler
Code Comparison
youtube-viewer:
my $results = $youtube->search_videos(
$query,
{
order_by => $config{order_by},
max_results => $config{max_results},
}
);
googler:
results = google.search(
query,
num_results=num_results,
lang=lang,
country=country,
time_period=time_period,
)
Both projects offer command-line search functionality, but youtube-viewer focuses exclusively on YouTube content, while googler provides broader Google search capabilities. youtube-viewer excels in YouTube-specific features and video playback, making it ideal for users primarily interested in YouTube content. However, it lacks the versatility of googler, which can search across various Google services and websites.
googler offers a more lightweight and frequently updated solution for general web searches, while youtube-viewer provides a more specialized tool for YouTube enthusiasts. The choice between the two depends on the user's specific needs and preferences for search functionality and content focus.
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
googler
is a power tool to Google (web, news, videos and site search) from the command-line. It shows the title, URL and abstract for each result, which can be directly opened in a browser from the terminal. Results are fetched in pages (with page navigation). Supports sequential searches in a single googler
instance.
googler
was initially written to cater to headless servers without X. You can integrate it with a text-based browser. However, it has grown into a very handy and flexible utility that delivers much more. For example, fetch any number of results or start anywhere, limit search by any duration, define aliases to google search any number of websites, switch domains easily... all of this in a very clean interface without ads or stray URLs. The shell completion scripts make sure you don't need to remember any options.
googler
isn't affiliated to Google in any way.
Here are some usage examples:
-
Google hello world:
$ googler hello world
-
Fetch 15 results updated within the last 14 months, starting from the 3rd result for the keywords jungle book in site imdb.com:
$ googler -n 15 -s 3 -t m14 -w imdb.com jungle book
Or instead of the last 14 months, look for results specifically between Apr 4, 2016 and Dec 31, 2016:
$ googler -n 15 -s 3 --from 04/04/2016 --to 12/31/2016 -w imdb.com jungle book
-
Read recent news on gadgets:
$ googler -N gadgets
-
Fetch results on IPL cricket from Google India server in English:
$ googler -c in -l en IPL cricket
-
Search for videos on PyCon 2020:
$ googler -V PyCon 2020
-
Search quoted text:
$ googler it\'s a \"beautiful world\" in spring
-
Search for a specific file type:
$ googler instrumental filetype:mp3
-
Disable automatic spelling correction, e.g. fetch results for
googler
instead ofgoogle
:$ googler -x googler
-
I'm feeling lucky search:
$ googler -j leather jackets
-
Website specific search:
$ googler -w amazon.com -w ebay.com digital camera
Site specific search continues at omniprompt.
-
Positional arguments are joined (with delimiting whitespace) to form the final query, so you can be creative with your aliases. For instance, always exclude seoarticlefactory.com from search results:
$ alias googler='googler " -site:seoarticlefactory.com"' $ googler '<hugely popular keyword filled with SEO garbage>'
-
Alias to find definitions of words:
alias define='googler -n 2 define'
-
Look up
n
,p
,o
,O
,q
,g keywords
or a result index at the omniprompt: as the omniprompt recognizes these keys or index strings as commands, you need to prefix them withg
, e.g.,g n g g keywords g 1
-
Input and output redirection:
$ googler -C hello world < input > output
Note that
-C
is required to avoid printing control characters (for colored output). -
Pipe output:
$ googler -C hello world | tee output
-
Use a custom color scheme, e.g., a warm color scheme designed for Solarized Dark (screenshot):
$ googler --colors bjdxxy google $ GOOGLER_COLORS=bjdxxy googler google
-
Tunnel traffic through an HTTPS proxy, e.g., a local Privoxy instance listening on port 8118:
$ googler --proxy localhost:8118 google
By default the environment variable
https_proxy
is used, if defined. -
Quote multiple search keywords to auto-complete (using completion script):
$ googler 'hello w<TAB>
-
More help:
$ googler -h $ man googler
More fun stuff you can try with googler
:
- googler on the iPad
- Print content of results to terminal or listen to it
- Terminal Reading Mode or Reader View
- Stream YouTube videos on desktop
- Search error on StackOverflow from terminal
Table of contents
Features
- Google Search, Google Site Search, Google News, Google Videos
- Fast and clean (no ads, stray URLs or clutter), custom color
- Navigate result pages from omniprompt, open URLs in browser
- Effortless keyword-based site search with googler @t add-on
- Search and option completion scripts for Bash, Zsh and Fish
- Fetch n results in a go, start at the nth result
- Disable automatic spelling correction and search exact keywords
- Specify duration, country/domain (default: worldwide/.com), language
- Google keywords (e.g.
filetype:mime
,site:somesite.com
) support - Open the first result directly in browser (as in I'm Feeling Lucky)
- Non-stop searches: fire new searches at omniprompt without exiting
- HTTPS proxy, User Agent, TLS 1.2 (default) support
- Comprehensive documentation, man page with handy usage examples
- Minimal dependencies
Installation
Dependencies
googler
requires Python 3.6 or later. Only the latest patch release of each minor version is supported.
To copy url to clipboard at the omniprompt, googler
looks for xsel
or xclip
or termux-clipboard-set
(in the same order) on Linux, pbcopy
(default installed) on macOS and clip
(default installed) on Windows. It also supports GNU Screen and tmux copy-paste buffers in the absence of X11.
From a package manager
Install googler
from your package manager. If the version available is dated try an alternative installation method.
Tips for packagers
googler
v2.7 and later ships with an in-place self-upgrade mechanism which you may want to disable. To do this, run
$ make disable-self-upgrade
before installation.
Release packages
Packages for Arch Linux, CentOS, Debian, Fedora, openSUSE and Ubuntu are available with the latest stable release.
From source
If you have git installed, clone this repository. Otherwise download the latest stable release or development version.
To install to the default location (/usr/local
):
$ sudo make install
To remove googler
and associated docs, run
$ sudo make uninstall
PREFIX
is supported, in case you want to install to a different location.
Running standalone
googler
is a standalone executable (and can run even on environments like Termux). From the containing directory:
$ ./googler
Downloading a single file
googler
is a single standalone script, so you could download just a single file if you'd like to.
To install the latest stable version, run
$ sudo curl -o /usr/local/bin/googler https://raw.githubusercontent.com/jarun/googler/v4.3.2/googler && sudo chmod +x /usr/local/bin/googler
You could then let googler upgrade itself by running
$ sudo googler -u
Similarly, if you want to install from git master (risky), run
$ sudo curl -o /usr/local/bin/googler https://raw.githubusercontent.com/jarun/googler/master/googler && sudo chmod +x /usr/local/bin/googler
and upgrade by running
$ sudo googler -u --include-git
Shell completion
Search keyword and option completion scripts for Bash, Fish and Zsh can be found in respective subdirectories of auto-completion/
. Please refer to your shell's manual for installation instructions.
Usage
Cmdline options
usage: googler [-h] [-s N] [-n N] [-N] [-V] [-c TLD] [-l LANG] [-g CC] [-x]
[--colorize [{auto,always,never}]] [-C] [--colors COLORS] [-j] [-t dN] [--from FROM]
[--to TO] [-w SITE] [-e SITE] [--unfilter] [-p PROXY] [--notweak] [--json]
[--url-handler UTIL] [--show-browser-logs] [--np] [-4] [-6] [-u] [--include-git] [-v] [-d]
[KEYWORD [KEYWORD ...]]
Google from the command-line.
positional arguments:
KEYWORD search keywords
optional arguments:
-h, --help show this help message and exit
-s N, --start N start at the Nth result
-n N, --count N show N results (default 10)
-N, --news show results from news section
-V, --videos show results from videos section
-c TLD, --tld TLD country-specific search with top-level domain .TLD, e.g., 'in' for India
-l LANG, --lang LANG display in language LANG
-g CC, --geoloc CC country-specific geolocation search with country code CC, e.g. 'in' for India.
Country codes are the same as top-level domains
-x, --exact disable automatic spelling correction
--colorize [{auto,always,never}]
whether to colorize output; defaults to 'auto', which enables color when stdout
is a tty device; using --colorize without an argument is equivalent to
--colorize=always
-C, --nocolor equivalent to --colorize=never
--colors COLORS set output colors (see man page for details)
-j, --first, --lucky open the first result in web browser and exit
-t dN, --time dN time limit search [h5 (5 hrs), d5 (5 days), w5 (5 weeks), m5 (5 months), y5 (5
years)]
--from FROM starting date/month/year of date range; must use American date format with
slashes, e.g., 2/24/2020, 2/2020, 2020; can be used in conjunction with --to,
and overrides -t, --time
--to TO ending date/month/year of date range; see --from
-w SITE, --site SITE search a site using Google
-e SITE, --exclude SITE
exclude site from results
--unfilter do not omit similar results
-p PROXY, --proxy PROXY
tunnel traffic through an HTTP proxy; PROXY is of the form
[http://][user:password@]proxyhost[:port]
--notweak disable TCP optimizations and forced TLS 1.2
--json output in JSON format; implies --noprompt
--url-handler UTIL custom script or cli utility to open results
--show-browser-logs do not suppress browser output (stdout and stderr)
--np, --noprompt search and exit, do not prompt
-4, --ipv4 only connect over IPv4 (by default, IPv4 is preferred but IPv6 is used as a
fallback)
-6, --ipv6 only connect over IPv6
-u, --upgrade perform in-place self-upgrade
--include-git when used with --upgrade, get latest git master
-v, --version show program's version number and exit
-d, --debug enable debugging
omniprompt keys:
n, p fetch the next or previous set of search results
index open the result corresponding to index in browser
f jump to the first page
o [index|range|a ...] open space-separated result indices, numeric ranges
(sitelinks unsupported in ranges), or all, in browser
open the current search in browser, if no arguments
O [index|range|a ...] like key 'o', but try to open in a GUI browser
g keywords new Google search for 'keywords' with original options
should be used to search omniprompt keys and indices
c index copy url to clipboard
u toggle url expansion
q, ^D, double Enter exit googler
? show omniprompt help
* other inputs issue a new search with original options
Configuration file
googler
doesn't have any! This is to retain the speed of the utility and avoid OS-specific differences. Users can enjoy the advantages of config files using aliases (with the exception of the color scheme, which can be additionally customized through an environment variable; see Colors). There's no need to memorize options.
For example, the following alias for bash/zsh/ksh/etc.
alias g='googler -n 7 -c ru -l ru'
fetches 7 results from the Google Russia server, with preference towards results in Russian.
The alias serves both the purposes of using config files:
- Persistent settings: when the user invokes
g
, it expands to the preferred settings. - Override settings: thanks to the way Python
argparse
works,googler
is written so that the settings in alias are completely overridden by any options passed from cli. So when the same user runsg -l de -c de -n 12 hello world
, 12 results are returned from the Google Germany server, with preference towards results in German.
googler @t
googler @t
is a convenient add-on to Google Site Search with unique keywords. While googler
has an integrated option to search a site, we simplified it further with aliases. The file googler_at contains a list of website search aliases. To source it, run:
$ source googler_at
or,
$ . googler_at
With googler @t
, here's how you search Wikipedia for hexspeak
:
$ @w hexspeak
Oh yes! You can combine other googler
options too! To make life easier, you can also configure your shell to source the file when it starts.
All the aliases start with the @
symbol (hence the name googler @t
) and there is minimum chance they will conflict with any shell commands. Feel free to add your own aliases to the file and contribute back the interesting ones.
Text-based browser integration
googler
works out of the box with several text-based browsers if the BROWSER
environment variable is set. For instance,
$ export BROWSER=w3m
or for one-time use,
$ BROWSER=w3m googler query
Due to certain graphical browsers spewing messages to the console, googler
suppresses browser output by default unless BROWSER
is set to one of the known text-based browsers: currently elinks
, links
, lynx
, w3m
or www-browser
. If you use a different text-based browser, you will need to explicitly enable browser output with the --show-browser-logs
option. If you believe your browser is popular enough, please submit an issue or pull request and we will consider whitelisting it. See the man page for more details on --show-browser-logs
.
If you need to use a GUI browser with BROWSER
set, use the omniprompt key O
. googler
will try to ignore text-based browsers and invoke a GUI browser. Browser logs are always suppressed with O
.
Colors
googler
allows you to customize the color scheme via a six-letter string, reminiscent of BSD LSCOLORS
. The six letters represent the colors of
- indices
- titles
- URLs
- metadata/publishing info (Google News only)
- abstracts
- prompts
respectively. The six-letter string is passed in either as the argument to the --colors
option, or as the value of the environment variable GOOGLER_COLORS
.
We offer the following colors/styles:
Letter | Color/Style |
---|---|
a | black |
b | red |
c | green |
d | yellow |
e | blue |
f | magenta |
g | cyan |
h | white |
i | bright black |
j | bright red |
k | bright green |
l | bright yellow |
m | bright blue |
n | bright magenta |
o | bright cyan |
p | bright white |
A-H | bold version of the lowercase-letter color |
I-P | bold version of the lowercase-letter bright color |
x | normal |
X | bold |
y | reverse video |
Y | bold reverse video |
The default colors string is GKlgxy
, which stands for
- bold bright cyan indices
- bold bright green titles
- bright yellow URLs
- cyan metadata/publishing info
- normal abstracts
- reverse video prompts
Note that
- Bright colors (implemented as
\x1b[90m
â\x1b[97m
) may not be available in all color-capable terminal emulators; - Some terminal emulators draw bold text in bright colors instead;
- Some terminal emulators only distinguish between bold and bright colors via a default-off switch.
Please consult the manual of your terminal emulator as well as the Wikipedia article on ANSI escape sequences.
Domain-only URL
To show the domain names in search results instead of the expanded URL (and use lesser space), set the environment variable DISABLE_URL_EXPANSION
.
Windows Subsystem for Linux (WSL)
On WSL, GUI browsers on the Windows side cannot be detected by default. You need to explicitly set the BROWSER
environment variable to the path of a Windows executable. For instance, you can put the following in your shell's rc:
$ export BROWSER='/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe'
Troubleshooting
-
In some instances
googler
may show fewer number of results than you expect, e.g., if you fetch a single result (-n 1
) it may not show any results. The reason is Google shows some Google service (e.g. Youtube) results, map locations etc. depending on your geographical data, whichgoogler
tries to omit. In some cases Google (the web-service) doesn't show exactly 10 results (default) on a search. We chose to omit these results as far as possible. While this can be fixed, it would need more processing (and more time). You can just navigate forward to fetch the next set of results. -
By default
googler
applies some TCP optimizations and forces TLS 1.2 (on Python 3.4 and above). If you are facing connection issues, try disabling both using the--notweak
switch. -
Google News service is not available if the language is
dk
(Denmark),fi
(Finland) oris
(Iceland). Use-l en
. Please refer to #187 for more information. -
Some users have reported problems with a colored omniprompt (refer to issue #203) with iTerm2 on macOS. To force a plain omniprompt:
export DISABLE_PROMPT_COLOR=1
Notes
-
Initially I raised a pull request but I could see that the last change was made 7 years earlier. In addition, there is no GitHub activity from the original author Henri Hakkinen in past year. I have created this independent repo for the project with the name
googler
. I retained the original copyright information (thoughgoogler
is organically different now). -
Google provides a search API which returns the results in JSON format. However, as per my understanding from the official docs, the API issues the queries against an existing instance of a custom search engine and is limited by 100 search queries per day for free. In addition, I have reservations in paying if they ever change their plan or restrict the API in other ways. So I refrained from coupling with Google plans & policies or exposing my trackable personal custom search API key and identifier for the public. I retained the browser-way of doing it by fetching html, which is a open and free specification.
-
You can find a rofi script for
googler
here. Written by an anonymous user, untested and we don't maintain it. -
The Albert Launcher python plugins repo (awesome-albert-plugins) includes suggestions-enabled search plugins for a variety of websites using googler. Refer to the latter for demos and usage instructions.
Contributions
Pull requests are welcome. Please visit #209 for a list of TODOs.
Developers
- Copyright © 2008 Henri Hakkinen
- Copyright © 2015-2021 Arun Prakash Jana
- Zhiming Wang
- Johnathan Jenkins
- SZ Lin
Special thanks to jeremija and Narrat for their contributions.
Logo
Logo copyright © 2017 Zhiming Wang.
You may freely redistribute it alongside the code, or use it when describing or linking to this project. You should NOT create modified versions of it, make it the logo or icon of your project (except personal forks and/or forks with the goal of upstreaming), or otherwise use it without written permission.
Top Related Projects
Open a web search in your terminal.
Privacy-respecting metasearch engine
🖥 📊 🕹 🛠 A curated list of command line apps
A Vim-like interface for Firefox, inspired by Vimperator/Pentadactyl.
Lightweight YouTube client for Linux
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot