Twitter API 时间表 - 整整一周

问题描述 投票:0回答:1
  • 我是 API 和 Twitter 新手
  • 我设法检索“正常”20 条推文(状态)
  • 有没有办法一次检索一整周?
  • 或者我是否必须编写一段代码来永久调用 20 条推文并逐条附加?
twitter timeline permanent
1个回答
0
投票

您可以通过获取用户的查找推文 V2 API 获取整周的推文

通过V1.1 API获取用户时间线

推文用户查找V2

GET /2/users/{user id}/tweets

通过V1.1 API获取推文时间线

GET statuses/user_timeline
我将与 

Mr. 一起演示两者。邮递员发推文

#1 在

这里获取访问令牌

该Token支持V2和V1.1 API调用。

#2 v2 一周获取推文

https://api.twitter.com/2/users/44196397/tweets?max_results=20&start_time=2023-01-18T00:00:01Z&end_time=2023-01-25T00:00:01Z

如果您想了解每条推文的更多详细信息。 通过添加查询参数(如

like countcreate at

等)在
此处
添加属性选项

#3 获取时间线,v1.1 的 20 条推文

Timeline API 两个方法在

这里

https://api.twitter.com/2/users/:id/timelines/reverse_chronological

https://api.twitter.com/2/users/:id/tweets
使用第二种方法获取推文的演示

https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=elonmusk&count=20

两个 API 都需要分配访问令牌

两个API都可以通过node.js或Python

语言进行编程。

const axios = require('axios') const API_KEY = '<your API Key>' const API_KEY_SECRET = '<your API Secret>' const getToken = async () => { try { const resp = await axios.post( url = 'https://api.twitter.com/oauth2/token', data = '', config = { params: { 'grant_type': 'client_credentials' }, auth: { username: API_KEY, password: API_KEY_SECRET } } ); return Promise.resolve(resp.data.access_token); } catch (err) { console.error(err) return Promise.reject(err) } }; const getUserId = async (username, token) => { try { const resp = await axios.get( url = `https://api.twitter.com/2/users/by/username/${username}`, config = { headers: { 'Accept-Encoding': 'application/json', 'Authorization': `Bearer ${token}`, } } ); // { data: { id: '44196397', name: 'Elon Musk', username: 'elonmusk' } } return Promise.resolve(resp.data.data.id) } catch (err) { return Promise.reject(err) } }; const getTweetTimeline = async (user_id, start_date, end_date, token) => { try { const tweets = []; let index = 1 let next_token = 'start' while (next_token != null) { let url = `https://api.twitter.com/2/users/${user_id}/tweets?start_time=${start_date}&end_time=${end_date}&tweet.fields=created_at&max_results=20` if (next_token != 'start') { url = `https://api.twitter.com/2/users/${user_id}/tweets?start_time=${start_date}&end_time=${end_date}&tweet.fields=created_at&max_results=20&pagination_token=${next_token}` } const resp = await axios.get( url = url, config = { headers: { 'Accept-Encoding': 'application/json', 'Authorization': `Bearer ${token}`, } } ); for(const item of resp.data.data) { tweets.push({ index : index, created_at: item.created_at, text: item.text, id : item.id }) index = index + 1 } next_token = resp.data.meta.next_token } return Promise.resolve(tweets) } catch (err) { console.error(err) return Promise.reject(err) } } getToken() .then(token => { console.log(token); getUserId('elonmusk', token) .then(user_id => { getTweetTimeline(user_id,'2023-02-05T00:00:00Z','2023-02-11T23:59:59Z', token) .then(tweets => { for(const tweet of tweets) { console.log(tweet) } }) .catch(error => { console.log(error.message); }); }) .catch(error => { console.log(error.message); }); }) .catch(error => { console.log(error.message); });
结果

node get-tweet.js > result.json

使用 Python 和

tweepy
 库更新我的时间线。

我将仅使用 OAuth 2.0 应用程序(中心列),使用我的用户名(或其他名称 - 两者都支持)并在 30 天内获得补间(排除、转发、回复)

推文 V2 timeline

 API

GET /2/users/:id/tweets

tweepy

这里专心调用该API

Tweepy 的 API

Client.get_users_tweets()

 将调用 Tweep V2 API 的 
GET /2/users/:id/tweets

详细参数在

这里

来自开发者的令牌

仪表板

Python 演示代码

import tweepy def get_all_tweets(user_name): bearer_token ='<your App Bearer Token>' # From https://developer.twitter.com/en/portal client = tweepy.Client(bearer_token=bearer_token) user = client.get_user(username = user_name) user_id = user.data.id userTweets = [] count = 0 limit = 1000 pagination_token = None start_time = '2023-01-01T00:00:00Z' # YYYY-MM-DDTHH:mm:ssZ end_time = '2023-01-31T00:00:00Z' # YYYY-MM-DDTHH:mm:ssZ while count < limit: tweets = client.get_users_tweets( id = user_id, exclude = ['retweets','replies'], pagination_token = pagination_token, start_time = start_time, end_time = end_time, max_results = 100) if 'next_token' in tweets.meta.keys(): if (tweets.meta['next_token']) is not None: pagination_token = tweets.meta['next_token'] else: pagination_token = None else: pagination_token = None if tweets.data is not None: for tweet in tweets.data: count += 1 userTweets.append({ "id": tweet.id, "test": tweet.text }) if pagination_token is None: break return userTweets, count # user_name can assign your tweet name user_name = 'elonmusk' [tweets, count] = get_all_tweets(user_name) print(count) for tweet in tweets: tweet_url = f"https://twitter.com/{user_name}/status/{tweet['id']}" print(tweet) print(tweet_url)
运行它

python get-tweet.py
结果

© www.soinside.com 2019 - 2024. All rights reserved.