def search_view(): """ Get search results from Google Custom Search """ # The webteam's default custom search ID search_engine_id = "009048213575199080868:i3zoqdwqk8o" # API key should always be provided as an environment variable search_api_key = os.getenv("SEARCH_API_KEY") if not search_api_key: raise NoAPIKeyError("Unable to search: No API key provided") params = flask.request.args query = params.get("q") start = params.get("start") num = params.get("num") site_search = site or params.get("siteSearch") or params.get("domain") results = None if query: results = get_search_results( session=session, api_key=search_api_key, search_engine_id=search_engine_id, siteSearch=site_search, query=query, start=start, num=num, ) return flask.render_template( template_path, query=query, start=start, num=num, results=results, siteSearch=site_search, )
def tutorials_index(): page = flask.request.args.get("page", default=1, type=int) topic = flask.request.args.get("topic", default=None, type=str) sort = flask.request.args.get("sort", default=None, type=str) query = flask.request.args.get("q", default=None, type=str) posts_per_page = 15 """ Get search results from Google Custom Search """ # The webteam's default custom search ID search_engine_id = "009048213575199080868:i3zoqdwqk8o" # API key should always be provided as an environment variable search_api_key = os.getenv("SEARCH_API_KEY") if query and not search_api_key: raise NoAPIKeyError("Unable to search: No API key provided") results = None if query: results = get_search_results( api_key=search_api_key, search_engine_id=search_engine_id, siteSearch="ubuntu.com/tutorials", query=query, ) tutorials_docs.parser.parse() if not topic: metadata = tutorials_docs.parser.metadata else: metadata = [ doc for doc in tutorials_docs.parser.metadata if topic in doc["categories"] ] if query: temp_metadata = [] if results.get("entries"): for result in results["entries"]: start = result["link"].find("tutorials/") end = len(result["link"]) identifier = result["link"][start:end] if start != -1: for doc in metadata: if identifier in doc["topic"]: temp_metadata.append(doc) metadata = temp_metadata if sort == "difficulty-desc": metadata = sorted(metadata, key=lambda k: k["difficulty"], reverse=True) if sort == "difficulty-asc" or not sort: metadata = sorted(metadata, key=lambda k: k["difficulty"], reverse=False) total_results = len(metadata) total_pages = math.ceil(total_results / posts_per_page) return flask.render_template( "tutorials/index.html", navigation=tutorials_docs.parser.navigation, forum_url=tutorials_docs.parser.api.base_url, metadata=metadata, page=page, topic=topic, sort=sort, query=query, posts_per_page=posts_per_page, total_results=total_results, total_pages=total_pages, )
def tutorials_index(): page = flask.request.args.get("page", default=1, type=int) topic = flask.request.args.get("topic", default=None, type=str) sort = flask.request.args.get("sort", default=None, type=str) query = flask.request.args.get("q", default=None, type=str) posts_per_page = 15 """ Get search results from Google Custom Search """ # Web tribe websites custom search ID search_engine_id = "adb2397a224a1fe55" # API key should always be provided as an environment variable search_api_key = os.getenv("SEARCH_API_KEY") if query and not search_api_key: raise NoAPIKeyError("Unable to search: No API key provided") results = None if query: results = get_search_results( session=session, api_key=search_api_key, search_engine_id=search_engine_id, siteSearch="ubuntu.com/tutorials", query=query, ) tutorials_docs.parser.parse() tutorials_docs.parser.parse_topic(tutorials_docs.parser.index_topic) if not topic: tutorials = tutorials_docs.parser.tutorials else: tutorials = [ doc for doc in tutorials_docs.parser.tutorials if topic in doc["categories"] ] # Create list of topics topics_list = set() for item in tutorials_docs.parser.tutorials: if "categories" in item and item["categories"] not in topics_list: topics_list = topics_list | set(item["categories"].replace( " ", "").lower().split(",")) if query: temp_metadata = [] if results.get("entries"): for result in results["entries"]: start = result["link"].find("tutorials/") end = len(result["link"]) identifier = result["link"][start:end] if start != -1: for doc in tutorials: if identifier in doc["link"]: temp_metadata.append(doc) tutorials = temp_metadata if sort == "difficulty-desc": tutorials = sorted(tutorials, key=lambda k: k["difficulty"], reverse=True) if sort == "difficulty-asc" or not sort: tutorials = sorted(tutorials, key=lambda k: k["difficulty"], reverse=False) total_results = len(tutorials) total_pages = math.ceil(total_results / posts_per_page) return flask.render_template( "tutorials/index.html", forum_url=tutorials_docs.parser.api.base_url, tutorials=tutorials, page=page, topic=topic, topics_list=sorted(list(topics_list)), sort=sort, query=query, posts_per_page=posts_per_page, total_results=total_results, total_pages=total_pages, )