The question has already been asked a couple of times. For example here or here. Yet, no accepted answer was found. Also, both the questions refer to Twitter API v1.0, which is no longer in use. Thus, I thought it could be beneficial to share a simple piece of code I wrote in order to have the number of tweets containing a given keyword (or phrase).
If you have any feedbacks, do not hesitate to reply.
The v1. 1 search/tweets and the Twitter API v2 recent search endpoint support both OAuth 1.0a User Context and OAuth 2.0 App-Only. Therefore, if you were previously using the standard v1. 1 search endpoint you can continue using the same authentication method if you migrate to the Twitter API v2 version.
In most cases, the text content of a Tweet can contain up to 280 characters or Unicode glyphs. Some glyphs will count as more than one character.
Here it is:
#Import the required modules
from twython import Twython
import json
import csv
#Set parameters
keyword = 'kittens'; #The desired keyword(s)
tweetsXiteration = 100; #Where 100 is the max
dateFrom = '2014-02-01'; #Inclusive (YYYY-MM-DD)
dateTo = '2014-02-02'; #Exclusive (YYYY-MM-DD)
done = False; #Must be false
#Setting the OAuth
Consumer_Key = 'XXX';
Consumer_Secret = 'XXX';
Access_Token = 'XXX';
Access_Token_Secret = 'XXX';
#Connection established with Twitter API v1.1
twitter = Twython(Consumer_Key, Consumer_Secret, Access_Token, Access_Token_Secret);
#Twitter is queried
response = twitter.search(q = keyword, count = tweetsXiteration, since = dateFrom, until = dateTo, result_type = 'mixed');
#Results (partial)
countTweets = len(response['statuses']);
#If all the tweets have been fetched, then we are done
if not ('next_results' in response['search_metadata']):
done = True;
#If not all the tweets have been fetched, then...
while (done == False):
#Parsing information for maxID
parse1 = response['search_metadata']['next_results'].split("&");
parse2 = parse1[0].split("?max_id=");
parse3 = parse2[1];
maxID = parse3;
#Twitter is queried (again, this time with the addition of 'max_id')
response = twitter.search(q = keyword, count = tweetsXiteration, since = dateFrom, until = dateTo, max_id = maxID, include_entities = 1, result_type = 'mixed');
#Updating the total amount of tweets fetched
countTweets = countTweets + len(response['statuses']);
#If all the tweets have been fetched, then we are done
if not ('next_results' in response['search_metadata']):
done = True;
print(countTweets);
Keep in mind that:
Additional information can be found here or on Twitter official documentation.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With