Everybody is on the Web today, so there is a lot of interest in sentiment analysis. I made a short script that retrieves financial news from a Yahoo Finance RSS feed for a given symbol. The RSS is parsed with FeedParser. I am now trying out the Alchemy API for sentiment analysis. For my first attempt I am just scoring the headlines of the last 12 hours (ignoring duplicates). I basically give 1 point for a “positive” headline and deduct 1 point for a negative headline. Alchemy limits free accounts to 1000 calls a day I believe so this is just temporary. As they say here is the code. Enjoy!
import feedparser as fp import sys from time import mktime from datetime import datetime as dt import calendar as cal from alchemyapi import AlchemyAPI base_url = "http://finance.yahoo.com/rss/headline?s=" def sentiment(alchemyapi, myText): response = alchemyapi.sentiment("text", myText) return response["docSentiment"]["type"] def main(): alchemy = AlchemyAPI() rss = fp.parse(base_url + sys.argv) title = "" i = 0 score = 0 for entry in rss.entries: pub_date = dt.fromtimestamp(mktime(entry.published_parsed)) delta = dt.now() - pub_date if delta.seconds/3600 < 12: if title == entry.title: continue else: title = entry.title print "%d%s %d%d %s" % (pub_date.day, cal.month_abbr[pub_date.month], pub_date.hour, pub_date.minute, entry.title) mood = sentiment(alchemy, entry.title) if mood == "positive": score+=1 elif mood == "negative": score-=1 i+=1 print mood, score, "/", i if __name__ == "__main__": main()