{"id":16569977,"url":"https://github.com/andygrunwald/trendinggithub","last_synced_at":"2025-04-05T15:09:00.143Z","repository":{"id":1080970,"uuid":"38962610","full_name":"andygrunwald/TrendingGithub","owner":"andygrunwald","description":"A twitter bot (@TrendingGithub) to tweet trending repositories and developers from GitHub","archived":false,"fork":false,"pushed_at":"2025-03-25T12:50:00.000Z","size":2631,"stargazers_count":113,"open_issues_count":1,"forks_count":14,"subscribers_count":8,"default_branch":"master","last_synced_at":"2025-03-29T14:11:55.636Z","etag":null,"topics":["hacktoberfest"],"latest_commit_sha":null,"homepage":"https://twitter.com/TrendingGithub","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/andygrunwald.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"andygrunwald","custom":"https://paypal.me/andygrunwald"}},"created_at":"2015-07-12T13:19:02.000Z","updated_at":"2025-03-25T12:50:03.000Z","dependencies_parsed_at":"2023-11-21T10:32:45.090Z","dependency_job_id":"a2ee7a55-1e19-43f0-a14b-95a8caa68250","html_url":"https://github.com/andygrunwald/TrendingGithub","commit_stats":{"total_commits":202,"total_committers":5,"mean_commits":40.4,"dds":"0.12871287128712872","last_synced_commit":"94c21d26aef03fc2ca8e017520cb35363232dc21"},"previous_names":[],"tags_count":9,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andygrunwald%2FTrendingGithub","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andygrunwald%2FTrendingGithub/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andygrunwald%2FTrendingGithub/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andygrunwald%2FTrendingGithub/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/andygrunwald","download_url":"https://codeload.github.com/andygrunwald/TrendingGithub/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247353746,"owners_count":20925329,"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":["hacktoberfest"],"created_at":"2024-10-11T21:16:10.124Z","updated_at":"2025-04-05T15:09:00.123Z","avatar_url":"https://github.com/andygrunwald.png","language":"Go","funding_links":["https://github.com/sponsors/andygrunwald","https://paypal.me/andygrunwald"],"categories":[],"sub_categories":[],"readme":"# [@TrendingGithub](https://twitter.com/TrendingGithub)\n\n[![Build Status](https://travis-ci.org/andygrunwald/TrendingGithub.svg?branch=master)](https://travis-ci.org/andygrunwald/TrendingGithub)\n[![GoDoc](https://godoc.org/github.com/andygrunwald/TrendingGithub?status.svg)](https://godoc.org/github.com/andygrunwald/TrendingGithub)\n[![Go Report Card](https://goreportcard.com/badge/github.com/andygrunwald/TrendingGithub)](https://goreportcard.com/report/github.com/andygrunwald/TrendingGithub)\n\nA twitter bot (**[@TrendingGithub](https://twitter.com/TrendingGithub)**) to tweet [trending repositories](https://github.com/trending) and [developers](https://github.com/trending/developers) from GitHub.\n\n\u003e Follow us at **[@TrendingGithub](https://twitter.com/TrendingGithub)**.\n\n[![@TrendingGithub twitter account](./img/TrendingGithub.png \"@TrendingGithub twitter account\")](https://twitter.com/TrendingGithub)\n\n**Important:** This is no official GitHub or Twitter product.\n\n## Features\n\n* Tweets trending projects every 30 minutes\n* Refreshes the configuration of twitters URL shortener t.co every 24 hours\n* Blacklisting of repositories for 30 days (to avoid tweeting a project multiple times in a short timeframe)\n* Maximum use of 140 chars per tweet to fill up with information\n* Debug / development mode\n* Multiple storage backends (currently [Redis](http://redis.io/) and in memory)\n\n## Installation\n\n1. Download the [latest release](https://github.com/andygrunwald/TrendingGithub/releases/latest)\n2. Extract the archive (zip / tar.gz)\n3. Start the bot via `./TrendingGithub -debug`\n\nFor linux this can look like:\n\n```sh\ncurl -L  https://github.com/andygrunwald/TrendingGithub/releases/download/v0.4.0/TrendingGithub-v0.4.0-linux-amd64.tar.gz -o TrendingGithub-v0.4.0-linux-amd64.tar.gz\ntar xzvf TrendingGithub-v0.4.0-linux-amd64.tar.gz\ncd TrendingGithub-v0.4.0-linux-amd64\n./TrendingGithub -debug\n```\n\n## Usage\n\n```\n$ ./TrendingGithub -help\nUsage of ./TrendingGithub:\n  -debug\n    \tOutputs the tweet instead of tweet it (useful for development). Env var: TRENDINGGITHUB_DEBUG\n  -expvar-port int\n    \tPort which will be used for the expvar TCP server. Env var: TRENDINGGITHUB_EXPVAR_PORT (default 8123)\n  -storage-auth string\n    \tStorage Auth (e.g. myPassword or \u003cempty\u003e). Env var: TRENDINGGITHUB_STORAGE_AUTH\n  -storage-url string\n    \tStorage URL (e.g. 1.2.3.4:6379 or :6379). Env var: TRENDINGGITHUB_STORAGE_URL (default \":6379\")\n  -twitter-access-token string\n    \tTwitter-API: Access token. Env var: TRENDINGGITHUB_TWITTER_ACCESS_TOKEN\n  -twitter-access-token-secret string\n    \tTwitter-API: Access token secret. Env var: TRENDINGGITHUB_TWITTER_ACCESS_TOKEN_SECRET\n  -twitter-conf-refresh-time duration\n    \tTwitter: Time interval to refresh the configuration of twitter (e.g. char length for short url). Env var: TRENDINGGITHUB_TWITTER_CONF_REFRESH_TIME (default 24h0m0s)\n  -twitter-consumer-key string\n    \tTwitter-API: Consumer key. Env var: TRENDINGGITHUB_TWITTER_CONSUMER_KEY\n  -twitter-consumer-secret string\n    \tTwitter-API: Consumer secret. Env var: TRENDINGGITHUB_TWITTER_CONSUMER_SECRET\n  -twitter-follow-new-person\n    \tTwitter: Follows a friend of one of our followers. Env var: TRENDINGGITHUB_TWITTER_FOLLOW_NEW_PERSON\n  -twitter-follow-new-person-time duration\n    \tGrowth hack: Time interval to search for a new person to follow. Env var: TRENDINGGITHUB_TWITTER_FOLLOW_NEW_PERSON_TIME (default 45m0s)\n  -twitter-tweet-time duration\n    \tTwitter: Time interval to search a new project and tweet it. Env var: TRENDINGGITHUB_TWITTER_TWEET_TIME (default 30m0s)\n  -version\n    \tOutputs the version number and exit. Env var: TRENDINGGITHUB_VERSION\n```\n\n**Every parameter can be set by environment variable as well.**\n\n**Twitter-API settings** (`twitter-access-token`, `twitter-access-token-secret`, `twitter-consumer-key` and `twitter-consumer-secret`) are necessary to use the Twitter API and to set up a tweet by your application.\nYou can get those settings by [Twitter's application management](https://apps.twitter.com/).\n\nIf you want to play around or develop this bot, use the `debug` setting.\nIt avoids using the Twitter API for tweet purposes and outputs the tweet on stdout.\n\nThe Redis url (`storage-url`)is the address of the Redis server in format *ip:port* (e.g. *192.168.0.12:6379*).\nIf your server is running on localhost you can use *:6379* as a shortcut.\n`storage-auth` is the authentication string necessary for your Redis server if you use the [Authentication feature](http://redis.io/topics/security#authentication-feature).\n\n## Storage backends\n\nWhy is a storage backend needed at all?\n\nWe are looking for popular projects in a regular interval.\nTo avoid tweeting a project or developer multiple times after another we add those records to a blacklist for a specific time.\n\nAt the moment there are two backends implemented:\n\n* Memory (used in development)\n* Redis (used in production)\n\n## Growth hack\n\nWe implemented a small growth hack to get a few followers.\nThis hack was suggested by my colleague [@mre](https://github.com/mre).\nIt works like described:\n\n* Get all followers from [@TrendingGithub](https://twitter.com/TrendingGithub)\n* Choose a random one and get the followers of the choosen person\n* Check if this person follows us already\n* If yes, repeat\n* If no, follow this person\n\nThis feature can be activated via the `twitter-follow-new-person` flag.\n\n## Motivation\n\nI love to discover new tools, new projects, new languages, new coding best practices, new exciting ideas and new people who share the same passion like me.\n[I use twitter a lot](https://twitter.com/andygrunwald) and have little time to check [trending repositories](https://github.com/trending) and [developers](https://github.com/trending/developers) on a daily basis.\n\nWhy not combine both to save time and spread favorite projects and developers via tweets?\n\n## License\n\nThis project is released under the terms of the [MIT license](http://en.wikipedia.org/wiki/MIT_License).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandygrunwald%2Ftrendinggithub","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fandygrunwald%2Ftrendinggithub","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandygrunwald%2Ftrendinggithub/lists"}