def reddits(content_id=None): """ Search for reddits related to topic of article with <content_id> https://www.reddit.com/dev/api#GET_search The extension performs these functions on the client side due to rate limiting, but the website needs this. """ try: # Search by url reddits = reddit_search(request.content['url']) # Search by keyword keywords = content_keywords(request.content) q = '+'.join(x['keyword'] for x in keywords[:3]) more_reddits = reddit_search(q) # De-dupe for i in xrange(len(more_reddits) - 1, -1 - 1): id = more_reddits[i]['data']['id'] for r in reddits: if id == r['id']: del more_reddits[i] reddits.extend(more_reddits) return render({'reddits': reddits}, template='reddits.jinja2') except Exception, e: traceback.print_exc() return render({ 'url': request.url, 'error': str(e) }, template='error.jinja2')
def topic(content_id=None): """ Search for tweets related to topic of article with <content_id> Alternatively accepts url or id in query params. """ try: q = twitter_query(content_keywords(request.content), content_entities(request.content)) credentials = get_twitter_credentials() params = {'q': q, 'count': 100, 'result_type': 'mixed'} result = twitter_search(params, credentials=credentials) tweets = screen_name_filter(result.statuses, 'media') return render({'tweets': tweets}, template='topic.jinja2') except TwitterAuthError: # This redirect is for the HTML UI. JSON clients should execute # the auth-check / auth-verify cycle before making API calls return redirect(url_for('auth_check') + \ '?redirect=%s' % request.url) except TwitterClientError: return render({'url': request.url}, template='twitter_client_error.jinja2') except Exception, e: traceback.print_exc() return render({ 'url': request.url, 'error': str(e) }, template='error.jinja2')
def local_tweets(content_id=None): lat = request.args['lat'] lon = request.args['lon'] radius = request.args.get('radius', '10mi') try: q = twitter_query(content_keywords(request.content), content_entities(request.content)) credentials = get_twitter_credentials() params = { 'count': 100, 'result_type': 'mixed', 'geocode': '%s,%s,%s' % (lat, lon, radius) } result = twitter_search(params, credentials=credentials) tweets = screen_name_filter(result.statuses, 'media') return render({'tweets': tweets}) except TwitterAuthError: # This redirect is for the HTML UI. JSON clients should execute # the auth-check / auth-verify cycle before making API calls return redirect(url_for('auth_check') + \ '?redirect=%s' % request.url) except TwitterClientError: return render({'url': request.url}, template='twitter_client_error.jinja2') except Exception, e: traceback.print_exc() return render({'url': request.url, 'error': str(e)})
def stakeholdertweets(content_id=None): """ Retrieve stakeholder tweets for article with <content_id> Alternatively accepts url or id in query params. """ try: content = request.content keywords = content_keywords(content) stakeholders = content_stakeholders(content) stakeholders = stakeholders[:request.args.get('limit', 10)] credentials = get_twitter_credentials() result = stakeholder_tweets(stakeholders, keywords, credentials=credentials) d = group_tweets_by_screen_name([d['tweet'] for d in result]) return render({'tweets': d.items()}, template='stakeholdertweets.jinja2') except TwitterAuthError: # This redirect is for the HTML UI. JSON clients should execute # the auth-check / auth-verify cycle before making API calls return redirect(url_for('auth_check') + \ '?redirect=%s' % request.url) except TwitterClientError: return render({'url': request.url}, template='twitter_client_error.jinja2') except Exception, e: traceback.print_exc() return render({ 'url': request.url, 'error': str(e) }, template='error.jinja2')
def pundittweets(content_id=None): """ Retrieve pundit tweets for article with <content_id> Alternatively accepts url or id in query params. """ try: content = request.content keywords = content_keywords(content) categories = content_categories(content) if not categories: raise Exception('No categories found for article') category = categories[0][0] credentials = get_twitter_credentials() tweets = pundit_tweets(category, keywords, credentials=credentials) tweets = dedupe_tweets(tweets) return render({'tweets': tweets}, template='pundittweets.jinja2') except TwitterAuthError: # This redirect is for the HTML UI. JSON clients should execute # the auth-check / auth-verify cycle before making API calls return redirect(url_for('auth_check') + \ '?redirect=%s' % request.url) except TwitterClientError: return render({'url': request.url}, template='twitter_client_error.jinja2') except Exception, e: traceback.print_exc() return render({ 'url': request.url, 'error': str(e) }, template='error.jinja2')
def reddits(content_id=None): """ Search for reddits related to topic of article with <content_id> https://www.reddit.com/dev/api#GET_search The extension performs these functions on the client side due to rate limiting, but the website needs this. """ try: # Search by url reddits = reddit_search(request.content['url']) # Search by keyword keywords = content_keywords(request.content) q = '+'.join(x['keyword'] for x in keywords[:3]) more_reddits = reddit_search(q) # De-dupe for i in xrange(len(more_reddits) - 1, -1 -1): id = more_reddits[i]['data']['id'] for r in reddits: if id == r['id']: del more_reddits[i] reddits.extend(more_reddits) return render({'reddits': reddits}, template='reddits.jinja2') except Exception, e: traceback.print_exc() return render({'url': request.url, 'error': str(e)}, template='error.jinja2')
def local_tweets(content_id=None): lat = request.args['lat'] lon = request.args['lon'] radius = request.args.get('radius', '10mi') try: q = twitter_query(content_keywords(request.content), content_entities(request.content)) credentials = get_twitter_credentials() params = { 'count': 100, 'result_type': 'mixed', 'geocode': '%s,%s,%s' % (lat, lon, radius) } result = twitter_search(params, credentials=credentials) tweets = screen_name_filter(result.statuses, 'media') return render( {'tweets': tweets }) except TwitterAuthError: # This redirect is for the HTML UI. JSON clients should execute # the auth-check / auth-verify cycle before making API calls return redirect(url_for('auth_check') + \ '?redirect=%s' % request.url) except TwitterClientError: return render({'url':request.url}, template='twitter_client_error.jinja2') except Exception, e: traceback.print_exc() return render({'url': request.url, 'error': str(e)})
def topic(content_id=None): """ Search for tweets related to topic of article with <content_id> Alternatively accepts url or id in query params. """ try: q = twitter_query(content_keywords(request.content), content_entities(request.content)) credentials = get_twitter_credentials() params = {'q': q, 'count': 100, 'result_type': 'mixed'} result = twitter_search(params, credentials=credentials) tweets = screen_name_filter(result.statuses, 'media') return render( {'tweets': tweets }, template='topic.jinja2') except TwitterAuthError: # This redirect is for the HTML UI. JSON clients should execute # the auth-check / auth-verify cycle before making API calls return redirect(url_for('auth_check') + \ '?redirect=%s' % request.url) except TwitterClientError: return render({'url':request.url}, template='twitter_client_error.jinja2') except Exception, e: traceback.print_exc() return render({'url': request.url, 'error': str(e)}, template='error.jinja2')
def pundittweets(content_id=None): """ Retrieve pundit tweets for article with <content_id> Alternatively accepts url or id in query params. """ try: content = request.content keywords = content_keywords(content) categories = content_categories(content) if not categories: raise Exception('No categories found for article') category = categories[0][0] credentials = get_twitter_credentials() tweets = pundit_tweets( category, keywords, credentials=credentials) tweets = dedupe_tweets(tweets) return render({'tweets': tweets}, template='pundittweets.jinja2') except TwitterAuthError: # This redirect is for the HTML UI. JSON clients should execute # the auth-check / auth-verify cycle before making API calls return redirect(url_for('auth_check') + \ '?redirect=%s' % request.url) except TwitterClientError: return render({'url':request.url}, template='twitter_client_error.jinja2') except Exception, e: traceback.print_exc() return render({'url': request.url, 'error': str(e)}, template='error.jinja2')
def stakeholdertweets(content_id=None): """ Retrieve stakeholder tweets for article with <content_id> Alternatively accepts url or id in query params. """ try: content = request.content keywords = content_keywords(content) stakeholders = content_stakeholders(content) stakeholders = stakeholders[:request.args.get('limit', 10)] credentials = get_twitter_credentials() result = stakeholder_tweets( stakeholders, keywords, credentials=credentials) d = group_tweets_by_screen_name([d['tweet'] for d in result]) return render({'tweets': d.items()}, template='stakeholdertweets.jinja2') except TwitterAuthError: # This redirect is for the HTML UI. JSON clients should execute # the auth-check / auth-verify cycle before making API calls return redirect(url_for('auth_check') + \ '?redirect=%s' % request.url) except TwitterClientError: return render({'url':request.url}, template='twitter_client_error.jinja2') except Exception, e: traceback.print_exc() return render({'url': request.url, 'error': str(e)}, template='error.jinja2')
def keywords(content_id=None): """ Retrieve and cache keywords for article with <id>. Automatically prune keywords with count < 2 """ try: data = content_keywords(request.content) return render({'keywords': data}, template='keywords.jinja2') except Exception, e: traceback.print_exc() return render({'url': request.url, 'error': str(e)}, template='error.jinja2')
def keywords(content_id=None): """ Retrieve and cache keywords for article with <id>. Automatically prune keywords with count < 2 """ try: data = content_keywords(request.content) return render({'keywords': data}, template='keywords.jinja2') except Exception, e: traceback.print_exc() return render({ 'url': request.url, 'error': str(e) }, template='error.jinja2')