java代码调用twitter-api用例实战

一、申请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,你可以引用官方提供的包。

<dependency>
		<groupId>com.twitter</groupId>
		<artifactId>twitter-api-java-sdk</artifactId>
		<version>1.1.4</version>
	</dependency>

但是我没有用到这个包,我引用进来发现包内部出现错误,虽然能编译但是错误提示很难受。
在这里插入图片描述
有大神知道这个问题怎么解决可以评论告诉我。
在不引用官方提供的SDK的情况下,需要引用到其他鉴权的包。

1.引用鉴权的SDK包。

在pom.xml里配置

	<dependency>
		<groupId>oauth.signpost</groupId>
		<artifactId>signpost-core</artifactId>
		<version>1.2.1.2</version>
	</dependency>
	
	<dependency>
		<groupId>oauth.signpost</groupId>
		<artifactId>signpost-commonshttp4</artifactId>
		<version>1.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");
            ArrayList<NameValuePair> 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);
            // 创建参数列表
//            List<NameValuePair> 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 (null==active ||"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 accessToken="1517001992861716480-xVY7MpIqQrH1XeFv5l6rOLxxxxxx";
	   String accessSecret="A52yWlrFd1MDIrYU0IcnmlnmimMOw0UXRJNxxxxxxx";
	   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则不起作用。

  • 18
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
好的,针对图书馆管理系统,我们可以编写以下测试用: 1. 用户登录功能测试用: - 输入正确的用户名和密码,登录成功 - 输入不存在的用户名和密码,提示错误信息 - 输入正确的用户名但错误的密码,提示错误信息 2. 图书查询功能测试用: - 按书名查询,查询结果正确 - 按作者查询,查询结果正确 - 按出版社查询,查询结果正确 - 输入不存在的关键字查询,提示查询结果为空 3. 图书借阅功能测试用: - 图书可借阅,借阅成功 - 图书不可借阅,借阅失败 - 借阅同一本书超过规定的借阅天数,产生逾期罚款 - 逾期罚款产生后,不能再借阅其他书籍 4. 图书归还功能测试用: - 图书已借出,归还成功 - 图书未借出,归还失败 - 归还同一本书超过规定的归还天数,产生逾期罚款 - 逾期罚款产生后,不能再借阅其他书籍 5. 用户信息管理测试用: - 用户信息正确修改成功 - 用户信息删除成功 - 用户信息添加成功 6. 图书信息管理测试用: - 图书信息正确修改成功 - 图书信息删除成功 - 图书信息添加成功 7. 系统安全性测试用: - 输入非法字符,系统能够正确响应并提示错误信息 - 输入SQL注入代码,系统能够正确拦截并提示错误信息 - 输入恶意脚本,系统能够正确拦截并提示错误信息 以上是一些基本的测试用,具体测试用的编写还需要根据实际情况进行补充。同时,我们需要注意对测试用的覆盖率,尽可能覆盖到系统的所有功能和场景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值