im trying gather tweets last 24 hours , put them csv file
when
_csv.error: iterable expected, not datetime.datetime
as error
can tell me how rid of error , other improvements possibly made code
def get_all_tweets(screen_name): # twitter allows access users recent 3240 tweets method # authorize twitter, initialize tweepy auth = tweepy.oauthhandler(consumer_token, consumer_secret) auth.set_access_token(access_token, access_secret) api = tweepy.api(auth, wait_on_rate_limit=true) # initialize list hold tweepy tweets alltweets = [] # make initial request recent tweets (20 maximum allowed count) new_tweets = api.home_timeline (screen_name=screen_name, count=20) # save recent tweets alltweets.extend(new_tweets) # save id of oldest tweet less 1 oldest = alltweets[-1].id - 1 page = 1 deadend = false while len(new_tweets) > 0: print ("getting tweets before %s" % (oldest)) # subsiquent requests use max_id param prevent duplicates new_tweets = api.home_timeline(screen_name=screen_name, count=20, max_id=oldest, page = page) # save recent tweets alltweets.extend(new_tweets) # update id of oldest tweet less 1 oldest = alltweets[-1].id - 1 print ("...%s tweets downloaded far" % (len(alltweets))) tweet in alltweets: if (datetime.datetime.now() - tweet.created_at).days < 1: # transform tweepy tweets 2d array populate csv outtweets = [tweet.id_str, tweet.created_at, tweet.text.encode("utf-8")] else: deadend = true return if not deadend: page += 1 time.sleep(10) # write csv open('%s_tweetsbq.csv' % screen_name, 'w') f: writer = csv.writer(f) writer.writerow(["id", "created_at", "text"]) writer.writerows(outtweets) pass print ("csv written") if __name__ == '__main__': # pass in username of account want download get_all_tweets("bq")
edit
(most recent call last): file "c:\users\barry\workspace\twittertest\test1\mgo.py", line 77, in <module> get_all_tweets("bq") file "c:\users\barry\workspace\twittertest\test1\mgo.py", line 70, in get_all_tweets writer.writerows(outtweets) _csv.error: iterable expected, not datetime.datetime
edit 2
for row in outtweets: date_str,time_str, entries_str = row.split() #print(a_date,a_time, entries) a_time = datetime.strptime(time_str, "%h:%m:%s") e in entries_str.split(','): # write csv open('%s_tweetsbq.csv' % screen_name, 'w') f: writer = csv.writer(f) writer.writerow(["id", "created_at", "text"]) writer.writerows(outtweets) pass
outtweets
ever contains single row of data. writer.writerows()
expects list of rows, is, list of lists:
[ [columns, in, row, 1], [columns, in, row, 2], ]
you setting outtweets
this:
outtweets = [tweet.id_str, tweet.created_at, tweet.text.encode("utf-8")]
that's single row. pass writerows
, need accumulate each row of data list, , pass list writerows
.
Comments
Post a Comment