2017-07-06 54 views
0

我試圖在標籤中打開每個打開的推文,但我的代碼不會超過299條推文。如何在帶tweepy的hashtag中發佈所有推文?

我也試圖從一個特定的時間線,像推文只在2015年5月和2016年7月tweets。有沒有辦法做到這一點在主流程中,或者我應該寫一點代碼呢?

這裏是我的代碼:

# if this is the first time, creates a new array which 
# will store max id of the tweets for each keyword 
if not os.path.isfile("max_ids.npy"): 
    max_ids = np.empty(len(keywords)) 
    # every value is initialized as -1 in order to start from the beginning the first time program run 
    max_ids.fill(-1) 
else: 
    max_ids = np.load("max_ids.npy") # loads the previous max ids 

# if there is any new keywords added, extends the max_ids array in order to correspond every keyword 
if len(keywords) > len(max_ids): 
    new_indexes = np.empty(len(keywords) - len(max_ids)) 
    new_indexes.fill(-1) 
    max_ids = np.append(arr=max_ids, values=new_indexes) 

count = 0 
for i in range(len(keywords)): 
    since_date="2015-01-01" 
    sinceId = None 
    tweetCount = 0 
    maxTweets = 5000000000000000000000 # maximum tweets to find per keyword 
    tweetsPerQry = 100 
    searchQuery = "#{0}".format(keywords[i]) 
    while tweetCount < maxTweets: 
     if max_ids[i] < 0: 
       if (not sinceId): 
        new_tweets = api.search(q=searchQuery, count=tweetsPerQry) 
       else: 
        new_tweets = api.search(q=searchQuery, count=tweetsPerQry, 
              since_id=sinceId) 
     else: 
       if (not sinceId): 
        new_tweets = api.search(q=searchQuery, count=tweetsPerQry, 
              max_id=str(max_ids - 1)) 
       else: 
        new_tweets = api.search(q=searchQuery, count=tweetsPerQry, 
              max_id=str(max_ids - 1), 
              since_id=sinceId) 
     if not new_tweets: 
      print("Keyword: {0}  No more tweets found".format(searchQuery)) 
      break 
     for tweet in new_tweets: 
      count += 1 
      print(count) 

      file_write.write(
         . 
         . 
         . 
         ) 

      item = { 
       . 
       . 
       . 
       . 
       . 
      } 

      # instead of using mongo's id for _id, using tweet's id 
      raw_data = tweet._json 
      raw_data["_id"] = tweet.id 
      raw_data.pop("id", None) 

      try: 
       db["Tweets"].insert_one(item) 
      except pymongo.errors.DuplicateKeyError as e: 
       print("Already exists in 'Tweets' collection.") 
      try: 
       db["RawTweets"].insert_one(raw_data) 
      except pymongo.errors.DuplicateKeyError as e: 
       print("Already exists in 'RawTweets' collection.") 

     tweetCount += len(new_tweets) 
     print("Downloaded {0} tweets".format(tweetCount)) 
     max_ids[i] = new_tweets[-1].id 

np.save(arr=max_ids, file="max_ids.npy") # saving in order to continue mining from where left next time program run 
+0

請簡化代碼以儘可能最小化以說明您的問題。太多的樣板與問題無關。 –

+0

已編輯。感謝您的警告。 –

回答

0

檢查Twitter的API文檔,可能是它允許僅有300鳴叫解析。 我會建議忘記API,使用流媒體的請求。 api是一個有限制請求的實現。

+0

你有什麼建議流式傳輸?另外,我可以使用流式傳輸舊數據嗎? –

0

看一看這樣的:https://tweepy.readthedocs.io/en/v3.5.0/cursor_tutorial.html

而且試試這個:

import tweepy 

auth = tweepy.OAuthHandler(CONSUMER_TOKEN, CONSUMER_SECRET) 
api = tweepy.API(auth) 

for tweet in tweepy.Cursor(api.search, q='#python', rpp=100).items(): 
    # Do something 
    pass 

你的情況,你有微博的最大數量來獲得,從而爲每個鏈接的教程,你可以這樣做:

import tweepy 

MAX_TWEETS = 5000000000000000000000 

auth = tweepy.OAuthHandler(CONSUMER_TOKEN, CONSUMER_SECRET) 
api = tweepy.API(auth) 

for tweet in tweepy.Cursor(api.search, q='#python', rpp=100).items(MAX_TWEETS): 
    # Do something 
    pass 

如果您想在給定ID後發送推文,也可以傳遞該參數。

+0

我在範圍內(len(關鍵字)): 在tweepy.Cursor中的鳴叫(api.search,q ='#python',rpp = 100).items():這樣做,但仍然沒有進一步然後299鳴叫... –

+0

你可以嘗試我的例子,從你的代碼分開。你還只是去了299條推文嗎?我測試了我的代碼片段,並且在我手動停止它之前,最多可以發佈1000條推文。 –

+0

只有在我的代碼中最多可以發送100條推文,並自動停止。 –

0

對不起,我無法在評論中回答,太久。 :)

當然:)檢查這個例子: 高級搜索關鍵字#DATA 2015年5月 - 得到這個URL 2016七月 :https://twitter.com/search?l=&q=%23data%20since%3A2015-05-01%20until%3A2016-07-31&src=typd

session = requests.session() 
keyword = 'data' 
date1 = '2015-05-01' 
date2 = 2016-07-31 
session.get('https://twitter.com/search?l=&q=%23+keyword+%20since%3A+date1+%20until%3A+date2&src=typd', streaming = True) 

現在我們擁有所有的請求的鳴叫, 也許你可以與 '分頁' 分頁鏈接的問題 - >

https://twitter.com/i/search/timeline?vertical=news&q=%23data%20since%3A2015-05-01%20until%3A2016-07-31&src=typd&include_available_features=1&include_entities=1&max_position=TWEET-759522481271078912-759538448860581892-BD1UO2FFu9QAAAAAAAAETAAAAAcAAAASAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA&reset_error_state=false

也許你合作uld會隨機發布一條tweet id,或者您可以先解析,或者從twitter請求一些數據。可以辦到。

使用Chrome的網絡標籤查找所有請求的信息:)

相關問題