Source code for cli

# -*- coding: utf-8 -*-

"""
  Usage:
    search_google [q] [--optional]
    search_google [-positional] ...
  
  A command line tool for Google web and image search.
  
  Positional arguments:
    q                 keyword query
    -h                show this help message and exit
    -i                show documentation in browser
    -a                show optional arguments in browser
    -s <arg>=<value>  set default optional arguments
    -r <arg>          remove default arguments
    -v                view default arguments
    -d                reset default arguments
  
  Optional arguments:
    --num             num of results (default: 3)
    --searchType      'image' or unassigned for web search
    --dateRestrict    time period of search
    --start           index of first result
    --fileType        format for image search (default: png)
    --save_links      path for text file of links
    --save_metadata   path for metadata JSON file
    --save_downloads  path for directory of link downloads
    --option_silent   'True' to disable preview
    --option_preview  num of results to preview
    
    For more arguments use: search_google -a
    
  Examples:
    
    Set developer and search engine key arguments
      > search_google -s build_developerKey="dev_key"
      > search_google -s cx="cse_key"
    
    Web search for keyword "cat"
      > search_google cat
    
    Search for "cat" images
      > search_google cat --searchType=image
    
    Download links to directory
      > search_google cat --save_downloads=downloads
  
  For more information visit use: search_google -i
"""

from os.path import isfile
from pkg_resources import resource_filename, Requirement
from pprint import pprint
from sys import argv
from webbrowser import open_new_tab

import json
import kwconfig
import search_google.api

_doc_link = 'https://github.com/rrwen/search_google'
_cse_link = 'https://developers.google.com/resources/api-libraries/documentation/customsearch/v1/python/latest/customsearch_v1.cse.html'
    
[docs]def run(argv=argv): """Runs the search_google command line tool. This function runs the search_google command line tool in a terminal. It was intended for use inside a py file (.py) to be executed using python. Notes: * ``[q]`` reflects key ``q`` in the ``cseargs`` parameter for :class:`api.results` * Optional arguments with ``build_`` are keys in the ``buildargs`` parameter for :class:`api.results` For distribution, this function must be defined in the following files:: # In 'search_google/search_google/__main__.py' from .cli import run run() # In 'search_google/search_google.py' from search_google.cli import run if __name__ == '__main__': run() # In 'search_google/__init__.py' __entry_points__ = {'console_scripts': ['search_google=search_google.cli:run']} Examples:: # Import google_streetview for the cli module import search_google.cli # Create command line arguments argv = [ 'cli.py', 'google', '--searchType=image', '--build_developerKey=your_dev_key', '--cx=your_cx_id' '--num=1' ] # Run command line search_google.cli.run(argv) """ config_file = kwconfig.manage( file_path=resource_filename(Requirement.parse('search_google'), 'search_google/config.json'), defaults={ 'build_serviceName': 'customsearch', 'build_version': 'v1', 'num': 3, 'fileType': 'png', 'option_silent': 'False', 'option_preview' : 10}) # (commands) Main command calls if len(argv) > 1: if argv[1] == '-i': # browse docs open_new_tab(_doc_link) exit() elif argv[1] == '-a': # browse arguments open_new_tab(_cse_link) exit() config_file.command(argv, i=1, doc=__doc__, quit=True, silent=False) # (parse_args) Parse command arguments into dict kwargs = kwconfig.parse(argv[2:]) kwargs['q'] = argv[1] kwargs = config_file.add(kwargs) # (split_args) Split args into build, cse, and save arguments buildargs = {} cseargs = {} saveargs = {} optionargs = {} for k, v in kwargs.items(): if 'build_' == k[0:6]: buildargs[k[6:]] = v elif 'save_' == k[0:5]: saveargs[k[5:]] = v elif 'option_' == k[0:7]: optionargs[k[7:]] = v else: cseargs[k] = v # (cse_results) Get google api results results = search_google.api.results(buildargs, cseargs) # (cse_print) Print a preview of results if 'silent' in optionargs: if optionargs['silent'].lower() != 'true': results.preview(n=int(optionargs['preview'])) # (cse_save) Save links and metadata if 'links' in saveargs: results.save_links(saveargs['links']) if 'metadata' in saveargs: results.save_metadata(saveargs['metadata']) # (cse_download) Download links if 'downloads' in saveargs: results.download_links(saveargs['downloads'])