Skip to content

1101-1/Leetcode-Rust-API

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

44 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

LeetCode API Rust Library

This Rust library provides a convenient way to interact with the LeetCode API, allowing you to programmatically access LeetCode problems, submit solutions, and retrieve submission results.

Features

  • Retrieve a list of LeetCode problems.
  • Fetch problem details, including the problem description, constraints, and examples.
  • Submit solutions to LeetCode problems.
  • Check submission results, including status, runtime, and memory usage.

Installation

Add the following line to your Cargo.toml file:

[dependencies]
leetcoderustapi = "1.0.8"

Usage

Authentication

To use the LeetCode API, you need to obtain an authentication token. Follow the instructions provided by LeetCode to obtain your token.

Example: Action with problems

use leetcoderustapi::{problem_build::{Tags, Category, Difficulty, Status}, UserApi, ProgrammingLanguage,};

#[tokio::main]
async fn main() {
    // Set cookie from leetcode
    let token = std::env::var("COOKIE").expect("cookie doesn't set");

    // Create a new LeetCode client
    let api = UserApi::new(&token).await.unwrap();

    // Show found problems by keyword and show 5 notes
    let show_problems = api.show_problm_list("sum", 5).await.unwrap();

    // Find problems by properties with creating problem builder
    let problems_builder = api
        .problem_builder()
        .set_category(Category::Algorithms)
        .set_difficulty(Difficulty::Easy)
        .set_keyword("sum")
        //max show notes limit is 2763; default is 5
        .set_note_limit(3)
        .set_status(Status::Solved)
        //max tags over 50+
        .set_tags(vec![
            Tags::Array,
            Tags::BinarySearch,
        ])
        .build()
        .await
        .unwrap();

    // Fetch the full data for a specific problem by it's name
    let problem_info = api.set_problem("two sum").await.unwrap();

    // Fetch the full data for a specific problem by it's ID
    let problem_info = api.set_problem_by_id(1).await.unwrap();

    // Retrieve previous submissions to this problem
    let my_submissions = problem_info.my_submissions().await.unwrap();

    // Retrieve code snippets
    let code_snippets = problem_info.code_snippets().unwrap();

    // Retrieve solution info
    let solution_info = problem_info.solution_info().unwrap();

    // Retrieve related topics
    let related_topics = problem_info.related_topics();

    // Retrieve similar questions
    let similar_questions = problem_info.similar_questions().unwrap();

    // Retrieve stats
    let stats = problem_info.stats().unwrap();

    // Retrieve hints
    let hints = problem_info.hints();

    // Retrieve description
    let description = problem_info.description().unwrap();

    // Retrieve difficulty
    let difficulty = problem_info.difficulty();

    // Retrieve likes and dislikes
    let likes = problem_info.rating().unwrap();

    // Retrieve category
    let category = problem_info.category();

    // We also can send submissions and tests
    // Need to specify a lang and provided code
    let subm_response = problem_info
        .send_subm(ProgrammingLanguage::Rust, "impl Solution { fn two_sum() {}}")
        .await
        .unwrap();
    let test_response = problem_info
        .send_test(ProgrammingLanguage::Rust, "impl Solution { fn two_sum() {}}")
        .await
        .unwrap();
}

Example: Actions with Self profile

#[tokio::main]
async fn main() {
    // Set cookie from leetcode
    let token = std::env::var("COOKIE").expect("cookie doesn't set");

    // Create a new LeetCode client
    let api = UserApi::new(&token).await.unwrap();

    // Create interaction with profile
    let user_profile = api.my_profile().await.unwrap();

    // Create empty list of the problems with provided name
    user_profile
        .create_list("my_new_favorite_list")
        .await
        .unwrap();

    // Rename list
    user_profile
        .rename_list("my_new_favorite_list", "hard_problems")
        .await
        .unwrap();

    // Set list puplic
    user_profile.set_public("hard_problems").await.unwrap();

    // Set list private
    user_profile.set_private("hard_problems").await.unwrap();

    // Get link to the list if it is a public
    let share_list_url = user_profile.get_share_url("hard_problems").await.unwrap();

    // Show existing lists
    let lists = user_profile.show_lists();

    // Delete list with provided name
    user_profile
        .delete_list("hard_problems")
        .await
        .unwrap();

    // Show users last 10 notification
    let notifications = user_profile.get_notifications().await.unwrap();

    // Deactivate token(logout)
    user_profile.deactivate_token().await.unwrap();
}

Example: Actions with Public user profile

#[tokio::main]
async fn main() {
    // Set cookie from leetcode
    let token = std::env::var("COOKIE").expect("cookie doesn't set");

    // Create a new LeetCode client
    let api = UserApi::new(&token).await.unwrap();

    // Find public user
    let user = api
        .find_profile("1101-1")
        .await;

    // Check public user common stats
    let user_stats = user.
        user_stats()
        .await
        .unwrap();

    // Check what langs used user
    let lang_stats = user
        .language_stats()
        .await
        .unwrap();
    
    // Check what problems (by tags) solve user
    let skill_stats = user
        .skill_stats()
        .await
        .unwrap();

    // Show rating by beating problems
    let beat_stats = ser
        .problem_beat_stats()
        .await
        .unwrap();

     // Show recent submissons of user
    let beat_stats = ser
        .recent_subm_list()
        .await
        .unwrap();
}

Important

Replace "COOKIE" with your actual LeetCode authentication cookie.

For example format in .env file:

COOKIE="csrftoken=gN3mmFEKoBFHLZuiHEvZYupqirq7brDmi845GhUK8xBa9u3SUVkgTPFTPsLFuAzR; _ga_CDRWKZTDEX=GS1.1.1688568040.1.1.1688568081.19.0.0; _ga=GA1.1.2048740381.1688568040; _dd_s=rum=0&expire=1688568980299; NEW_PROBLEMLIST_PAGE=1"

License

This library is licensed under the MIT License.

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy