Проблема с задержкой для Twitter Api - PullRequest
0 голосов
/ 29 апреля 2020

У меня есть датафрейм из учетной записи Twitter, я пытаюсь вызвать фотометр (https://github.com/IUNetSci/botometer-python) для получения подробной информации, ниже приведены пример данных и код

authors,count
generate_output,6
dismisstrump,6
luciano_ocasio,6
Jenny72166737,5
Hong18249170,5
anas_erindra,5
JayChance12,5
viralvm69,5
89nuncamais,5
ngaruman,4
sixyelcastaneda,4
Debisriprasad,4

import pandas as pd
import botometer
import nltk
from datetime import datetime
import tweepy
import time

author_details=[]
for i, row in df.iterrows():
   try:
      print(i)
      start = datetime.now()
      a_name='@'+row['authors']
      result = bom.check_account(a_name)
      a_details=(a_name, result)
      a_details=dict([(a_name, result)]) 
      author_details.append(a_details)
      now = datetime.now()
      d_time = (now - start).total_seconds()
      if int(d_time) < 900 and i<180:
        pass
      else:
        time.sleep(100)
   except Exception as e:
      print(e)
      continue

Проблема: я не должен применять паузу через 15 минут, если API вызывает более 180 учетных записей, и проблема заключается в том, что я не могу сохранить результат в отдельном столбце. Выход из фотометра представляет собой словарь.

Ожидаемый результат

authors,count, result
generate_output,6, {}
dismisstrump,6, {}
luciano_ocasio,6, {}
Jenny72166737,5, {}
Hong18249170,5, {}
anas_erindra,5, {}
JayChance12,5, {}
viralvm69,5, {}
89nuncamais,5, {}
ngaruman,4, {}
sixyelcastaneda,4, {}
Debisriprasad,4, {}

Любое предложение применить задержку по времени и сохранить результат как отдельный столбец

1 Ответ

1 голос
/ 30 апреля 2020

Вы можете попробовать этот код, он поймает исключение и подождет 600 секунд, вы можете сохранить результат из ботометра в виде списка. Вы можете напрямую сохранить счет бота с результатом ['scores'] ['engli sh']

err="429 Client Error: Too Many Requests for url: https://osome- 
botometer.p.rapidapi.com/2/check_account"
df['details']=''
df['bot_score']=''
for i, row in df.iterrows():
   try:
    start = datetime.now()
    a_name='@'+row['authors']
    result = bom.check_account(a_name)
    df.at[i,'det']=[result]
    df.at[i,'bot_score'] = int((result['scores']['english'])*100)
 except Exception as e:
    if e==err:
        time.sleep(600)
    continue
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...