{"id":15643214,"url":"https://github.com/kbastani/sentiment-analysis-twitter-microservices-example","last_synced_at":"2025-10-11T12:06:28.697Z","repository":{"id":150978361,"uuid":"209589333","full_name":"kbastani/sentiment-analysis-twitter-microservices-example","owner":"kbastani","description":"A sample application that demonstrates how to build a graph processing platform to analyze sources of emotional influence on Twitter.","archived":false,"fork":false,"pushed_at":"2019-09-25T06:53:11.000Z","size":296,"stargazers_count":60,"open_issues_count":0,"forks_count":24,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-04-30T11:55:59.078Z","etag":null,"topics":["graph-algorithms","neo4j","pagerank","spring-boot","spring-data","twitter-sentiment-analysis"],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kbastani.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-09-19T15:33:41.000Z","updated_at":"2024-09-29T16:42:34.000Z","dependencies_parsed_at":"2023-04-13T03:04:48.144Z","dependency_job_id":null,"html_url":"https://github.com/kbastani/sentiment-analysis-twitter-microservices-example","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/kbastani/sentiment-analysis-twitter-microservices-example","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kbastani%2Fsentiment-analysis-twitter-microservices-example","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kbastani%2Fsentiment-analysis-twitter-microservices-example/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kbastani%2Fsentiment-analysis-twitter-microservices-example/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kbastani%2Fsentiment-analysis-twitter-microservices-example/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kbastani","download_url":"https://codeload.github.com/kbastani/sentiment-analysis-twitter-microservices-example/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kbastani%2Fsentiment-analysis-twitter-microservices-example/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279007132,"owners_count":26084246,"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","status":"online","status_checked_at":"2025-10-11T02:00:06.511Z","response_time":55,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["graph-algorithms","neo4j","pagerank","spring-boot","spring-data","twitter-sentiment-analysis"],"created_at":"2024-10-03T11:59:29.764Z","updated_at":"2025-10-11T12:06:28.682Z","avatar_url":"https://github.com/kbastani.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Sentiment Analysis Twitter Microservices Example\n\nA sample application that demonstrates how to build a graph processing platform to analyze sources of emotional influence on Twitter. [A guided tutorial](http://www.kennybastani.com) is provided with this sample project.\n\nThis repository is actively being worked on and has not yet transformed into its final state. Please check back periodically to see updates. If you have trouble running the example, please post to the issue tracker.\n\n## Architecture\n\nThe diagram below shows each component and microservice as a part of this sample application. The connections are communication points between each service, describing what protocol is used.\n\n![Twitter Crawler Architecture Diagram](https://i.imgur.com/Jp4I1tp.png)\n\nThe two Spring Boot applications that are colored in blue are stateless services. Stateless services will not attach a persistent backing service or need to worry about managing state locally.\n\nThe Spring Boot application that is colored in green is the _Twitter Crawler_ service. Components that are colored in green will typically have an attached backing service. These backing services are responsible for managing state locally, and will either persist state to disk or in-memory.\n\nThe services colored in red are external APIs that are used to collect data and to run sentiment analysis and other natural language machine learning algorithms.\n\n### Spring Boot Services\n\n- Rank Dashboard\n- Discovery Service\n- Configuration Service\n- Twitter Crawler\n\n### Backing Services\n\n- Neo4j (BOLT)\n- RabbitMQ (AMQP)\n- Twitter API (HTTP)\n- Google Cloud Language API (HTTP)\n\n## Graph Processing Platform\n\nNeo4j is a graph database that includes graph processing algorithms from a community plugin called [APOC](https://neo4j.com/developer/graph-algorithms/).\n\n## Graph Data Model\n\nThe graph data model in Neo4j will be created using the following diagram.\n\n![Twitter Graph Data Model](https://i.imgur.com/U1eK3vi.png)\n\n### Sentiment Analysis\n\nWhen Twitter data is imported, a user's tweets will be analyzed using the GCP Natural Language API.\n\n![Twitter Graph Data Model](https://i.imgur.com/LkdSk6p.png)\n\n### Category\n\nCategories will be inferred over time by analyzing the top ranked phrases and submitting the group of tweets as a document to GCP's classification API.\n\n![Twitter Graph Example Model](https://i.imgur.com/6yJTJuE.png)\n\n\n## External APIs\n\nTo be able to run the example, you'll need to provide API authorization for both the GCP NLP API and Twitter Developer API.\n\n- Check out consumerKey and accessToken at the [Twitter developer site](https://dev.twitter.com)\n- Check out GCP token authorization file at [GCP developer documentation](https://cloud.google.com/docs/authentication/production)\n- Fill out Twitter properties on `docker-compose.yaml`\n- Add your GCP authorization to `twitter-rank-crawler/credentials.json`\n - _Please do not check-in your private secrets to public GitHub!_\n- Run `mvn clean install -DskipTests` in your terminal with Docker running\n- Run `docker-compose up` in your terminal console\n\n## License\n\nThis library is an open source product licensed under Apache License 2.0.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkbastani%2Fsentiment-analysis-twitter-microservices-example","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkbastani%2Fsentiment-analysis-twitter-microservices-example","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkbastani%2Fsentiment-analysis-twitter-microservices-example/lists"}