行业知识
推特API(Twitter API)V2 查询用户信息
2026-11-15 13:42:31
来源:互联网转载
�� 前面章节已经介绍使用code换取Token的整个流程了,这里不再重复阐述了,下面我们介绍如何使用Token查询用户信息等操作。
()1.引入相关依赖Maven
oauth.signpost
()signpost-core
1.2.1.2
oauth.signpost
signpost-commonshttp4
1.2.1.2
com.twitter
twitter-api-java-sdk
1.1.4
commons-httpclient
commons-httpclient
3.1
com.google.guava
guava
29.0-jre
2.相关的配置类
/** * 推特相关配置 */public class TwitterConfig { /** * 客户id和客户私钥 */ public static final String CLIENT_ID = "c3dqY111tjbnFPNDM6MTpjaQ"; public static final String CLIENT_SECRET = "kf1119fmdeXZHpOV-fjv9umx55ZdccCkNONjea"; /** * 应用KYE和私钥 */ public static final String CONSUMER_KEY = "lhyfiD111MffGeHMR"; public static final String CONSUMER_SECRET = "BRNxnV5Lx111jtptduIkcwjB"; /** * 应用的TOKEN */ public static final String ACCESS_TOKEN = "14821111633-A8xyN5111FgkbStu"; public static final String ACCESS_TOKEN_SECRET = "oZaKBphpoo111SZvzoXPAQ";} 3.查询开发者账号的推特信息
public JSONObject getUserInfo(){ //下面需要开发者门户里面的key和私钥,还包括Token和私钥 CommonsHttpOAuthConsumer consumer = new CommonsHttpOAuthConsumer(TwitterConfig.CONSUMER_KEY, TwitterConfig.CONSUMER_SECRET); consumer.setTokenWithSecret(TwitterConfig.ACCESS_TOKEN, TwitterConfig.ACCESS_TOKEN_SECRET); // 创建HttpClient对象 HttpClient httpClient = this.setProxy(); // 创建API请求,例如获取用户的时间线 try { //请求的地址 URIBuilder uriBuilder = new URIBuilder("https://api.twitter.com/2/users/me"); ArrayList queryParameters; queryParameters = new ArrayList(); //我们需要查询用户的那些信息 queryParameters.add(new BasicNameValuePair("user.fields", "id,name,username,profile_image_url,public_metrics")); queryParameters.add(new BasicNameValuePair("expansions", "pinned_tweet_id")); uriBuilder.addParameters(queryParameters); HttpGet request = new HttpGet(uriBuilder.build()); request.setHeader("Content-Type","application/json"); consumer.sign(request); // 创建参数列表 HttpResponse response = httpClient.execute(request); // 处理API响应 int statusCode = response.getStatusLine().getStatusCode(); String responseBody = EntityUtils.toString(response.getEntity()); if (statusCode == 200) { System.out.println(responseBody); return JSONObject.parseObject(responseBody); } else { System.out.println(responseBody); return JSONObject.parseObject(responseBody); } } catch (OAuthMessageSignerException e) { e.printStackTrace(); } catch (OAuthExpectationFailedException e) { e.printStackTrace(); } catch (OAuthCommunicationException e) { e.printStackTrace(); } catch (URISyntaxException e) { e.printStackTrace(); }catch (IOException e) { e.printStackTrace(); } return null; } 4.根据用户Token查询授权用户基本信息
/** * 根据用户token换取用户信息 * @return */ public TwitterUserDto getUserInfoByToken(String token){ StringBuilder result = new StringBuilder(); BufferedReader in = null; try { // Twitter API endpoint String endpoint = "https://api.twitter.com/2/users/me"; // 构造带有参数的 URL String urlWithParams = endpoint + "?user.fields=name,pinned_tweet_id,profile_image_url"; // 创建 URL 对象 URL url = new URL(urlWithParams); URLConnection connection = url.openConnection(); connection.setRequestProperty("Authorization", "Bearer " + token); connection.setRequestProperty("Content-Type","application/json"); connection.connect(); in = new BufferedReader(new InputStreamReader(connection.getInputStream())); String line; while ((line = in.readLine()) != null) { result.append(line); } TwitterUserDto dto = new TwitterUserDto(); JSONObject json = JSONObject.parseObject(result.toString()); JSONObject user = (JSONObject)json.get("data"); if(user != null){ dto.setId(user.get("id").toString()); dto.setName(user.get("name").toString()); dto.setUsername(user.get("username").toString()); } return dto; } catch (Exception e) { e.printStackTrace(); } return null; } @Data@Accessors(chain = true)public class TwitterUserDto { /** * 推特名 @xxxx */ private String username; /** * 推特用户名 */ private String name; /** * 推特用户ID */ private String id;} 5.根据用户名查询用户推特信息
/** * 根据用户名查询用户推特数据 * @return */ public TwitterUserDto getTwitterUserByUserName(String userName){ //推特应用里面的相关私钥和Token CommonsHttpOAuthConsumer consumer = new CommonsHttpOAuthConsumer(TwitterConfig.CONSUMER_KEY, TwitterConfig.CONSUMER_SECRET); consumer.setTokenWithSecret(TwitterConfig.ACCESS_TOKEN, TwitterConfig.ACCESS_TOKEN_SECRET); // 创建HttpClient对象 HttpClient httpClient = this.setProxy(); // 创建API请求,例如获取用户的时间线 try { URIBuilder uriBuilder = new URIBuilder("https://api.twitter.com/2/users/by"); ArrayList queryParameters; queryParameters = new ArrayList(); //需要查询的用户名 多个用户名称用逗号隔开(例如:张三,李四,王五 如果不行用:张三%20李四%20王五) queryParameters.add(new BasicNameValuePair("usernames", userName)); queryParameters.add(new BasicNameValuePair("expansions", "pinned_tweet_id")); uriBuilder.addParameters(queryParameters); HttpGet request = new HttpGet(uriBuilder.build()); request.setHeader("Content-Type","application/json"); consumer.sign(request); // 创建参数列表 HttpResponse response = httpClient.execute(request); // 处理API响应 int statusCode = response.getStatusLine().getStatusCode(); String responseBody = EntityUtils.toString(response.getEntity()); if (statusCode == 200) { TwitterUserDto dto = new TwitterUserDto(); JSONObject json = JSONObject.parseObject(responseBody); JSONArray user = (JSONArray)json.get("data"); if(user != null){ json = (JSONObject)user.get(0); dto.setId(json.get("id").toString()); dto.setName(json.get("name").toString()); dto.setUsername(json.get("username").toString()); } return dto; } else { return null; } } catch (OAuthMessageSignerException e) { e.printStackTrace(); } catch (OAuthExpectationFailedException e) { e.printStackTrace(); } catch (OAuthCommunicationException e) { e.printStackTrace(); } catch (URISyntaxException e) { e.printStackTrace(); }catch (IOException e) { e.printStackTrace(); } return null; } /** * 设置请求代理 * @param * @return */ private HttpClient setProxy(){ // 创建HttpClientBuilder对象 HttpClientBuilder httpClientBuilder = HttpClientBuilder.create(); HttpClient client = httpClientBuilder.build();; return client; }
注意事项:如果推特报401的话请检查Token是否过期,如果报400的话需要好好检查一下参数问题,它不会给你特别明显错误的提示,细节问题只能自己注意一下了。
上一篇:电脑服务器数量在哪里?