def feed_autocomplete(request): query = request.GET.get('term') or request.GET.get('query') version = int(request.GET.get('v', 1)) format = request.GET.get('format', 'autocomplete') # user = get_user(request) # if True or not user.profile.is_premium: # return dict(code=-1, message="Overloaded, no autocomplete results.", feeds=[], term=query) if not query: return dict(code=-1, message="Specify a search 'term'.", feeds=[], term=query) if '.' in query: try: parts = urlparse(query) if not parts.hostname and not query.startswith('http'): parts = urlparse('http://%s' % query) if parts.hostname: query = parts.hostname except: logging.user(request, "~FGAdd search, could not parse url in ~FR%s" % query) feed_ids = Feed.autocomplete(query) feeds = list(set([Feed.get_by_id(feed_id) for feed_id in feed_ids])) feeds = [feed for feed in feeds if feed and not feed.branch_from_feed] if format == 'autocomplete': feeds = [{ 'id': feed.pk, 'value': feed.feed_address, 'label': feed.feed_title, 'tagline': feed.data and feed.data.feed_tagline, 'num_subscribers': feed.num_subscribers, } for feed in feeds] else: feeds = [feed.canonical(full=True) for feed in feeds] feeds = sorted(feeds, key=lambda f: -1 * f['num_subscribers']) feed_ids = [f['id'] for f in feeds] feed_icons = dict((icon.feed_id, icon) for icon in MFeedIcon.objects.filter(feed_id__in=feed_ids)) for feed in feeds: if feed['id'] in feed_icons: feed_icon = feed_icons[feed['id']] if feed_icon.data: feed['favicon_color'] = feed_icon.color feed['favicon'] = feed_icon.data logging.user(request, "~FGAdd Search: ~SB%s ~SN(%s matches)" % (query, len(feeds),)) if version > 1: return { 'feeds': feeds, 'term': query, } else: return feeds
def feed_autocomplete(request): query = request.GET.get("term") or request.GET.get("query") version = int(request.GET.get("v", 1)) format = request.GET.get("format", "autocomplete") # user = get_user(request) # if True or not user.profile.is_premium: # return dict(code=-1, message="Overloaded, no autocomplete results.", feeds=[], term=query) if not query: return dict(code=-1, message="Specify a search 'term'.", feeds=[], term=query) if "." in query: try: parts = urlparse(query) if not parts.hostname and not query.startswith("http"): parts = urlparse("http://%s" % query) if parts.hostname: query = parts.hostname except: logging.user(request, "~FGAdd search, could not parse url in ~FR%s" % query) feed_ids = Feed.autocomplete(query) feeds = [Feed.get_by_id(feed_id) for feed_id in feed_ids] if format == "autocomplete": feeds = [ { "id": feed.pk, "value": feed.feed_address, "label": feed.feed_title, "tagline": feed.data and feed.data.feed_tagline, "num_subscribers": feed.num_subscribers, } for feed in feeds if feed ] else: feeds = [feed.canonical(full=True) for feed in feeds] feeds = sorted(feeds, key=lambda f: -1 * f["num_subscribers"]) feed_ids = [f["id"] for f in feeds] feed_icons = dict((icon.feed_id, icon) for icon in MFeedIcon.objects.filter(feed_id__in=feed_ids)) for feed in feeds: if feed["id"] in feed_icons: feed_icon = feed_icons[feed["id"]] if feed_icon.data: feed["favicon_color"] = feed_icon.color feed["favicon"] = feed_icon.data logging.user(request, "~FGAdd Search: ~SB%s ~SN(%s matches)" % (query, len(feeds))) if version > 1: return {"feeds": feeds, "term": query} else: return feeds
def feed_autocomplete(request): query = request.GET.get("term") or request.GET.get("query") version = int(request.GET.get("v", 1)) format = request.GET.get("format", "autocomplete") # user = get_user(request) # if True or not user.profile.is_premium: # return dict(code=-1, message="Overloaded, no autocomplete results.", feeds=[], term=query) if not query: return dict(code=-1, message="Specify a search 'term'.", feeds=[], term=query) if "." in query: try: parts = urlparse(query) if not parts.hostname and not query.startswith("http"): parts = urlparse("http://%s" % query) if parts.hostname: query = [parts.hostname] query.extend([p for p in parts.path.split("/") if p]) query = " ".join(query) except: logging.user(request, "~FGAdd search, could not parse url in ~FR%s" % query) query_params = query.split(" ") tries_left = 5 while len(query_params) and tries_left: tries_left -= 1 feed_ids = Feed.autocomplete(" ".join(query_params)) if feed_ids: break else: query_params = query_params[:-1] feeds = list(set([Feed.get_by_id(feed_id) for feed_id in feed_ids])) feeds = [feed for feed in feeds if feed and not feed.branch_from_feed] feeds = [feed for feed in feeds if all([x not in feed.feed_address for x in IGNORE_AUTOCOMPLETE])] if format == "autocomplete": feeds = [ { "id": feed.pk, "value": feed.feed_address, "label": feed.feed_title, "tagline": feed.data and feed.data.feed_tagline, "num_subscribers": feed.num_subscribers, } for feed in feeds ] else: feeds = [feed.canonical(full=True) for feed in feeds] feeds = sorted(feeds, key=lambda f: -1 * f["num_subscribers"]) feed_ids = [f["id"] for f in feeds] feed_icons = dict((icon.feed_id, icon) for icon in MFeedIcon.objects.filter(feed_id__in=feed_ids)) for feed in feeds: if feed["id"] in feed_icons: feed_icon = feed_icons[feed["id"]] if feed_icon.data: feed["favicon_color"] = feed_icon.color feed["favicon"] = feed_icon.data logging.user(request, "~FGAdd Search: ~SB%s ~SN(%s matches)" % (query, len(feeds))) if version > 1: return {"feeds": feeds, "term": query} else: return feeds