This is the multi-page printable view of this section.
Click here to print.
Return to the regular view of this page.
Leetcode downloader
LeetCode submission export and documentation tools
This project exports LeetCode submissions and generates documentation from
submission files using a CLI and Bazel rules. A Tampermonkey script provides
a browser-based download path; direct CLI downloads are currently blocked by
LeetCode bot protection.
Links
Features
- CLI and bzl code to generate submission docs
- Tampermonkey script to download submissions
- CLI to download submissions (Doesn’t work because of bot protection)
Usage
Generate submission from a submission file
bazel run //projects/leetcode_downloader -- \
--submissions-file "${PWD}/out/submissions.json" \
--root-dir "${PWD}" \
generate
Help
Usage of flags:
-base_url string
(default "https://leetcode.com")
-cookie string
-limit uint
(default 20)
-offset uint
-root-dir string
(default "${PWD}")
-submissions-file string
1.1 - al_leetcode_submissions
al_leetcode_submissions
load("@com_alwaldend_src//projects/leetcode_downloader/main/bzl:al_leetcode_submissions.bzl", "al_leetcode_submissions")
al_leetcode_submissions(name, srcs, visibility, **kwargs)
Generate leetcode submission targets
PARAMETERS
| Name |
Description |
Default Value |
| name |
generated md archive name |
none |
| srcs |
leetcode submission configs |
none |
| visibility |
visibility |
None |
| kwargs |
kwargs for template_files |
none |
2.1 - contracts
Proto docs for contracts.proto
Java
load("@rules_java//java:defs.bzl", "java_library")
java_library(
name = "name",
deps = [
"@com_alwaldend_src//projects/leetcode_downloader/main/proto/contracts:contracts_java_library",
],
)
Golang
load("@rules_go//go:def.bzl", "go_library")
go_library(
name = "name",
deps = [
"@com_alwaldend_src//projects/leetcode_downloader/main/proto/contracts:contracts",
],
)
Proto
syntax = "proto3";
option go_package = "git.alwaldend.com/alwaldend/src/projects/leetcode_downloader/main/proto/contracts";
enum CliAction {
DOWNLOAD = 0;
GENERATE = 1;
UPDATE = 2;
}
message Config {
string base_url = 1;
string cookie = 2;
repeated string action_args = 4;
CliAction action = 5;
uint64 offset = 6;
uint64 limit = 7;
map<string, SubmissionConfig> submissions = 8;
string root_dir = 9;
map<string, string> headers = 11;
string submissions_file = 12;
bool write_code = 13;
}
message SubmissionConfig {
string dir = 1;
string extension = 2;
repeated string types = 3;
}
message Submission {
uint64 id = 1;
string status_display = 2;
string lang = 3;
uint64 question_id = 4;
string title_slug = 5;
string code = 6;
string title = 7;
string url = 8;
string lang_name = 9;
// string time = 10;
uint64 timestamp = 11;
uint64 status = 12;
string runtime = 13;
string is_pending = 14;
string memory = 15;
string compare_result = 16;
bool has_notes = 17;
uint64 flag_type = 18;
}
message SubmissonsResponse {
repeated Submission submissions_dump = 1;
bool has_next = 2;
string last_key = 3;
}
message SubmissonsStorage {
repeated Submission submissions = 1;
}