python - Trying to Gather all tweets from the past 24hours and put them into a CSV file -


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