Как получить более 100 различных записей в день на запрос с помощью стандартного API Twitter? - PullRequest
0 голосов
/ 08 февраля 2020

Я пытаюсь загрузить список твитов, используя стандартный API, но то, что я получаю, всегда одни и те же записи. то есть, это мой запрос:

ApiSearch = api.search(q="#immigration", lang="en", result_type="mixed", count=100, until=untilDate, include_entities=False)

, но если я запускаю его время от времени, то в течение 1 часа я получаю одинаковый результат.

Что-то не так в настройках моего api.search или я неправильно понял пределы стандартного API Twitter?

Это мой код:

conn_str = ("DRIVER={PostgreSQL Unicode};"
    "DATABASE=TwitterLCL;"
    "UID=postgres;"
    "PWD=pswd;"
    "SERVER=localhost;"
    "PORT=5432;")

consumer_key = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
consumer_secret = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
access_token = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
access_token_secret = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'

auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)

api = tweepy.API(auth, wait_on_rate_limit=True)

col_db_tweetTable01 =  ['CREATED_AT', 'TWEET_ID', 'TEXT', 'USER_ID']

i = 0
while i <= 10000:
    time.sleep(2)
    i += 1
    ApiSearch = api.search(q="#immigration", lang="en", result_type="mixed", count=100, until=None, include_entities=False)
    time.sleep(2)
    for res in range(0, len(ApiSearch)):
        db_tweetTable01DB = pd.DataFrame(columns = col_db_tweetTable01) #creates a new dataframe that's empty
        TWEET = ApiSearch[res]._json
        Created_At = None
        Created_At = TWEET.get("created_at")
        print("Created_At : "+Created_At)
        Tweet_Id = None
        Tweet_Id = TWEET.get("id_str")
        Text = None
        Text = TWEET.get("text")
        User_Id = TWEET.get("user").get("id_str")
        db_tweetTable01DB = db_tweetTable01DB.append({'CREATED_AT' : Created_At, 'TWEET_ID' : Tweet_Id, 'TEXT' : Text, 'USER_ID' : User_Id}, ignore_index=True)
        try:
            connStr = pyodbc.connect(conn_str)
            cursor = connStr.cursor()
            for index, row in db_tweetTable01DB.iterrows():
                #print(row)
                cursor.execute("INSERT INTO public.db_tweettable01(CREATED_AT, TWEET_ID, TEXT, USER_ID) values (?, ?, ?, ?)", row['CREATED_AT'], row['TWEET_ID'], row['TEXT'], row['USER_ID'])
                connStr.commit()
            cursor.close()
            connStr.close()
        except pyodbc.Error as ex:
            sqlstate = ex.args[1]
            print(sqlstate)
            print("Tweet_Id : "+Tweet_Id)
            print("User_Id : "+User_Id)

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 08 февраля 2020

Как я уже ответил в вашей проблеме Tweepy на GitHub , «смешанная» result_type включает как популярные, так и недавние результаты. Вы захотите указать «последние», если вы хотите только самые последние результаты. Как я уже объяснил, вы захотите использовать параметр since_id, чтобы избежать дублирования твитов.

См. документацию для API.search и стандартного API поиска .

Если вы собираетесь перебирать разбитые на страницы результаты за короткий промежуток времени, например, 2 секунды, а не час, вы можете вместо этого использовать Курсор .

Что касается более 100 результатов на запрос, то ограничение стандартного API поиска составляет максимум 100 на страницу, поэтому это невозможно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...