如何使用Twitter的标准API每天获取超过100条不同的查询记录?

2024-04-26 00:15:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图使用标准API下载推文列表,但我得到的总是相同的记录。 i、 这是我的请求:

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

但如果我时不时地运行它,在1小时之间,我得到的结果是相同的

我的api.search的设置是否有问题,或者我是否误解了Twitter标准API的限制

这是我的代码:

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)

谢谢你的帮助


Tags: tokenapiiddbgetaccessattweet
1条回答
网友
1楼 · 发布于 2024-04-26 00:15:54

正如我在your Tweepy issue on GitHub中所回答的,一个“混合的”result_type包括流行的和最近的结果。如果只需要最新的结果,则需要指定“最近”。正如我所解释的,您需要使用since_id参数来避免获得重复的tweet

the documentation for ^{}the standard search API

如果要在短时间内(如2秒,而不是1小时)迭代分页结果,可以使用Cursor

对于每个查询超过100个结果,标准搜索API的限制是每页最多100个,因此这是不可能的

相关问题 更多 >