Reputation: 87
I don’t have much experience with python but I’d like a way to store a response from TweetSentiments.com API.
For more info visit - http://intridea.com/blog/2010/11/29/sentiment-analysis-using-tweetsentimentscom-api
I have a CSV file full of different tweets and would like to be able to read from the file to the API (csvreader.fieldnames??)with a query like ‘http://data.tweetsentiments.com:8080/api/analyze.json?q=’.
It seems the only response possible is JSON but I’d prefer to return the results to another CSV file with fields like ‘tweet’ and ‘rating’.
So I am interested in creating a python script that –
Reads CSV tweet file > construct query > Interrogates API > format JSON response > writes to CSV file.
I just need a foundation as I’m struggling to find some example code.
Tried using the cURL command from the command line ‘curl ”http://data.tweetsentiments.com:8080/api/analyze.json?q=”’
But got a ‘400 – Bad Request’ back.
I figured if I got a response back I could use this as a starting point.
Extra info – being implemented on WinXp.
Thanks in advance for the advice!
<---Update!--->
import csv
import urllib
import simplejson as json
Tweets=[] ## Creates empty list to store tweets.
TweetWriter = csv.writer(open('test.csv', 'w'), dialect='excel', delimiter=' ',quotechar='|')
TweetReader = csv.reader(open("C:\StoredTweets.csv", "r"))
for row in TweetReader:
#TweetList.append(rows)
Tweets.append({ 'tweet': row[0], 'date': row[1] }) ## Stores from CSV in list.
for rows in Tweets:
#print TweetList
data = urllib.urlencode({'Tweet': row[0], 'Date': row[1]}) ##Takes Tweet and date to construct query.
#print data
API_request = urllib.urlopen("http://data.tweetsentiments.com:8080/api/analyze.json?q=", data) ## Adds query to end of URL and queries API
print API_request
result = json.load(urllib.request({'API_request'}))
print result
TweetWriter.write(result) ## Writes API Response to CSV file.
It’s the json.load part I can’t seem to get the hang of. I’ve looked at loads of different examples and can’t seem to understand it. The API_request should hold my json structure I think? Should the json reponse be stored in another list? I keep getting told “AttributeError: ‘module’ object had no attribute ‘request’. Thanks for taken the time to go over this with me!
C:\>python TweetSentiment.py
<!DOCTYPE html>
<html>
<head>
<style type="text/css">
body { text-align:center;font-family:helvetica,arial;font-size:22px;
color:#888;margin:20px}
#c {margin:0 auto;width:500px;text-align:left}
</style>
</head>
<body>
<h2>Sinatra doesn't know this ditty.</h2>
<img src='/__sinatra__/404.png'>
<div id="c">
Try this:
<pre>post '/api/analyze' do
"Hello World"
end</pre>
</div>
</body>
</html>
Upvotes: 1
Views: 389
Reputation: 123762
This is the sort of thing Python is great for -- good choice! There are a few different things you need to do, in order.
Read the CSV file.
You will want to use the csv
module; specifically, csv.Reader
or csv.DictReader
(depending on whether you want tuples or dictionaries of each row.
Construct the query.
Have a look at urllib.urlencode
(in Python2 -- the name has changed slightly in Python 3, to urllib.parse.quote
).
Interrogate API.
urllib.request
. Plenty of documentation for this! You may need to do some HTTPS stuff, include an API key, that sort of thing.
Format JSON response.
json.load
will return you a dictionary from the urllib.Request
object.
Write CSV.
csv.writer
.
Is there any particular step in here you'd like help with?
Here's a very quick idea of what the code might end up looking like.
with open(...) as inputs, open(..., "w") as outputs:
inputs = csv.reader(inputs)
outputs = csv.writer(outputs)
for line in inputs:
query = urllib.urlencode(...)
result = json.load(urllib.request(...))
outputs.write(result["spam"], result["ham"])
Upvotes: 3