网站建设湖北,黄页网页的推广网站,服装网上商城网站建设报告,网站建设未来发展一、申请twitter开发者账号
首先先申请twitter开发者免费的API#xff0c;要填写申请的内容#xff0c;放心大胆地写#xff0c;申请完#xff0c;会提供免费的API接口。 以下是我申请到的三个免费API 申请完开始进行测试调用。 读官方文档账户认证那块#xff1a;https…一、申请twitter开发者账号
首先先申请twitter开发者免费的API要填写申请的内容放心大胆地写申请完会提供免费的API接口。 以下是我申请到的三个免费API 申请完开始进行测试调用。 读官方文档账户认证那块https://developer.twitter.com/en/docs/authentication/overview 四种鉴权方式读的我很懵逼不知道如何去测试我的接口。 研究了很久才了解清楚正确的请求方式。
二、postman测试接口
以下是用postman请求示例
1.先确定你开发者账户允许的请求方式
网页进行了自动翻译
2.查看自己的consumer key和 consumer secret、access token和token secret 3.在postman里进行配置把对应的key和密钥填到指定的内容里。 4.填写请求地址和请求参数进行Get请求。 postman请求完成开始进行java代码编写。
三、java代码编写
官方提供了sdk,你可以引用官方提供的包。
dependencygroupIdcom.twitter/groupIdartifactIdtwitter-api-java-sdk/artifactIdversion1.1.4/version/dependency但是我没有用到这个包我引用进来发现包内部出现错误虽然能编译但是错误提示很难受。 有大神知道这个问题怎么解决可以评论告诉我。 在不引用官方提供的SDK的情况下需要引用到其他鉴权的包。
1.引用鉴权的SDK包。
在pom.xml里配置 dependencygroupIdoauth.signpost/groupIdartifactIdsignpost-core/artifactIdversion1.2.1.2/version/dependencydependencygroupIdoauth.signpost/groupIdartifactIdsignpost-commonshttp4/artifactIdversion1.2.1.2/version/dependency配置完成开始写测试代码。
2. 编写测试代码 public static JSONObject getUserInfo(String token,String token_secret, String active){CommonsHttpOAuthConsumer consumer new CommonsHttpOAuthConsumer(consumerKey, consumerSecret);consumer.setTokenWithSecret(token, token_secret);// 创建HttpClient对象HttpClient httpClient setProxy(active);// 创建API请求例如获取用户的时间线try {URIBuilder uriBuilder new URIBuilder(https://api.twitter.com/2/users/me);ArrayListNameValuePair 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);// 创建参数列表
// ListNameValuePair bodypara new ArrayList();
// bodypara.add(new BasicNameValuePair(oauth_verifier, verifier));// 将参数转换为UrlEncodedFormEntity
// StringEntity entity new UrlEncodedFormEntity(bodypara,StandardCharsets.UTF_8);
// // 设置HttpPost的实体
// request.setEntity(entity);// 发起API请求HttpResponse response httpClient.execute(request);// 处理API响应int statusCode response.getStatusLine().getStatusCode();String responseBody EntityUtils.toString(response.getEntity());if (statusCode 200) {System.out.println(API调用成功);System.out.println(响应内容);System.out.println(responseBody);return JSONObject.parseObject(responseBody);} else {System.out.println(API调用失败状态码 statusCode);System.out.println(错误信息);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;}/*** 设置请求代理* param active* return*/private static HttpClient setProxy(String active){HttpClient client null;// 创建HttpClientBuilder对象HttpClientBuilder httpClientBuilder HttpClientBuilder.create();if (nullactive ||dev.equals(active)){// 设置代理主机和端口HttpHost proxy new HttpHost(127.0.0.1, 1080); // 替换为您的代理主机和端口httpClientBuilder.setProxy(proxy);client httpClientBuilder.build();}if (prod.equals(active)||test.equals(active)){client httpClientBuilder.build();;}return client;}进行接口测试测试成功。 public static void main(String[] args) {String accessToken1517001992861716480-xVY7MpIqQrH1XeFv5l6rOLxxxxxx;String accessSecretA52yWlrFd1MDIrYU0IcnmlnmimMOw0UXRJNxxxxxxx;JSONObject jsonObject getUserInfo(accessToken,accessSecret,dev);System.out.println(jsonObject);}接口参数解析
在测试的接口https://api.twitter.com/2/users/me 中没有必传的参数但是有些选项参数。 user.fields、expansions、tweet.fields三个。 在xx.fields参数传值时是要你指定返回集合List里含有哪些返回字段。 比如在user.fields里传值id,name,username,profile_image_url,public_metrics这五个字段分别代表用户的ID、用户昵称、用户名、头像Url、和公开的信息数。 而expansions值默认都是传pinned_tweet_id。显示扩展的twitterID。 设置这个值之后可以设置tweet.fields字段值。 如果不设置expansions的值设置tweet.fields则不起作用。