| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 | #!/usr/bin/env python'''searx is free software: you can redistribute it and/or modifyit under the terms of the GNU Affero General Public License as published bythe Free Software Foundation, either version 3 of the License, or(at your option) any later version.searx is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See theGNU Affero General Public License for more details.You should have received a copy of the GNU Affero General Public Licensealong with searx. If not, see < http://www.gnu.org/licenses/ >.(C) 2016- by Alexandre Flament, <alex@al-f.net>'''# set pathfrom sys import pathfrom os.path import realpath, dirnamepath.append(realpath(dirname(realpath(__file__)) + '/../'))# initializationfrom json import dumpsfrom searx import settingsimport sysimport codecsimport searx.queryimport searx.searchimport searx.enginesimport searx.preferencesimport argparsesearx.engines.initialize_engines(settings['engines'])# command line parsingparser = argparse.ArgumentParser(description='Standalone searx.')parser.add_argument('query', type=str,                    help='Text query')parser.add_argument('--category', type=str, nargs='?',                    choices=searx.engines.categories.keys(),                    default='general',                    help='Search category')parser.add_argument('--lang', type=str, nargs='?',default='all',                    help='Search language')parser.add_argument('--pageno', type=int, nargs='?', default=1,                    help='Page number starting from 1')parser.add_argument('--safesearch', type=str, nargs='?', choices=['0', '1', '2'], default='0',                    help='Safe content filter from none to strict')parser.add_argument('--timerange', type=str, nargs='?', choices=['day', 'week', 'month', 'year'],                    help='Filter by time range')args = parser.parse_args()# search results for the queryform = {    "q":args.query,    "categories":args.category.decode('utf-8'),    "pageno":str(args.pageno),    "language":args.lang,    "time_range":args.timerange}preferences = searx.preferences.Preferences(['oscar'], searx.engines.categories.keys(), searx.engines.engines, [])preferences.key_value_settings['safesearch'].parse(args.safesearch)search_query, raw_text_query = searx.search.get_search_query_from_webapp(preferences, form)search = searx.search.Search(search_query)result_container = search.search()# outputfrom datetime import datetimedef no_parsed_url(results):    for result in results:        del result['parsed_url']    return resultsdef json_serial(obj):    """JSON serializer for objects not serializable by default json code"""    if isinstance(obj, datetime):        serial = obj.isoformat()        return serial    raise TypeError ("Type not serializable")result_container_json = {    "search": {        "q": search_query.query,        "pageno": search_query.pageno,        "lang": search_query.lang,        "safesearch": search_query.safesearch,        "timerange": search_query.time_range,        "engines": search_query.engines      },    "results": no_parsed_url(result_container.get_ordered_results()),    "infoboxes": result_container.infoboxes,    "suggestions": list(result_container.suggestions),    "answers": list(result_container.answers),    "paging": result_container.paging,    "results_number": result_container.results_number()}sys.stdout = codecs.getwriter("UTF-8")(sys.stdout)sys.stdout.write(dumps(result_container_json, sort_keys=True, indent=4, ensure_ascii=False, encoding="utf-8", default=json_serial))
 |