mirror of
https://github.com/wassname/xbsjsonedit.git
synced 2026-06-27 17:33:11 +08:00
v1.1
This commit is contained in:
@@ -1,32 +1,68 @@
|
||||
# xbsjsonedit
|
||||
|
||||
xbsjsonedit is a limited tool for modifying backup data dumped from the
|
||||
xbsjsonedit is a tool for working with backup data dumped from the
|
||||
[xBrowserSync App](https://www.xbrowsersync.org/) ([GitHub](https://github.com/xBrowserSync)).
|
||||
It was originally developed for cleanup up bookmark replication problems in early releases
|
||||
of the App. This tool may be useful for pruning duplicate bookmarks and general maintenance.
|
||||
If you want it to do other functions, grab the code and go for it.
|
||||
|
||||
xbsjsonedit supports both interactive and command line modes/features. Interactive mode is targeted at
|
||||
editing your bookmark content, specifically looking for duplicate bookmarks and errors introduced by earlier versions
|
||||
of xBrowserSync.
|
||||
|
||||
Command line (CLI) modes support searching and printing select views of your bookmark data. The `--html` mode outputs a
|
||||
browser-loadable web page with your bookmarks organized by tag name. See more info below.
|
||||
|
||||
## Notable changes in the latest release
|
||||
V1.10 200608
|
||||
- Added `--html` command line mode which generates html output of your tagged bookmarks.
|
||||
- Changed the command line interface so that the input file defaults to the newest xbs_backup*.json file in your specified
|
||||
directory (per the JSON_PATH_DEFAULT assignment in the code). The input file may also be specified using the
|
||||
`--jsonbackup` command line switch.
|
||||
- Added `SearchTerm` command line mode feature, which prints matches within tags, and with the `--bookmark` switch prints matches
|
||||
within bookmark titles and URLs.
|
||||
|
||||
|
||||
## Usage
|
||||
```
|
||||
$ ./xbsjsonedit -h
|
||||
usage: xbsjsonedit [-h] [--print] [--tags TAGS] [--names] [-V] Infile
|
||||
usage: xbsjsonedit [-h] [--bookmarks] [--print] [--tags TAGS] [--names]
|
||||
[--html HTML] [--jsonbackup JSONBACKUP] [-V]
|
||||
[SearchTerm]
|
||||
|
||||
xBrowserSync json backup editor
|
||||
|
||||
Usages:
|
||||
Command line modes:
|
||||
xbsjsonedit news prints bookmarks tagged with 'news'
|
||||
xbsjsonedit news --bookmarks prints bookmarks tagged with 'news' and any bookmarks or URLs containing 'news'
|
||||
xbsjsonedit --print prints all bookmarks with their hierarchy
|
||||
xbsjsonedit --tags 5 prints only tag names that are used at least 5 times
|
||||
xbsjsonedit --tags 5 --names prints tag names and their bookmarks that are used at least 5 times
|
||||
xbsjsonedit --tags 0 --names prints tag names and their bookmark that are used exactly 1 time
|
||||
xbsjsonedit --html <outfile.html> writes tagged bookmarks to the specified browsable file
|
||||
|
||||
Interactive mode:
|
||||
xbsjsonedit Enters interactive mode
|
||||
|
||||
The path to the xbs_backup*.json file defaults to the newest in the download directory. --jsonbackup overrides the default.
|
||||
|
||||
positional arguments:
|
||||
Infile json backup file.
|
||||
SearchTerm Print bookmarks tagged with this text (CLI mode).
|
||||
|
||||
optional arguments:
|
||||
-h, --help show this help message and exit
|
||||
--print, -p Print bookmark hierarchy (redirect to less or a file).
|
||||
--tags TAGS, -t TAGS Print tags list filtered by tags with a minimum <n> number of uses. n=0 prints only single use tags.
|
||||
--names, -n Used with --tags to enable printing the titles/names for each tag.
|
||||
--bookmarks, -b Print bookmarks containing or tagged with the SearchTerm (CLI mode).
|
||||
--print, -p Print complete bookmark hierarchy (redirect to less or a file) (CLI mode).
|
||||
--tags TAGS, -t TAGS Print tags list filtered by tags with a minimum <n> number of uses. n=0 prints only single use tags. (CLI mode)
|
||||
--names, -n Used with --tags to enable printing the titles/names for each tag. (CLI mode)
|
||||
--html HTML Path of html output file.
|
||||
--jsonbackup JSONBACKUP, -j JSONBACKUP
|
||||
Path to json backup file. Default is newest version at </mnt/share/Downloads/xbs_backup*.json>.
|
||||
-V, --version Return version number and exit.
|
||||
|
||||
```
|
||||
|
||||
## Internal command menu
|
||||
## Usage notes for Interactive mode
|
||||
```
|
||||
$ ./xbsjsonedit xBrowserSyncBackup_201811232150.json
|
||||
$ ./xbsjsonedit
|
||||
|
||||
---------------------------------------------------------------------
|
||||
Options:
|
||||
@@ -53,21 +89,18 @@ Options:
|
||||
w: Write out the bookmarks data to a file
|
||||
q: Quit/exit (Do a Write first!)
|
||||
|
||||
|
||||
Enter option:
|
||||
```
|
||||
## Usage notes
|
||||
Five modes are supported Listing/Deleting based on:
|
||||
By default, the most recent `xbs_backup*.json` file in your `JSON_PATH_DEFAULT` directory is opened if `--jsonbackup` is not specified on the command line. Customize the `JSON_PATH_DEFAULT` Windows and/or Linux settings in the code.
|
||||
|
||||
The `p` Print function prints the full list of bookmarks in folder hierarchical form, listing the ID number and Title of each folder and bookmark.
|
||||
|
||||
Interactive mode supports five modes of Listing/Deleting based on:
|
||||
- A search string in bookmarks or folders
|
||||
- Duplicate URLs in bookmarks - such as the same URL existing in two or more folders
|
||||
- Duplicate folder names
|
||||
- Folders that have tags - there is no value for folders having tags
|
||||
- Empty folders - which may arise if all bookmarks were deleted from a folder
|
||||
|
||||
The Print function prints the full list of bookmarks in folder hierarchical form, listing the ID number and Title of each folder and bookmark. The `--Print` switch may be used for getting a good visual dump of the bookmarks in less or an editor for reference while using the interactive mode. The tags on each bookmark are listed as well.
|
||||
|
||||
The `--tags <n>` switch prints each tag where the number of bookmarks with that tag >= `<n>`. Optionally include the `--names` switch to list the bookmark titles/names for each tag. `--tags 0` is a special case that prints only tags that have exactly one occurrence, which may be useful for finding extraneous/remnant tags usage.
|
||||
|
||||
A lower case letter `t/g/d/f/x/y` will list the offenders, while an upper case letter
|
||||
`T/G/D/F/X/Y` will allow for selective deletes of the offenders. The lower case List operation need not be run before running the upper case Delete operation.
|
||||
Delete functions support individual bookmark selection, or all that match the selection mode.
|
||||
@@ -80,6 +113,49 @@ The output file defaults to the Infile + "_OUT", and can be specified during the
|
||||
- **Note** [_may no longer be the case_]: xBrowserSync will allow you to restore to (blast) your current syncID, so you may want to Disable Sync, then create a new sync before restoring the modified bookmarks.
|
||||
- **NOTE** that tags are not restored by xBrowserSync if sync is disabled. To recover, simply enable sync and do another restore.
|
||||
|
||||
## Usage nodes for Command Line Interface (CLI) mode
|
||||
|
||||
By default, the most recent `xbs_backup*.json` file in your `JSON_PATH_DEFAULT` directory is opened if `--jsonbackup` is not specified on the command line. Customize the `JSON_PATH_DEFAULT` Windows and/or Linux settings in the code.
|
||||
|
||||
The `--Print` switch may be used for getting a good visual dump of the bookmarks in less or an editor for reference while using the interactive mode. (Same output as 'p' print in interactive mode.)
|
||||
|
||||
If the optional SearchTerm command line argument is specified, all _tags_ containing the SearchTerm substring are printed, along with the names/titles of the bookmarks that have the matching tags. If the `--bookmarks` switch is also specified, then the names/titles of bookmarks that have the substring in their name, URL, or tag are also printed. For example, SearchTerm `cam` matches tags `camping` and `webcam`, and several bookmarks:
|
||||
```
|
||||
$ ./xbsjsonedit cam --bookmarks
|
||||
***** Bookmarks tagged with <cam>:
|
||||
[camping] (2):
|
||||
All Stays camping locations
|
||||
Big Bend National Park Texas
|
||||
|
||||
[webcam] (5):
|
||||
NAU web cam 1
|
||||
ADEQ Webcams
|
||||
AZ Game and Fish Webcams
|
||||
ADOT traffic cams
|
||||
Flagstaff webcams
|
||||
|
||||
|
||||
***** Bookmarks containing or tagged with <cam>:
|
||||
Cambria Bicycle Outfitter - We Outfit the world in bicycles and bicycle parts
|
||||
Camping World - Home Page
|
||||
NAU web cam 1
|
||||
Fry's Home Electronics | Computer Parts & Accessories, Software, Games, TVs, Cameras - Frys.com
|
||||
Newegg.com - Computer Parts, Laptops, Electronics, HDTVs, Digital Cameras and More!
|
||||
ADEQ Webcams
|
||||
AZ Game and Fish Webcams
|
||||
ADOT traffic cams
|
||||
Flagstaff webcams
|
||||
All Stays camping locations
|
||||
Big Bend National Park Texas
|
||||
```
|
||||
|
||||
The `--tags <n>` switch prints each tag where the number of bookmarks with that tag >= `<n>`. Optionally include the `--names` switch to list the bookmark titles/names for each tag. `--tags 0` is a special case that prints only tags that have exactly one occurrence, which may be useful for finding extraneous/remnant tags usage.
|
||||
|
||||
The `--html <outfile.html>` switch outputs a web page to the specified file that contains all tags with two (default) or more bookmarks. `--tags <n>` may be specified to override the default minimum tag usage count.
|
||||
- Note that untagged bookmarks, and bookmarks with tags that are used less than the `--tags` count (default 2), are not output to the outfile.html.
|
||||
- <outfile.html> is statically generated on-demand from a backup file, and thus does track bookmark changes made within xBrowserSync.
|
||||
- You probably do not want to post this output file on a publicly visible server.
|
||||
- The `--html` mode/feature is intended as a prototype web page that xBrowserSync may output natively in a future release, so it may not be feature-complete for your needs.
|
||||
|
||||
|
||||
## Known issues:
|
||||
@@ -88,6 +164,7 @@ The output file defaults to the Infile + "_OUT", and can be specified during the
|
||||
|
||||
## Version history
|
||||
|
||||
- 200608 v1.1 Added cli search and html features, defaulted .json file to be the newest in the download directory.
|
||||
- 200330 v1.0 Merged pull request #3 from mblais (add unbuffered getch input; add 'all' option), Reworked --tags and --names switches.
|
||||
- 191206 v0.3 Added tags dump
|
||||
- 191205 v0.2 Updated to xbrowsersync v1.5 and Python 3.x ONLY
|
||||
|
||||
+53
-12
@@ -3,12 +3,13 @@
|
||||
|
||||
Usages:
|
||||
Command line modes:
|
||||
xbsjsonedit news prints bookmarks tagged with 'news'
|
||||
xbsjsonedit news --bookmarks prints bookmarks tagged with 'news' and any bookmarks or URLs containing 'news'
|
||||
xbsjsonedit --print prints all bookmarks with their hierarchy
|
||||
xbsjsonedit --tags 5 prints only tag names that are used at least 5 times
|
||||
xbsjsonedit --tags 5 --names prints tag names and their bookmarks that are used at least 5 times
|
||||
xbsjsonedit --tags 0 --names prints tag names and their bookmark that are used exactly 1 time
|
||||
xbsjsonedit news prints bookmarks tagged with 'news'
|
||||
xbsjsonedit news --bookmarks prints bookmarks tagged with 'news' and any bookmarks or URLs containing 'news'
|
||||
xbsjsonedit --print prints all bookmarks with their hierarchy
|
||||
xbsjsonedit --tags 5 prints only tag names that are used at least 5 times
|
||||
xbsjsonedit --tags 5 --names prints tag names and their bookmarks that are used at least 5 times
|
||||
xbsjsonedit --tags 0 --names prints tag names and their bookmark that are used exactly 1 time
|
||||
xbsjsonedit --html <outfile.html> writes tagged bookmarks to the specified browsable file
|
||||
|
||||
Interactive mode:
|
||||
xbsjsonedit Enters interactive mode
|
||||
@@ -16,13 +17,13 @@ Usages:
|
||||
The path to the xbs_backup*.json file defaults to the newest in the download directory. --jsonbackup overrides the default.
|
||||
"""
|
||||
|
||||
__version__ = "v1.1 200604"
|
||||
__version__ = "v1.1 200608"
|
||||
|
||||
#==========================================================
|
||||
#
|
||||
# Chris Nelson 2018 - 2020
|
||||
#
|
||||
# 200604 v1.1 Added cli search features, defaulted .json file to be the newest in download directory.
|
||||
# 200608 v1.1 Added cli search and html features, defaulted .json file to be the newest in the download directory.
|
||||
# 200330 v1.0 Merged pull request #3 from mblais (add unbuffered getch input; add 'all' option), Reworked --tags and --names switches.
|
||||
# 191206 v0.3 Added tags dump
|
||||
# 191205 v0.2 Updated to xbrowsersync v1.5 and Python 3.x ONLY
|
||||
@@ -82,6 +83,45 @@ def main():
|
||||
digin(parent=json_dict["xbrowsersync"]["data"]["bookmarks"], parent_id="", path="/", search_term="", operation="printtree")
|
||||
sys.exit()
|
||||
|
||||
|
||||
if args.html is not None:
|
||||
digin(parent=json_dict["xbrowsersync"]["data"]["bookmarks"], parent_id="", path="/", search_term="", operation="GatherTags")
|
||||
tags_count = 2
|
||||
if args.tags > 0:
|
||||
tags_count = args.tags
|
||||
|
||||
html_fout = io.open (args.html, 'wt')
|
||||
html_fout.write("""<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||
<html>
|
||||
<head>
|
||||
<title>xbs Tags</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<a name="top"></a>
|
||||
<h1>Tagged bookmarks list</h1>
|
||||
""")
|
||||
html_fout.write(f'(Tags used {tags_count} or more times)<br>\n')
|
||||
|
||||
for tag in sorted(tags_dict.keys()):
|
||||
if len(tags_dict[tag]) >= tags_count:
|
||||
html_fout.write(f' <b><a href="#{tag}">{tag}</a></b><br>\n')
|
||||
html_fout.write(" <br>\n")
|
||||
|
||||
for tag in sorted(tags_dict.keys()):
|
||||
if len(tags_dict[tag]) >= tags_count:
|
||||
html_fout.write(f' <a name="{tag}"></a><H3>{tag} ({len(tags_dict[tag])}):</H3>\n')
|
||||
html_fout.write(' <BLOCKQUOTE>\n')
|
||||
for bookmark in tags_dict[tag]:
|
||||
html_fout.write (' <A HREF="{}" target="_blank">{}</A><BR>\n'.format(bookmark['url'], bookmark['title']))
|
||||
html_fout.write(' <a href="#top">(top)</a>\n')
|
||||
html_fout.write(' </BLOCKQUOTE>\n')
|
||||
|
||||
html_fout.write(" </body> </html>")
|
||||
html_fout.close()
|
||||
sys.exit()
|
||||
|
||||
|
||||
if args.tags > -1:
|
||||
digin(parent=json_dict["xbrowsersync"]["data"]["bookmarks"], parent_id="", path="/", search_term="", operation="GatherTags")
|
||||
for tag in sorted(tags_dict.keys()):
|
||||
@@ -100,6 +140,7 @@ def main():
|
||||
print()
|
||||
sys.exit()
|
||||
|
||||
|
||||
if args.SearchTerm is not None:
|
||||
_search_term = args.SearchTerm.lower()
|
||||
print (f"***** Bookmarks tagged with <{_search_term}>:")
|
||||
@@ -219,10 +260,8 @@ Options:
|
||||
print ("\nMatches: {} Deletes: {}\n".format(match_cnt, change_cnt))
|
||||
|
||||
elif select == 'w':
|
||||
# ans = prompt_long("Output file name (default <{}>: ".format(args.Infile + OFILESUFFIX))
|
||||
ans = prompt_long("Output file name (default <{}>: ".format(infile + OFILESUFFIX))
|
||||
if ans == "":
|
||||
# ans = args.Infile + OFILESUFFIX
|
||||
ans = infile + OFILESUFFIX
|
||||
with io.open(ans, "w", encoding='utf8') as ofile:
|
||||
json.dump(json_dict, ofile, ensure_ascii=False, indent=2)
|
||||
@@ -396,9 +435,9 @@ def digin(parent, parent_id, path, search_term, operation, commit=False, indent=
|
||||
if item["tags"] != None:
|
||||
for tag in item["tags"]:
|
||||
if tag not in tags_dict:
|
||||
tags_dict[tag] = [{"title":item["title"], "id":item["id"]}]
|
||||
tags_dict[tag] = [{"title":item["title"], "id":item["id"], "url":item["url"]}]
|
||||
else:
|
||||
tags_dict[tag].append({"title":item["title"], "id":item["id"]})
|
||||
tags_dict[tag].append({"title":item["title"], "id":item["id"], "url":item["url"]})
|
||||
|
||||
|
||||
|
||||
@@ -632,6 +671,8 @@ if __name__ == '__main__':
|
||||
help="Print tags list filtered by tags with a minimum <n> number of uses. n=0 prints only single use tags. (CLI mode)")
|
||||
parser.add_argument('--names', '-n', action='store_true',
|
||||
help="Used with --tags to enable printing the titles/names for each tag. (CLI mode)")
|
||||
parser.add_argument('--html', type=str,
|
||||
help=f"Path of html output file.")
|
||||
parser.add_argument('--jsonbackup', '-j', type=str,
|
||||
help=f"Path to json backup file. Default is newest version at <{JSON_PATH_DEFAULT}xbs_backup*.json>.")
|
||||
parser.add_argument('-V', '--version',
|
||||
|
||||
Reference in New Issue
Block a user