Scraper

Struct Scraper 

Source
pub struct Scraper {
    pub twitter_client: TwitterClient,
}

Fields§

§twitter_client: TwitterClient

Implementations§

Source§

impl Scraper

Source

pub async fn new() -> Result<Self>

Examples found in repository?
examples/get_home_timeline.rs (line 8)
6async fn main() -> Result<()> {
7    dotenv().ok();
8    let mut scraper = Scraper::new().await?;
9    let cookie_string = std::env::var("TWITTER_COOKIE_STRING")
10        .expect("TWITTER_COOKIE_STRING environment variable not set");
11    scraper.set_from_cookie_string(&cookie_string).await?;
12    let home_timeline = scraper.get_home_timeline(20, vec![]).await?;
13    println!("Home timeline: {:?}", home_timeline);
14    Ok(())
15}
More examples
Hide additional examples
examples/get_message.rs (line 7)
5async fn main() -> Result<()> {
6    dotenv().ok();
7    let mut scraper = Scraper::new().await?;
8    let cookie_string = std::env::var("TWITTER_COOKIE_STRING")
9        .expect("TWITTER_COOKIE_STRING environment variable not set");
10    let username = std::env::var("TWITTER_USERNAME")
11        .expect("TWITTER_USERNAME environment variable not set");
12    scraper.set_from_cookie_string(&cookie_string).await?;
13    let dm_history = scraper.get_direct_message_conversations(&username, None).await?;
14    println!("Direct message conversations: {:?}", dm_history);
15    Ok(())
16}
examples/send_dm.rs (line 8)
6async fn main() -> Result<()> {
7    dotenv().ok();
8    let mut scraper = Scraper::new().await?;
9    let cookie_string = std::env::var("TWITTER_COOKIE_STRING")
10        .expect("TWITTER_COOKIE_STRING environment variable not set");
11    scraper.set_from_cookie_string(&cookie_string).await?;
12    let username = std::env::var("TWITTER_USERNAME")
13        .expect("TWITTER_USERNAME environment variable not set");
14    let dm_history = scraper.get_direct_message_conversations(&username, None).await?;
15    
16    let user_id = dm_history.user_id.as_str();
17    
18    for conversation in dm_history.conversations {
19        if let Some(last_message) = conversation.messages.last() {
20            let sender_id = last_message.sender_id.as_str();
21            // Only reply if the last message was not from us
22            if sender_id != user_id {
23                let conversation_id = conversation.conversation_id.as_str();
24                let text = last_message.text.as_str();
25                println!("conversation_id: {}", conversation_id);
26                println!("text: {}", text);
27                scraper.send_direct_message(conversation_id, "2").await?;
28            }
29        }
30    }
31    
32    Ok(())
33}
Source

pub async fn login( &mut self, username: String, password: String, email: Option<String>, two_factor_secret: Option<String>, ) -> Result<()>

Source

pub async fn get_profile(&self, username: &str) -> Result<Profile>

Source

pub async fn send_tweet( &self, text: &str, reply_to: Option<&str>, media_data: Option<Vec<(Vec<u8>, String)>>, ) -> Result<Value>

Source

pub async fn get_home_timeline( &self, count: i32, seen_tweet_ids: Vec<String>, ) -> Result<Vec<Value>>

Examples found in repository?
examples/get_home_timeline.rs (line 12)
6async fn main() -> Result<()> {
7    dotenv().ok();
8    let mut scraper = Scraper::new().await?;
9    let cookie_string = std::env::var("TWITTER_COOKIE_STRING")
10        .expect("TWITTER_COOKIE_STRING environment variable not set");
11    scraper.set_from_cookie_string(&cookie_string).await?;
12    let home_timeline = scraper.get_home_timeline(20, vec![]).await?;
13    println!("Home timeline: {:?}", home_timeline);
14    Ok(())
15}
Source

pub async fn save_cookies(&self, cookie_file: &str) -> Result<()>

Source

pub async fn set_cookies(&mut self, json_str: &str) -> Result<()>

Examples found in repository?
examples/get_home_timeline.rs (line 11)
6async fn main() -> Result<()> {
7    dotenv().ok();
8    let mut scraper = Scraper::new().await?;
9    let cookie_string = std::env::var("TWITTER_COOKIE_STRING")
10        .expect("TWITTER_COOKIE_STRING environment variable not set");
11    scraper.set_from_cookie_string(&cookie_string).await?;
12    let home_timeline = scraper.get_home_timeline(20, vec![]).await?;
13    println!("Home timeline: {:?}", home_timeline);
14    Ok(())
15}
More examples
Hide additional examples
examples/get_message.rs (line 12)
5async fn main() -> Result<()> {
6    dotenv().ok();
7    let mut scraper = Scraper::new().await?;
8    let cookie_string = std::env::var("TWITTER_COOKIE_STRING")
9        .expect("TWITTER_COOKIE_STRING environment variable not set");
10    let username = std::env::var("TWITTER_USERNAME")
11        .expect("TWITTER_USERNAME environment variable not set");
12    scraper.set_from_cookie_string(&cookie_string).await?;
13    let dm_history = scraper.get_direct_message_conversations(&username, None).await?;
14    println!("Direct message conversations: {:?}", dm_history);
15    Ok(())
16}
examples/send_dm.rs (line 11)
6async fn main() -> Result<()> {
7    dotenv().ok();
8    let mut scraper = Scraper::new().await?;
9    let cookie_string = std::env::var("TWITTER_COOKIE_STRING")
10        .expect("TWITTER_COOKIE_STRING environment variable not set");
11    scraper.set_from_cookie_string(&cookie_string).await?;
12    let username = std::env::var("TWITTER_USERNAME")
13        .expect("TWITTER_USERNAME environment variable not set");
14    let dm_history = scraper.get_direct_message_conversations(&username, None).await?;
15    
16    let user_id = dm_history.user_id.as_str();
17    
18    for conversation in dm_history.conversations {
19        if let Some(last_message) = conversation.messages.last() {
20            let sender_id = last_message.sender_id.as_str();
21            // Only reply if the last message was not from us
22            if sender_id != user_id {
23                let conversation_id = conversation.conversation_id.as_str();
24                let text = last_message.text.as_str();
25                println!("conversation_id: {}", conversation_id);
26                println!("text: {}", text);
27                scraper.send_direct_message(conversation_id, "2").await?;
28            }
29        }
30    }
31    
32    Ok(())
33}
Source

pub async fn get_followers( &self, user_id: &str, count: i32, cursor: Option<String>, ) -> Result<(Vec<Profile>, Option<String>)>

Source

pub async fn get_following( &self, user_id: &str, count: i32, cursor: Option<String>, ) -> Result<(Vec<Profile>, Option<String>)>

Source

pub async fn follow_user(&self, username: &str) -> Result<()>

Source

pub async fn unfollow_user(&self, username: &str) -> Result<()>

Source

pub async fn send_quote_tweet( &self, text: &str, quoted_tweet_id: &str, media_data: Option<Vec<(Vec<u8>, String)>>, ) -> Result<Value>

Source

pub async fn fetch_tweets_and_replies( &self, username: &str, max_tweets: i32, cursor: Option<&str>, ) -> Result<V2QueryTweetsResponse>

Source

pub async fn fetch_tweets_and_replies_by_user_id( &self, user_id: &str, max_tweets: i32, cursor: Option<&str>, ) -> Result<V2QueryTweetsResponse>

Source

pub async fn fetch_list_tweets( &self, list_id: &str, max_tweets: i32, cursor: Option<&str>, ) -> Result<Value>

Source

pub async fn like_tweet(&self, tweet_id: &str) -> Result<Value>

Source

pub async fn retweet(&self, tweet_id: &str) -> Result<Value>

Source

pub async fn create_long_tweet( &self, text: &str, reply_to: Option<&str>, media_ids: Option<Vec<String>>, ) -> Result<Value>

Source

pub async fn get_tweet(&self, id: &str) -> Result<Tweet>

Source

pub async fn search_tweets( &self, query: &str, max_tweets: i32, search_mode: SearchMode, cursor: Option<String>, ) -> Result<QueryTweetsResponse>

Source

pub async fn search_profiles( &self, query: &str, max_profiles: i32, cursor: Option<String>, ) -> Result<QueryProfilesResponse>

Source

pub async fn get_user_tweets( &self, user_id: &str, count: i32, cursor: Option<String>, ) -> Result<V2QueryTweetsResponse>

Source

pub async fn get_direct_message_conversations( &self, screen_name: &str, cursor: Option<&str>, ) -> Result<DirectMessagesResponse>

Examples found in repository?
examples/get_message.rs (line 13)
5async fn main() -> Result<()> {
6    dotenv().ok();
7    let mut scraper = Scraper::new().await?;
8    let cookie_string = std::env::var("TWITTER_COOKIE_STRING")
9        .expect("TWITTER_COOKIE_STRING environment variable not set");
10    let username = std::env::var("TWITTER_USERNAME")
11        .expect("TWITTER_USERNAME environment variable not set");
12    scraper.set_from_cookie_string(&cookie_string).await?;
13    let dm_history = scraper.get_direct_message_conversations(&username, None).await?;
14    println!("Direct message conversations: {:?}", dm_history);
15    Ok(())
16}
More examples
Hide additional examples
examples/send_dm.rs (line 14)
6async fn main() -> Result<()> {
7    dotenv().ok();
8    let mut scraper = Scraper::new().await?;
9    let cookie_string = std::env::var("TWITTER_COOKIE_STRING")
10        .expect("TWITTER_COOKIE_STRING environment variable not set");
11    scraper.set_from_cookie_string(&cookie_string).await?;
12    let username = std::env::var("TWITTER_USERNAME")
13        .expect("TWITTER_USERNAME environment variable not set");
14    let dm_history = scraper.get_direct_message_conversations(&username, None).await?;
15    
16    let user_id = dm_history.user_id.as_str();
17    
18    for conversation in dm_history.conversations {
19        if let Some(last_message) = conversation.messages.last() {
20            let sender_id = last_message.sender_id.as_str();
21            // Only reply if the last message was not from us
22            if sender_id != user_id {
23                let conversation_id = conversation.conversation_id.as_str();
24                let text = last_message.text.as_str();
25                println!("conversation_id: {}", conversation_id);
26                println!("text: {}", text);
27                scraper.send_direct_message(conversation_id, "2").await?;
28            }
29        }
30    }
31    
32    Ok(())
33}
Source

pub async fn send_direct_message( &self, conversation_id: &str, text: &str, ) -> Result<Value>

Examples found in repository?
examples/send_dm.rs (line 27)
6async fn main() -> Result<()> {
7    dotenv().ok();
8    let mut scraper = Scraper::new().await?;
9    let cookie_string = std::env::var("TWITTER_COOKIE_STRING")
10        .expect("TWITTER_COOKIE_STRING environment variable not set");
11    scraper.set_from_cookie_string(&cookie_string).await?;
12    let username = std::env::var("TWITTER_USERNAME")
13        .expect("TWITTER_USERNAME environment variable not set");
14    let dm_history = scraper.get_direct_message_conversations(&username, None).await?;
15    
16    let user_id = dm_history.user_id.as_str();
17    
18    for conversation in dm_history.conversations {
19        if let Some(last_message) = conversation.messages.last() {
20            let sender_id = last_message.sender_id.as_str();
21            // Only reply if the last message was not from us
22            if sender_id != user_id {
23                let conversation_id = conversation.conversation_id.as_str();
24                let text = last_message.text.as_str();
25                println!("conversation_id: {}", conversation_id);
26                println!("text: {}", text);
27                scraper.send_direct_message(conversation_id, "2").await?;
28            }
29        }
30    }
31    
32    Ok(())
33}

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> ErasedDestructor for T
where T: 'static,