:mag: Google from the terminal

Overview

googler

Latest release Availability License Build Status

Asciicast

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:

  1. Google hello world:

     $ googler hello world
    
  2. 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
    
  3. Read recent news on gadgets:

     $ googler -N gadgets
    
  4. Fetch results on IPL cricket from Google India server in English:

     $ googler -c in -l en IPL cricket
    
  5. Search for videos on PyCon 2020:

     $ googler -V PyCon 2020
    
  6. Search quoted text:

     $ googler it\'s a \"beautiful world\" in spring
    
  7. Search for a specific file type:

     $ googler instrumental filetype:mp3
    
  8. Disable automatic spelling correction, e.g. fetch results for googler instead of google:

     $ googler -x googler
    
  9. I'm feeling lucky search:

     $ googler -j leather jackets
    
  10. Website specific search:

    $ googler -w amazon.com -w ebay.com digital camera
    

    Site specific search continues at omniprompt.

  11. 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>'
    
  12. Alias to find definitions of words:

    alias define='googler -n 2 define'
    
  13. 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 with g, e.g.,

    g n
    g g keywords
    g 1
    
  14. Input and output redirection:

    $ googler -C hello world < input > output
    

    Note that -C is required to avoid printing control characters (for colored output).

  15. Pipe output:

    $ googler -C hello world | tee output
    
  16. 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
    
  17. 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.

  18. Quote multiple search keywords to auto-complete (using completion script):

    $ googler 'hello w<TAB>
    
  19. More help:

    $ googler -h
    $ man googler
    

More fun stuff you can try with googler:

Love smart and efficient utilities? Explore my repositories. Buy me a cup of coffee if they help you.

Donate via PayPal!

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.

Packaging status (expand)


Packaging status

Unlisted packagers:


Snap Store (snap install googler)

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:[email protected]]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 runs g -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

  1. 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, which googler 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.

  2. 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.

  3. Google News service is not available if the language is dk (Denmark), fi (Finland) or is (Iceland). Use -l en. Please refer to #187 for more information.

  4. 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

  1. 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 (though googler is organically different now).

  2. 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.

  3. You can find a rofi script for googler here. Written by an anonymous user, untested and we don't maintain it.

  4. 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.

gitter chat

Developers

  1. Copyright © 2008 Henri Hakkinen
  2. Copyright © 2015-2021 Arun Prakash Jana
  3. Zhiming Wang
  4. Johnathan Jenkins
  5. 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.

Issues
  • TODO list

    TODO list

    Rolling TODO list thread No. 2. Previous thread is #69.


    Possible improvements we'd like to see:

    And moonshots:

    • [ ] Support DDG (possibly in a separate project?)

    PRs welcome!


    Archive:

    enhancement help wanted 
    opened by zmwangx 65
  • TODO list

    TODO list

    Rolling TODO list thread No. 3. Previous thread is #83.


    Possible improvements we'd like to see:

    • [ ] Support all options at omniprompt
    • [ ] Highlight searched keywords in abstract
    • [x] Ubuntu PPA
    • [x] Show YouTube-specific results abstract (more details)
    • [x] Document APIs in NumPy format [owner @jarun]
    • [ ] Refactor and write unit tests
    • [ ] Option-related improvements (too lazy to clarify, just read the comment)

    Suggestions and PRs welcome!

    help wanted 
    opened by jarun 62
  • Build deb package

    Build deb package

    I have improved my deb package building script and figured out uploading from Travis to GitHub releases. If you are interested in one more installation channel, this is almost ready to be integrated. (By the way, I doubt that googler could make its way into Debian's official repositories, so IMO either this or a PPA is the best we can do.)

    My script can build a deb package off any commit-ish, and .travis.yml has been set up to upload the artifact to each pushed tag. Here is an example uploaded automatically from https://travis-ci.org/zmwangx/googler/jobs/126560102:

    • https://github.com/zmwangx/googler/releases/tag/v2.4-testdeb
    • https://github.com/zmwangx/googler/releases/download/v2.4-testdeb/googler_2.4-testdeb-1_amd64.deb

    (Update: See https://github.com/jarun/googler/pull/67#issuecomment-215627032 for something better.)

    Note that this PR cannot be merged as is. All commits except the .travis.yml one are ready, but .travis.yml needs to be adapted to use your API token and upload from jarun/googler instead of zmwangx/googler. I believe all you need to do is to create a token with public_repo access, encrypt the token with Travis's CLI client:

    travis encrypt -r jarun/googler $TOKEN
    

    and replace the current ciphertext with the ciphertext you get.

    opened by zmwangx 50
  • TODO list

    TODO list

    Rolling TODO list thread No. 1. This thread has been archived. Continue discussion in #83.


    Possible improvements we'd like to see:

    And moonshots:

    • [ ] Support DDG (possibly in a separate project?)

    PRs welcome!


    Archived:

    enhancement help wanted 
    opened by zmwangx 47
  • OO refresh

    OO refresh

    This is a huge WIP, intended to group and modularize googler's various functional units, hence lifting googler from its quick-and-dirty origin. (Starting out quick-and-dirty is totally fine, but at some point we need to rethink the structure in order to not dissolve into a pile of unmaintainable mess when we add more features. That's just my opinion.)

    The guiding principle here is to break down big functional units and dissociate state info so that every small blob of code should make as much sense as possible locally, instead of relying on memorizing the effect of another blob that is two hundred lines away. (Bad example: url = url.replace('start=%d&' % oldstart, 'start=%d&' % start, 1), which relies on storing a snapshot of start in oldstart many lines before actually using it; this sort of disconnectedness could be a source of bugs when part of the program is updated.) When we do need persistent state info, they should be packaged into well-defined and well-documented OO interfaces, complete with relevant state manipulation helpers.

    A brief and incomplete checklist:

    • [x] GooglerArgumentParser: absorb type guards;
    • [x] GoogleUrl: URL constructor;
    • [x] GoogleConnection: handle connection opening/renewal and page fetching (including redirection) (should absorb google_get, new_connection and a big chunk of fetch_results);
    • [x] GooglerCmd: OO command line interpreter and executioner (model on cmd.Cmd?).

    Classes should be global-free (except constants and logger):

    • [x] GoogleUrl
    • [x] GoogleConnection
    • [x] GoogleParser
    • [x] Resultlucky should be dealt with outside Result; colors, columns etc. that affect the output should be class variables; json should be dealt with inside Result; oh, and think of a better name for urlindex (urltable maybe?)...
    • [x] GooglerCmd
    • [x] GooglerArgumentParser

    I'm busy recently so it will take a while.

    The finished parts could be reviewed and/or regression-tested and I'd like to have feedback.

    opened by zmwangx 44
  • TODO list

    TODO list

    Rolling TODO list thread No. 4. Previous thread is #87.


    Possible improvements we'd like to see:

    • [ ] google scholar search [ref: #213]
    • [ ] Support all options at omniprompt
    • [x] Ubuntu PPA
    • [x] Show YouTube-specific results abstract (more details)
    • [x] Document APIs in NumPy format [owner @jarun]

    Suggestions and PRs welcome!

    help wanted 
    opened by jarun 42
  • Intermittent

    Intermittent "no results" due to Google sending an alternative layout not supported by the parser

    I'm trying to get the URL of the first result, to use in further scripting. I'm using a command line like: googler -j --url-handler echo Adium software

    It fails intermittently (and frequently) with "No results."

    Is this because of the comment about how ads can affect parsing?

    Mac 10.12.6 [DEBUG] googler version 3.8 [DEBUG] Python version 3.7.3

    Is there any way to make this work? I need the URL for further scripting (using quicklook to preview, passing in to sed/awk to insert into a file, etc.

    opened by mmblz 41
  • Add HTTP proxy support

    Add HTTP proxy support

    2016-06-05 Update. Done, ready for testing, and not experimental.


    Proxy support was requested in #20 and #35 (#35 is kind of ridiculous because there's no way we can "detect" proxy settings of, say, your browser; you either explicitly supply a proxy, or make it system-wide in which case there's no detection required on our part). This is just a starting point.

    This PR does provide some insight into how we can improve the core, mainly in terms of code deduplication. See new_connection and google_get.

    Of course there are limitations:

    • HTTP proxies only, SOCKS proxies not supported;
    • No proxy username & password support, yet;
    • I cannot really test it, because all free proxies I can find on the open web are blocked by Google.

    Therefore, if you want to have proxy support, we need your help!


    @jarun When I was coding this I noticed that ua header is missing from this line. Could you please add it?

    Of course a better approach is to factor out repeated code, as I mentioned above. See google_get.

    enhancement 
    opened by zmwangx 40
  • Improve autocorrect handling: detect autocorrected query and add a prompt command

    Improve autocorrect handling: detect autocorrected query and add a prompt command "exact"

    Details are in commit messages and additions to parser docs. This PR should be considered on a commit-by-commit basis, and each of the latter two commits (cdfe3d0 and ac6e13c) is optional, although I think they are worthy improvements.

    Demo: https://asciinema.org/a/2veowecoo2hpznua9k1bgsnxj.

    Closes #154.

    opened by zmwangx 35
  • homebrew

    homebrew

    it would be great if this could be added to @homebrew !

    opened by sammcj 35
  • exception TrackedTextwrap: the impossible happened at offset nn of text

    exception TrackedTextwrap: the impossible happened at offset nn of text ""

    • Output of googler -d;
    > $ sudo curl -o /usr/local/bin/googler https://raw.githubusercontent.com/jarun/googler/master/googler && sudo chmod +x /usr/local/bin/googler
    >   % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
    >                                  Dload  Upload   Total   Spent    Left  Speed     
    > 100  133k  100  133k    0     0   332k      0 --:--:-- --:--:-- --:--:--  332k
    
    > (base) [email protected]:~ [1121-0532] ✅ 
    > $ alias googler='LC_ALL="en_HK.UTF-8" googler'
    
    > (base) [email protected]:~ [1121-0532] ✅ 
    **> $ googler -d -l zh -C -n22 --np hello World | tee /tmp/out.txt**
    > [DEBUG] googler version 4.3.2
    > [DEBUG] Python version 3.7.4
    > [DEBUG] Platform: Linux-5.11.0-40-generic-x86_64-with-debian-bullseye-sid
    > [DEBUG] Connecting to new host www.google.com
    > [DEBUG] Opened socket to 172.217.24.68:443
    > [DEBUG] new_connection completed in 0.053s
    > [DEBUG] Fetching URL /search?hl=zh&ie=UTF-8&num=22&oe=UTF-8&q=hello+World&sei=NBvpmsPLR_+VYsRMb0a20A
    > [DEBUG] Cookie: 1P_JAR=2021-11-20-21
    > [DEBUG] fetch_page completed in 0.590s
    > [DEBUG] Response body written to '/tmp/googler-response-j2b7_j1u.html'.
    > [DEBUG] parse completed in 0.349s
    > 
    > Traceback (most recent call last):
    >   File "/usr/bin/googler", line 210, in __init__
    >  1.  Hello World - 维基百科,自由的百科全书
    >      https://zh.wikipedia.org/zh/Hello_World
    >      Hello, World是指在電腦螢幕顯示「Hello, World!」(你好,世界!)字串的電腦程式。相關的程式通常
    >      都是每種電腦編程語言最基本、最簡單的程序,也會用作示範一個編程 ...
    > 
    >  2.  "Hello, World!" program - Wikipedia
    >      https://en.wikipedia.org/wiki/%22Hello,_World!%22_program
    >      A "Hello, World!" program generally is a computer program that outputs or displays the message "Hello, World!". Such a program is very simple in
    >      most ...
    > 
    >  3.  hello world(程序代码)_百度百科
    >      https://baike.baidu.com/item/hello%20world/85501
    >      Hello World 中文意思是『你好,世界』。因为The C Programming Language
    >      中使用它做为第一个演示程序,非常著名,所以后来的程序员在学习编程或进行设备调 试时延续了 ...
    > 
    >  4.  Hello World 聊天翻译软件- 首页
    >      https://www.helloword.com.cn/
    >      Hello World聊天翻译系统,专业聊天翻译技术,极速稳定收发,全球畅游,使用邮箱      
    >      免费注册登录体验。专业翻译技术团队开发,超数百家企业信赖。
    > 
    >  5.  【Hello World.影評】虛擬世界喚醒平行時空夢中人 - 香港01
    >      https://www.hk01.com/%E5%91%A8%E5%A0%B1/400434/hello-world-%E5%BD%B1%E8%A9%95-%E8%99%9B%E6%93%AC%E4%B8%96%E7%95%8C%E5%96%9A%E9%86%92%E5%B9%B3%E8%A1%8C%E6%99%82%E7%A9%BA%E5%A4%A2%E4%B8%AD%E4%BA%BA
    >     assert text[offset : offset + len(line)] == line
    > AssertionError
    > 
    > During handling of the above exception, another exception occurred:
    > 
    > Traceback (most recent call last):
    >   File "/usr/bin/googler", line 3819, in <module>
    >     main()
    >   File "/usr/bin/googler", line 3804, in main
    >     repl.display_results(json_output=opts.json)
    >   File "/usr/bin/googler", line 2726, in enforced_method
    >     method(self, *args, **kwargs)
    >   File "/usr/bin/googler", line 2922, in display_results
    >     r.print()
    >   File "/usr/bin/googler", line 2669, in print
    >     self._print_metadata_and_abstract(self.abstract, metadata=self.metadata, matches=self.matches)
    >   File "/usr/bin/googler", line 2648, in _print_metadata_and_abstract
    >     wrapped_abstract = TrackedTextwrap(abstract, fillwidth)
    >   File "/usr/bin/googler", line 227, in __init__
    >     offset, self._original
    > RuntimeError: TrackedTextwrap: the impossible happened at offset 11 of text '2020 年2月17日 — '
    
    
    • Link to the response body (you should see a line like [DEBUG] Response body written to '/Volumes/ramdisk/googler-response-xxxxxxxx' in the output of googler -d; please upload the file to a gist and include the gist's URL in the issue);

    https://gist.github.com/lawrenceang74/a45346c37184600bd0faef1cebb2a3e1

    • Details of operating system, Python version used, terminal emulator and shell;
    $ uname -a
    Linux turing 5.11.0-40-generic #44-Ubuntu SMP Wed Oct 20 16:16:42 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
    (base) [email protected]:~ [1121-0540] ✅
    $ lsb_release -a
    No LSB modules are available.
    Distributor ID: Ubuntu
    Description:    Ubuntu 21.04
    Release:        21.04
    Codename:       hirsute
    
    $ python --version
    Python 3.7.4
    
    C:\Users\x>hyper version
    3.1.4
    
    • locale output, if relevant. It's a good idea to set your locale to UFT-8. Please refer to googler #131.
    $ locale
    LANG=en_US.UTF-8
    LANGUAGE=
    LC_CTYPE="en_US.UTF-8"
    LC_NUMERIC="en_US.UTF-8"
    LC_TIME="en_US.UTF-8"
    LC_COLLATE="en_US.UTF-8"
    LC_MONETARY="en_US.UTF-8"
    LC_MESSAGES="en_US.UTF-8"
    LC_PAPER="en_US.UTF-8"
    LC_NAME="en_US.UTF-8"
    LC_ADDRESS="en_US.UTF-8"
    LC_TELEPHONE="en_US.UTF-8"
    LC_MEASUREMENT="en_US.UTF-8"
    LC_IDENTIFICATION="en_US.UTF-8"
    LC_ALL=
    `
    [response.txt](https://github.com/jarun/googler/files/7575407/response.txt)
    ``
    opened by lawrenceang74 0
  • Video-specific search not working

    Video-specific search not working

    Video search has stopped working:

    $ googler -V hello -d
    [DEBUG] googler version 4.3.2
    [DEBUG] Python version 3.9.5
    [DEBUG] Platform: Linux-5.11.0-40-generic-x86_64-with-glibc2.33
    [DEBUG] Connecting to new host www.google.com
    [DEBUG] Opened socket to 142.250.67.36:443
    [DEBUG] new_connection completed in 0.097s
    [DEBUG] Fetching URL /search?ie=UTF-8&oe=UTF-8&q=hello&sei=YnmAPb4tR_qHZ+ZzAXrLvw&tbm=vid
    [DEBUG] Cookie: 1P_JAR=2021-11-20-05
    [DEBUG] fetch_page completed in 1.333s
    [DEBUG] Response body written to '/tmp/googler-response-p0d8r3gp.html'.
    [DEBUG] parse completed in 0.098s
    No results.
    [DEBUG] Fetching https://raw.githubusercontent.com/jarun/googler/master/info.json for project status...
    If you believe this is a bug, please review https://git.io/googler-no-results before submitting a bug report.
    googler (? for help)
    

    Attached the html response. @zmwangx can you please have a look? Doesn't look like we do anything special in the parser for videos today. So the format might have changed.

    googler-response-p0d8r3gp.zip

    opened by jarun 0
Releases(v4.3.2)
Owner
Piña Colada
Blending the terminal in a GUI world.
Piña Colada
A Ruby gem that beautifies the terminal's ls command, with color and font-awesome icons. :tada:

Color LS A Ruby script that colorizes the ls output with color and icons. Here are the screenshots of working example on an iTerm2 terminal (Mac OS),

Athitya Kumar 3.9k Nov 15, 2021
:duck: DuckDuckGo from the terminal

ddgr ddgr is a cmdline utility to search DuckDuckGo (html version) from the terminal. While googler is extremely popular among cmdline users, in many

Piña Colada 2.2k Nov 30, 2021
System monitoring dashboard for terminal

gtop System monitoring dashboard for terminal. Requirements Linux / OSX / Windows (partial support) Node.js >= v8 Installation $ npm install gtop -g D

Can Güney Aksakalli 8.8k Nov 23, 2021
Terminal based YouTube player and downloader

mps-youtube Features Search and play audio/video from YouTube Search tracks of albums by album title Search and import YouTube playlists Create and sa

null 6.9k Nov 30, 2021
Git repository summary on your terminal

A command-line Git information tool written in Rust Onefetch is a command-line Git information tool written in Rust that displays project information

Ossama Hjaji 3.7k Nov 21, 2021
A smart and nice Twitter client on terminal written in Python.

A Note about Twitter API Change Heads-up! As Twitter discontinues supporting Stream API, RainbowStream's stream function has been stopped working for

orakaro.targaryen 3.3k Nov 23, 2021
Browse Reddit from your terminal

THIS PROJECT IS NO LONGER MAINTAINED RTV Development is Shutting Down List of Alternative Projects Reddit Terminal Viewer (RTV) A text-based interface

Michael Lazar 4.6k Nov 25, 2021
Terminal-based CPU stress and monitoring utility

The Stress Terminal UI: s-tui Stress-Terminal UI, s-tui, monitors CPU temperature, frequency, power and utilization in a graphical way from the termin

Alex Manuskin 2.8k Nov 30, 2021
Notifies you when long-running terminal commands complete

undistract-me Notifies you when long-running terminal commands complete. What is this? Does this ever happen to you? You're doing some work, and as pa

Jonathan Lange 485 Nov 18, 2021
A smarter cd command for your terminal

zoxide A smarter cd command for your terminal zoxide is a blazing fast replacement for your cd command, inspired by z and z.lua. It keeps track of the

Ajeet D'Souza 4.3k Nov 30, 2021
:mag: Ambar: Document Search Engine

?? Ambar: Document Search Engine Ambar is an open-source document search engine with automated crawling, OCR, tagging and instant full-text search. Am

RD17 1.8k Nov 22, 2021
"rsync for cloud storage" - Google Drive, S3, Dropbox, Backblaze B2, One Drive, Swift, Hubic, Wasabi, Google Cloud Storage, Yandex Files

Website | Documentation | Download | Contributing | Changelog | Installation | Forum Rclone Rclone ("rsync for cloud storage") is a command line progr

rclone 29.7k Nov 20, 2021
Simple, open-source, lightweight (< 1 KB) and privacy-friendly web analytics alternative to Google Analytics.

Plausible Analytics Plausible Analytics is a simple, lightweight (< 1 KB), open-source and privacy-friendly alternative to Google Analytics. It doesn’

Plausible Analytics 9.3k Nov 28, 2021
Umami is a simple, fast, website analytics alternative to Google Analytics.

umami Umami is a simple, fast, website analytics alternative to Google Analytics. Getting started A detailed getting started guide can be found at htt

Mike Cao 9.1k Nov 22, 2021
A CalDAV web client similar to Google Calendar

AgenDAV - CalDAV web client AgenDAV is a CalDAV web client which features an AJAX interface to allow users to manage their own calendars and shared on

AgenDAV 440 Nov 22, 2021
A CalDAV web client similar to Google Calendar

AgenDAV - CalDAV web client AgenDAV is a CalDAV web client which features an AJAX interface to allow users to manage their own calendars and shared on

AgenDAV 440 Nov 22, 2021
Google Reader inspired self-hosted RSS reader.

CommaFeed Sources for CommaFeed.com. Google Reader inspired self-hosted RSS reader, based on Dropwizard and AngularJS. CommaFeed is now considered fea

Jérémie Panzer 1.8k Nov 27, 2021
Free and open source feeds reader, including all major Google Reader features

Sismics Reader Demo application: https://reader-demo.sismics.com (Username: demo / password: demo) More screenshots What is Reader? Reader is an open

Sismics 359 Nov 18, 2021
Google Reader inspired self-hosted RSS reader written in VueJS with an Express NodeJS backend. RSSMonster is compatible with the Fever API.

RSSMonster Copyright (c) 2021 Piethein Strengholt, [email protected] RSSMonster is an easy to use web-based RSS aggregator, created as an

Piethein Strengholt 341 Nov 26, 2021
Self-hosted rss reader (php / mysql or sqlite) - Google Reader alternative

Requirements Language PHP 5.3 or greater Database MySQL 5.1 or greater SQLite Web server Apache 2.2 or greater with mod_rewrite module enabled (and "A

Stéphane Dion 163 Aug 28, 2021
The super-fast-minimalist-nosql-opensource Google Reader revival.

NUNUX Reader The super-fast-minimalist-nosql-opensource Google Reader revival. ⚠️ ⚠️ ⚠️ This project is no longer maintained ⚠️ ⚠️ ⚠️ Please consider

Nicolas Carlier 65 Jan 5, 2021
Node.js and mongoDB Google Drive Clone

MyDrive MyDrive is an Open Source cloud file storage server (Similar To Google Drive). Host myDrive on your own server or trusted platform and then ac

null 2.6k Nov 23, 2021
Server to index & view files in a s3 or Google Cloud Storage bucket.

s3server Static server for s3 or gcs files. Table of Contents Installation Binaries Via Go Usage Installation Binaries For installation instructions f

Jess Frazelle 187 Oct 22, 2021
Zenko CloudServer, an open-source Node.js implementation of the Amazon S3 protocol on the front-end and backend storage capabilities to multiple clouds, including Azure and Google.

Zenko CloudServer Overview CloudServer (formerly S3 Server) is an open-source Amazon S3-compatible object storage server that is part of Zenko, Scalit

Scality 1.3k Nov 26, 2021
A Hassle-Free Way to Self-Host Google Fonts. Get eot, ttf, svg, woff and woff2 files + CSS snippets

google-webfonts-helper A Hassle-Free Way to Self-Host Google Fonts This service might be handy if you want to directly download all .eot, .woff, .woff

Mario Ranftl 8.8k Dec 3, 2021
A simple webfont hosting. Google Fonts alternative for your own fonts.

Web fonts repository A simple webfont hosting inspired by Google Fonts. It runs on your server, stores and distributes webfont files and generates CSS

Surgie Finesse 78 Nov 26, 2021