예제 #1
0
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')
예제 #2
0
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')
예제 #3
0
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)})
예제 #4
0
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')
예제 #5
0
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')
예제 #6
0
파일: app.py 프로젝트: NUinfolab/context
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')
예제 #7
0
파일: app.py 프로젝트: NUinfolab/context
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)})
예제 #8
0
파일: app.py 프로젝트: NUinfolab/context
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')
예제 #9
0
파일: app.py 프로젝트: NUinfolab/context
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')
예제 #10
0
파일: app.py 프로젝트: NUinfolab/context
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')
예제 #11
0
파일: app.py 프로젝트: NUinfolab/context
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')
예제 #12
0
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')