reverse_engineered_twitter_api/
lib.rs1pub mod auth;
2pub mod relation;
3pub mod search;
4pub mod types;
5pub mod types_resp;
6use reqwest::Client;
7
8pub const LOGIN_URL: &str = "https://api.twitter.com/1.1/onboarding/task.json";
9pub const LOGOUR_URL: &str = "https://api.twitter.com/1.1/account/logout.json";
10pub const GUEST_ACTIVE_URL: &str = "https://api.twitter.com/1.1/guest/activate.json";
11pub const VERIFY_CREDENTIALS_URL: &str =
12 "https://api.twitter.com/1.1/account/verify_credentials.json";
13pub const OAUTH_URL: &str = "https://api.twitter.com/oauth2/token";
14pub const BEARER_TOKEN: &str = "AAAAAAAAAAAAAAAAAAAAANRILgAAAAAAnNwIzUejRCOuH5E6I8xnZz4puTs%3D1Zv7ttfk8LF81IUq16cHjhLTvJu4FA33AGWWjCpTnA";
15pub const APP_CONSUMER_KEY: &str = "3nVuSoBZnx6U4vzUxf5w";
16pub const APP_CONSUMER_SECRET: &str = "Bcs59EFbbsdF6Sl9Ng71smgStWEGwXXKSjYvPVt7qys";
17
18pub struct ReAPI {
19 client: Client,
20 guest_token: String,
21 csrf_token: String,
22}
23
24#[cfg(test)]
25mod tests {
26 use super::{
27 types::{Data, Tweet},
28 *,
29 };
30
31 async fn login(api: &mut ReAPI) -> Result<String, String> {
32 dotenv::dotenv().ok();
33 let name = std::env::var("TWITTER_USER_NAME").unwrap();
34 let pwd = std::env::var("TWITTER_USER_PASSWORD").unwrap();
35 api.login(&name, &pwd, "").await
36 }
37
38 async fn search(api: &mut ReAPI) -> Result<Data, reqwest::Error> {
39 let content = "@shareverse_bot";
40 let limit = 50;
41 let cursor = "";
42 api.search(content, limit, cursor).await
43 }
44
45 async fn search_tweets(api: &mut ReAPI) -> Result<(Vec<Tweet>, String), reqwest::Error> {
46 let content = "@shareverse_bot";
47 let limit = 50;
48 let cursor = "";
49 api.search_tweets(content, limit, cursor).await
50 }
51
52 #[tokio::test]
53 async fn test() {
54 let mut api = ReAPI::new();
55 let loggined = login(&mut api).await;
56 assert!(loggined.is_ok());
57
58 let is_logged_in = api.is_logged_in().await;
59 assert!(is_logged_in);
60
61 }
70}