reverse_engineered_twitter_api/
lib.rs

1pub 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        // let result = search(&mut api).await;
62        // assert!(result.is_ok());
63
64        // let res = search_tweets(&mut api).await;
65        // assert!(res.is_ok());
66
67        // let (tweets, _) = res.unwrap();
68        // assert!(tweets.len() == 0);
69    }
70}