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, # site_restricted_search=False, # ) 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, )