{"id":27334901,"url":"https://github.com/dmuth/nodejs-twitter-tools","last_synced_at":"2025-06-13T05:04:06.513Z","repository":{"id":12978539,"uuid":"15657224","full_name":"dmuth/nodejs-twitter-tools","owner":"dmuth","description":"This app can be used to follow people back on the command line","archived":false,"fork":false,"pushed_at":"2020-09-03T22:22:04.000Z","size":28,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-06-13T05:02:59.338Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dmuth.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2014-01-05T19:25:17.000Z","updated_at":"2015-03-09T23:39:13.000Z","dependencies_parsed_at":"2022-09-17T14:12:07.323Z","dependency_job_id":null,"html_url":"https://github.com/dmuth/nodejs-twitter-tools","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/dmuth/nodejs-twitter-tools","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dmuth%2Fnodejs-twitter-tools","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dmuth%2Fnodejs-twitter-tools/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dmuth%2Fnodejs-twitter-tools/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dmuth%2Fnodejs-twitter-tools/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dmuth","download_url":"https://codeload.github.com/dmuth/nodejs-twitter-tools/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dmuth%2Fnodejs-twitter-tools/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259584751,"owners_count":22880194,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-04-12T14:46:36.105Z","updated_at":"2025-06-13T05:04:06.435Z","avatar_url":"https://github.com/dmuth.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"## Node.js Twitter Tools\n\nI manage [the Twitter account](http://twitter.com/Anthrocon) for [Anthrocon](http://www.anthrocon.org/).\nRecently, we hit 10,000 followers and I wanted to start following our followers back, but was annoyed \nbecause none of the tools out there would do exactly what I wanted.  (At least not without paying $29.95/month)\n\nSo I wrote my own.\n\n\n### Installation\n\n    git@github.com:dmuth/nodejs-twitter-tools.git\n    cd nodejs-twitter-tools\n    npm install\n\n\n### Configuration\n\n- Create an app at https://dev.twitter.com/\n- Copy the file `config/default.yaml` to `config/development.yaml` \n\tand populate the values with your keys from twitter.\n- Make sure that your app's \"access level\" is set to \"Read and Write\".  \n\t**This is not the default!**\n\n\n### Running\n\n````\n  Usage: app.js [options]\n\n  Options:\n\n    -h, --help           output usage information\n    -V, --version        output the version number\n    -n, --num \u003cn\u003e        How many followers to add as friends\n    --include_protected  Add protected users as friends (request access to their Twitter feeds, actually)\n    --cursor \u003ccursor\u003e    Our cursor from a previous run so we can pick up where we left off\n    --add_user_concurrency How many users do we want to add in parallel?\n    --whoami             Ask Twitter who the authenticating user is\n    --go                 Actually add followers as twitter friends. (adding users is faked, otherwise)\n````\n\n### Sample output\n\n````\n$ ./app.js --num 1\n2014-01-06T02:53:03.772Z - info: Users left to skip: 0\n2014-01-06T02:53:03.775Z - info: Twitter query options: {\"count\":100}\n2014-01-06T02:53:04.474Z - info: Number of queries left in quota: 7\n2014-01-06T02:53:12.529Z - info: Skipping protected user: Shortys_Pub\n2014-01-06T02:53:12.530Z - info: Skipping protected user: FirecatcherLP\n2014-01-06T02:53:12.530Z - info: Skipping user who we're already following: GalenChris\n2014-01-06T02:53:12.530Z - info: Skipping protected user: Agriwulf\n2014-01-06T02:53:12.530Z - info: Skipping user who we're already following: ManageFlitter\n2014-01-06T02:53:12.530Z - info: Skipping user who we're already following: wuufcoyote\n2014-01-06T02:53:12.530Z - info: Skipping user who we're already following: PopBarware\n2014-01-06T02:53:12.530Z - info: Skipping user who we're already following: PomHasWifi\n2014-01-06T02:53:12.530Z - info: Skipping protected user: lightsguydave\n2014-01-06T02:53:12.530Z - info: Skipping user who we're already following: IndyFurCon\n2014-01-06T02:53:12.530Z - info: Skipping user who we're already following: fraytehhusky\n2014-01-06T02:53:12.530Z - info: Skipping user who we're already following: BayleafxButtons\n2014-01-06T02:53:12.530Z - info: Skipping user who we're already following: VincentTheGuy\n2014-01-06T02:53:12.530Z - info: Skipping user who we're already following: USAirways\n2014-01-06T02:53:12.530Z - info: Skipping protected user: randomzen\n2014-01-06T02:53:12.530Z - info: Skipping user who we're already following: Riismo\n2014-01-06T02:53:12.530Z - info: Skipping user who we're already following: Tihusky\n2014-01-06T02:53:12.530Z - info: Skipping protected user: Bolo_Cutefox\n2014-01-06T02:53:12.530Z - info: Skipping protected user: Riffuchs\n2014-01-06T02:53:12.530Z - info: Skipping user who we're already following: deliverability\n2014-01-06T02:53:12.531Z - info: Skipping user who we're already following: Wally_Wabbit\n2014-01-06T02:53:12.531Z - info: Skipping user who we're already following: tgeller\n2014-01-06T02:53:12.531Z - info: Skipping protected user: DatTaruCatThing\n2014-01-06T02:53:12.531Z - info: Skipping user who we're already following: bioswoof\n2014-01-06T02:53:12.531Z - info: Skipping protected user: DevinDParlett\n2014-01-06T02:53:12.531Z - info: Skipping user who we're already following: Raishi_Fox\n2014-01-06T02:53:12.531Z - info: Skipping protected user: CJ_theHusky\n2014-01-06T02:53:12.531Z - info: Skipping user who we're already following: GumballCrash\n2014-01-06T02:53:12.531Z - info: Skipping user who we're already following: TheVectorCat\n2014-01-06T02:53:12.531Z - info: Skipping user who we're already following: RoboCop\n2014-01-06T02:53:12.531Z - info: Skipping user who we're already following: Laphin\n2014-01-06T02:53:12.531Z - info: Skipping user who we're already following: xLittleLionessx\n2014-01-06T02:53:12.531Z - info: Skipping user who we're already following: ClydeCheetah\n2014-01-06T02:53:12.531Z - info: Skipping protected user: LunariLivi\n2014-01-06T02:53:12.531Z - info: Skipping user who we're already following: TheFuckingCat\n2014-01-06T02:53:12.531Z - info: Skipping user who we're already following: EenyuWolf\n2014-01-06T02:53:12.531Z - info: Skipping user who we're already following: ReiMeerkat\n2014-01-06T02:53:12.531Z - info: Skipping user who we're already following: Akida__\n2014-01-06T02:53:12.531Z - info: Skipping user who we're already following: kasifrost\n2014-01-06T02:53:12.531Z - info: Skipping user who we're already following: Popufurman\n2014-01-06T02:53:12.531Z - info: Skipping user who we're already following: lablayers\n2014-01-06T02:53:12.531Z - info: Skipping protected user: Coolraptors\n2014-01-06T02:53:12.531Z - info: Skipping protected user: RazokHuskie\n2014-01-06T02:53:12.531Z - info: Skipping protected user: Bedroom_Folfie\n2014-01-06T02:53:12.531Z - info: Skipping user who we're already following: cyancrux\n2014-01-06T02:53:12.531Z - info: Skipping user who we're already following: Inazuma_Okami\n2014-01-06T02:53:12.532Z - info: Following user 'LearningLaravel'...\n2014-01-06T02:53:13.887Z - info: Done adding users!\n````\n\nNote that by default protected users are ignored, as are users we are already following.\n\n\n### /followers/list only returns 200 users max instead of 5,000.  Halp!\n\nNo worries.  It turns out that cursors are persistent for a macroscopic \namount of time.  Just keep running the script, and after you exhaust \nyour quota, look for a line near the end of the run that looks like this:\n\n````\n2014-01-06T04:12:24.453Z - info: NOTE: Want to pick up here again? This is the current cursor: 1451741634324255500\n````\n\nAfter your quota has replenished, be sure to specify this cursor with \n--cursor on the command line, and your follower queries will pick up \nwhere they left off.\n\n\n### For Further Reading\n- [Twitter REST API v1.1 Resources](https://dev.twitter.com/docs/api/1.1)\n\n\n### Feedback\n\nHave feedback?  Want to report bugs?\n\nYou can find me on various social networks here:\n\n[http://www.dmuth.org/contact](http://www.dmuth.org/contact)\n\nEnjoy!\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdmuth%2Fnodejs-twitter-tools","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdmuth%2Fnodejs-twitter-tools","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdmuth%2Fnodejs-twitter-tools/lists"}