Exemplo n.º 1
0
def search_term(term):
    term = (urllib.unquote(term)).strip()  # remove whitespace on edges
    if term.find(",") != -1:
        terms = term.split(",")
        terms = [t.strip() for t in terms]
        result = compare_terms(terms)
        return render_template("compare.html", result=result)

    try:
        pos, neg, top_pos, top_neg, neu = ts.search_get_sentiment(term, auth)
        if len(pos) + len(neg) + len(neu) == 0:
            return render_template("index.html", term=term)

    except ts.twitter.TwitterHTTPError:
        # Twitter Error!
        return render_template("error.html", term=term)

    stats = dict()
    stats["term"] = term
    stats["pos"] = len(pos)
    stats["neg"] = len(neg)
    stats["neu"] = len(neu)
    stats["sum"] = stats["pos"] + stats["neg"] + stats["neu"]
    stats["pct_pos"] = int(100.0 * stats["pos"] / float(stats["sum"]))
    stats["pct_neu"] = int(100.0 * stats["neu"] / float(stats["sum"]))
    stats["pct_neg"] = int(100.0 * stats["neg"] / float(stats["sum"]))
    stats["top_pos"] = len(top_pos)
    stats["top_neg"] = len(top_neg)

    try:
        ts.insert(stats, pos + neg + neu)
    except:
        app.logger.error("Could not insert into database. Query was %s." % term)

    # print stats
    words, color = get_word(stats)
    text = dict()
    text["term"] = term
    text["text_result"] = words[random.randint(0, len(words) - 1)]
    text["color"] = color

    # trim top tweets down.  pos/neg are sorted by sentiment
    tweet_limit = 8
    pos = trim_tweets(pos, tweet_limit)
    neg = trim_tweets(neg, tweet_limit)

    top_pos = [(t[0], urllib.quote(t[0]), t[1]) for t in top_pos]
    top_neg = [(t[0], urllib.quote(t[0]), t[1]) for t in top_neg]

    return render_template(
        "results.html", pos=pos, pos_words=top_pos, neg=neg, neg_words=top_neg, stats=stats, text=text
    )
Exemplo n.º 2
0
def compare_terms(terms):
    """ Compares a list of terms by sentiment on twitter.  Returns a dictionary of terms with sentiment (pos, neg, neu, pct_pos, pct_neg, pct_neu)
    """
    result = dict()
    for t in terms:
        r = {"term": t}
        try:
            pos, neg, top_pos, top_neg, neu = ts.search_get_sentiment(t, auth)
            if len(pos) + len(neg) + len(neu) == 0:
                for s in ("pos", "neg", "neu"):
                    r[s] = []
                continue

        except ts.twitter.TwitterHTTPError:
            # Twitter Error!
            for s in ("pos", "neg", "neu"):
                r[s] = []
            continue

        r["pos"] = len(pos)
        r["neg"] = len(neg)
        r["neu"] = len(neu)
        r["sum"] = r["pos"] + r["neg"] + r["neu"]
        r["pct_pos"] = int(100.0 * r["pos"] / float(r["sum"]))
        r["pct_neu"] = int(100.0 * r["neu"] / float(r["sum"]))
        r["pct_neg"] = int(100.0 * r["neg"] / float(r["sum"]))
        r["top_pos"] = len(top_pos)
        r["top_neg"] = len(top_neg)

        try:
            ts.insert(r, pos + neg + neu)
        except:
            app.logger.error("Could not insert into database. Query was %s." % t)

        result[t] = r

    return result
Exemplo n.º 3
0
def api(term):
    term = (urllib.unquote(term)).strip()
    if term.find(",") != -1:
        terms = term.split(",")
        terms = [t.strip() for t in terms]
        result = compare_terms(terms)
        return json.dumps(result)

    stats = dict()
    stats["term"] = term

    try:
        pos, neg, top_pos, top_neg, neu = ts.search_get_sentiment(term, auth)
        if len(pos) + len(neg) + len(neu) == 0:
            stats["error"] = "No search results"
            return json.dumps({term: stats})

    except ts.twitter.TwitterHTTPError:
        # Twitter Error!
        stats["error"] = "Could not connect to twitter"
        return json.dumps({term: stats})

    stats["pos"] = len(pos)
    stats["neg"] = len(neg)
    stats["neu"] = len(neu)
    stats["sum"] = stats["pos"] + stats["neg"] + stats["neu"]
    stats["pct_pos"] = int(100.0 * stats["pos"] / float(stats["sum"]))
    stats["pct_neu"] = int(100.0 * stats["neu"] / float(stats["sum"]))
    stats["pct_neg"] = int(100.0 * stats["neg"] / float(stats["sum"]))

    try:
        ts.insert(stats, pos + neg + neu)
    except:
        pass

    # to be consistent with the multi-search, we must return a dict that looks like: { 'term': stats }
    return render_template("json.html", json=json.dumps({term: stats}))