From 5ead7eaedaac45c471f167e9ad92b80582779519 Mon Sep 17 00:00:00 2001 From: toasted Date: Sun, 22 Mar 2026 08:17:25 +0000 Subject: [PATCH] upload files --- .gitignore | 196 ++++++++++++++++++++++++++++++++++++++++++++++++++ bun.lockb | Bin 0 -> 23087 bytes cookies.json | 4 ++ example.env | 10 +++ get_tweets.py | 89 +++++++++++++++++++++++ 5 files changed, 299 insertions(+) create mode 100644 .gitignore create mode 100644 bun.lockb create mode 100644 cookies.json create mode 100644 example.env create mode 100644 get_tweets.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ccfd90c --- /dev/null +++ b/.gitignore @@ -0,0 +1,196 @@ +# Based on https://raw.githubusercontent.com/github/gitignore/main/Node.gitignore + +# Environment variables and secrets +.env +.env.local +.env.*.local +cookies.json + +# Data and posts tracking +posts.json + +# Temporary video processing files +temp/ +*.mp4 +*.webm +*.mov +*.mpeg + +# Python cache +__pycache__/ +*.py[cod] +*$py.class +*.so + +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* +.pnpm-debug.log* + +# Caches + +.cache + +# Diagnostic reports (https://nodejs.org/api/report.html) + +report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json + +# Runtime data + +pids +_.pid +_.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover + +lib-cov + +# Coverage directory used by tools like istanbul + +coverage +*.lcov + +# nyc test coverage + +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) + +.grunt + +# Bower dependency directory (https://bower.io/) + +bower_components + +# node-waf configuration + +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) + +build/Release + +# Dependency directories + +node_modules/ +jspm_packages/ + +# Snowpack dependency directory (https://snowpack.dev/) + +web_modules/ + +# TypeScript cache + +*.tsbuildinfo + +# Optional npm cache directory + +.npm + +# Optional eslint cache + +.eslintcache + +# Optional stylelint cache + +.stylelintcache + +# Microbundle cache + +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history + +.node_repl_history + +# Output of 'npm pack' + +*.tgz + +# Yarn Integrity file + +.yarn-integrity + +# dotenv environment variable files + +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# parcel-bundler cache (https://parceljs.org/) + +.parcel-cache + +# Next.js build output + +.next +out + +# Nuxt.js build / generate output + +.nuxt +dist + +# Gatsby files + +# Comment in the public line in if your project uses Gatsby and not Next.js + +# https://nextjs.org/blog/next-9-1#public-directory-support + +# public + +# vuepress build output + +.vuepress/dist + +# vuepress v2.x temp and cache directory + +.temp + +# Docusaurus cache and generated files + +.docusaurus + +# Serverless directories + +.serverless/ + +# FuseBox cache + +.fusebox/ + +# DynamoDB Local files + +.dynamodb/ + +# TernJS port file + +.tern-port + +# Stores VSCode versions used for testing VSCode extensions + +.vscode-test + +# yarn v2 + +.yarn/cache +.yarn/unplugged +.yarn/build-state.yml +.yarn/install-state.gz +.pnp.* + +# IntelliJ based IDEs +.idea + +# Finder (MacOS) folder config +.DS_Store diff --git a/bun.lockb b/bun.lockb new file mode 100644 index 0000000000000000000000000000000000000000..86913f54a6f5324ab65b8e8ee7c1cc1157d4d952 GIT binary patch literal 23087 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 kx=Vc-zz7zys5294w 1 else None + count = int(sys.argv[2]) if len(sys.argv) > 2 else 10 + + if not username: + print(json.dumps({"error": "Username required"})) + sys.exit(1) + + asyncio.run(get_user_tweets(username, count))