Google Fuzzy Search
is a tool for fuzzy find for the result of searching with googler.
If you get the following response, stop using it.
This is an error from google
. So you can't do anything with googler. Please use it after a while.
$ googler --json --count 100 python | gfzs
Error: Expecting value: line 1 column 2 (char 1)
Input data: [ERROR] Connection blocked due to unusual activity. THIS IS NOT A BUG, please do NOT report it as a bug unless you have specific information that may lead to the development of a workaround. You IP address is temporarily or permanently blocked by Google and requires reCAPTCHA-solving to use the service, which googler is not capable of. Possible causes include issuing too many queries in a short time frame, or operating from a shared / low reputation IP with a history of abuse. Please do NOT use googler for automated scraping.
To avoid such problems, it is better not to set googler's count option
.
We are not responsible if you ignore the advice and block your IP. please note that.
pip install gfzs
or
pipx instal gfzs
seeing is believing.
You can easily try what kind of app it is.
gfzs demo
- python3 (over Python 3.6.1)
- poetry
$ gfzs -h
usage: gfzs [-h] [--version] [--score SCORE] [--log-level LOG_LEVEL]
[--log-path LOG_PATH]
{init,edit,demo,valid} ...
Google Fuzzy Search. Pipe the search result(json) of googler and use it
optional arguments:
-h, --help show this help message and exit
--version, -v show program's version number and exit
--score SCORE, -s SCORE
fuzzywuzzy's score (default: 30). please see
https://github.com/seatgeek/fuzzywuzzy
--log-level LOG_LEVEL, -l LOG_LEVEL
Log Level (default: 1). [0: DEBUG, 1: INFO, 2: WARN,
3: ERROR, 4: FATAL, 5: UNKNOWN, 6: NULL]
--log-path LOG_PATH, -p LOG_PATH
Log Path (default: ~/gfzs.log)
SubCommands:
{init,edit,demo,valid}
init Initialize gfzs
edit Edit config
demo Play with Demo
valid Validate ~/.gfzsrc
Initialize first. A configuration file (.gfzsrc
) is created in your home directory.
$ gfzs init
Initialize config in /Users/yukihirop/.gfzsrc
Next, Prepare json with title
, url
and abstract
as keys and pass it.
For Example, Assuming that data.json is as follows.
data.json
[
{
"abstract": "Python is an interpreted, high-level and general-purpose programming language. Python's design philosophy emphasizes code readability with its notable useย ...",
"matches": [
{
"offset": 0,
"phrase": "Python"
},
{
"offset": 79,
"phrase": "Python's"
}
],
"metadata": "Developer: Python Software Foundation | Designed by: Guido van Rossum | Filename extensions: .py,.pyi,.pyc,.pyd,.pyo ... | Typing discipline: Duck, dynamic, gradual (since ...",
"title": "Python (programming language) - Wikipedia",
"url": "https://en.wikipedia.org/wiki/Python_(programming_language)"
},
{
"abstract": "ใใญใฐใฉใใณใฐ่จ่ช Pythonใฎ็ดนไปใปใใฆใณใญใผใใจใคใณในใใผใซใปPythonๅ
ฅ้่ฌๅบงใชใฉ.",
"matches": [
{
"offset": 10,
"phrase": "Python"
},
{
"offset": 34,
"phrase": "Python"
}
],
"title": "ใใญใฐใฉใใณใฐ่จ่ช Python - python.jp",
"url": "https://www.python.jp/"
}
]
Pipe as standard input
cat data.json | gfzs
It is recommended to use alias to avoid accidentally passing the -n (--count) option to googler.
googler --json --site github.com python | gfzs
Please see here for score.
googler --json --site github.com python | gfzs -s 50
The default setting is the following file, and each key can enter the following values.
After changing the settings, you can check if the settings are correct with the valid
command.
$ gfzs valid
Config is valid
~/.gfzsrc
{
"view": {
"footer": {
"message": "QUERY>",
"color": {
"message": {
"text": 2,
"background": 0,
"style": "normal"
},
"hline": {
"text": 7,
"background": 0,
"style": "normal"
}
}
},
"header": {
"color": {
"hline": {
"text": 7,
"background": 0,
"style": "normal"
}
}
},
"search_result": {
"color": {
"index": {
"text": 6,
"background": 0,
"style": "normal"
},
"title": {
"text": 2,
"background": 0,
"style": "bold"
},
"url": {
"text": 3,
"background": 0,
"style": "link"
},
"abstract": {
"text": 7,
"background": 0,
"style": "normal"
},
"markup_partial": {
"text": 2,
"background": 5,
"style": "normal"
},
"markup_char": {
"text": 1,
"background": 0,
"style": "normal"
}
}
},
"paging": {
"color": {
"common": {
"text": 2,
"background": 0,
"style": "bold"
}
}
}
}
}
key | description | value |
---|---|---|
text | curses color | 0ใ7 |
background | curses color | 0ใ7 |
style | text style | "normal", "link", "bold" |
number | description |
---|---|
0 |
curses.COLOR_BLACK |
1 |
curses.COLOR_RED |
2 |
curses.COLOR_GREEN |
3 |
curses.COLOR_YELLOW |
4 |
curses.COLOR_BLUE |
5 |
curses.COLOR_MAGENTA |
6 |
curses.COLOR_CYAN |
7 |
curses.COLOR_WHITE |
name | description |
---|---|
DEBUG |
You will be able to use the debug module. |
EDITOR |
Set the command to open the editor. |
By default, logs with a log level of INFO
or higher will be sent to ~/gfzs.log
.
| Log Level | value | desc |
| --------- | ----- | ------- | --- |
| DEBUG
| 0 | | |
| INFO
| 1 | default |
| WARN
| 2 | |
| ERROR
| 3 | |
| FATAL
| 4 | |
| UNKNOWN
| 5 | |
| NULL
| 6 | |
When you want to know the details of the movement or identify the cause of the error, you can change the log level to DEBUG(0)
and debug with the log.
$ cat fixtures/python.json | bin/gfzs --log-level 0
First, create a virtual environment.
$ python3 -m venv .venv
$ poetry shell
$ poetry install
$ python3 gfzs/controller.py
or
$ cat fixtures/python.json | python3 -m gfzs
or
$ cat fixtures/python.json | bin/gfzs
$ python3 gfzs/views/header.py
$ python3 gfzs/views/search_result.py
$ python3 gfzs/views/paging.py
$ python3 gfzs/views/footer.py
$ python3 gfzs/views/not_found.py
I really referred to the implementation of the following repository.