x-api-rs 0.0.5

X/Twitter API in Rust
Documentation
use crate::BEARER_TOKEN;
use eyre::{Context, Result};
use log::debug;
use serde_json::{json, Value};
use super::TwAPI;

const SEARCH_URL: &str = "https://twitter.com/i/api/graphql/k3027HdkVqbuDPpdoniLKA/Viewer";

impl TwAPI {
    pub async fn me(&self) -> Result<Value> {

        let variables = json!(
            {"withCommunitiesMemberships": true,
                     "withSubscribedTab": true, "withCommunitiesCreation": true}
        );

        let features = json!({"responsive_web_graphql_exclude_directive_enabled": true, "verified_phone_label_enabled": true,
        "responsive_web_graphql_skip_user_profile_image_extensions_enabled": false,
        "responsive_web_graphql_timeline_navigation_enabled": true, "user_data_features": true});

        let q = [
            ("variables", variables.to_string()),
            ("features", features.to_string()),
        ];
        let req = self
            .client
            .get(SEARCH_URL)
            .header("Authorization", format!("Bearer {}", BEARER_TOKEN))
            .header("X-CSRF-Token", self.csrf_token.to_owned())
            .query(&q)
            .build()
            ?;
        let text = self.client.execute(req).await?.text().await?;
        let res: Value = serde_json::from_str(&text).context("can't convert response to json")?;
        debug!("me res {res}");
        return Ok(res);
    }

    pub fn me_following(&mut self) {

    }

    pub async fn me_rest_id(&mut self) -> Result<i64, Box<dyn std::error::Error>> {
        let me = self.me().await?;
        let res_id = me
            .get("data").ok_or("data")?
            .get("viewer").ok_or("viewer")?
            .get("user_results").ok_or("viewer")?
            .get("result").ok_or("viewer")?
            .get("rest_id").ok_or("rest id")?.as_str().ok_or("str error")?.parse::<i64>()?;
        Ok(res_id)
        
    }
}