{"id":26997583,"url":"https://github.com/grimmerk/react-angular-vue-comparison","last_synced_at":"2026-04-18T07:36:24.049Z","repository":{"id":78677870,"uuid":"134606141","full_name":"grimmerk/react-angular-vue-comparison","owner":"grimmerk","description":"Analysis of GitHub Stargazers' location Data. See their country distribution. https://medium.com/p/37bd6e445073","archived":false,"fork":false,"pushed_at":"2018-06-04T11:19:25.000Z","size":3292,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-10-29T10:40:28.271Z","etag":null,"topics":["barchart","geocoding","github-api","graphql","jupyter-notebook","plotly"],"latest_commit_sha":null,"homepage":"","language":"Jupyter Notebook","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/grimmerk.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":"2018-05-23T17:47:59.000Z","updated_at":"2021-08-11T07:58:03.000Z","dependencies_parsed_at":"2023-04-28T17:47:51.081Z","dependency_job_id":null,"html_url":"https://github.com/grimmerk/react-angular-vue-comparison","commit_stats":null,"previous_names":["grimmerk/react-angular-vue-comparison"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/grimmerk/react-angular-vue-comparison","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/grimmerk%2Freact-angular-vue-comparison","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/grimmerk%2Freact-angular-vue-comparison/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/grimmerk%2Freact-angular-vue-comparison/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/grimmerk%2Freact-angular-vue-comparison/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/grimmerk","download_url":"https://codeload.github.com/grimmerk/react-angular-vue-comparison/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/grimmerk%2Freact-angular-vue-comparison/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31961347,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-18T00:39:45.007Z","status":"online","status_checked_at":"2026-04-18T02:00:07.018Z","response_time":103,"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":["barchart","geocoding","github-api","graphql","jupyter-notebook","plotly"],"created_at":"2025-04-04T02:18:46.423Z","updated_at":"2026-04-18T07:36:24.030Z","avatar_url":"https://github.com/grimmerk.png","language":"Jupyter Notebook","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n## Steps\n\n### 1. Create (OAuth) Access token.\n\nWithout this, the rate limit of GitHub API (v3) is 60 per hour. There is no exact number for v4 but should be similar. \n\nOne way is to create a OAuth app (server), then print the token information, ref: https://developer.github.com/apps/building-oauth-apps/\n\nBut a more convenient way is to get the token on GitHub Web UI, just follow the link,\nhttps://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/. In this step `Select the scopes, or permissions, you'd like to grant this token`, you do not need to select any scopes/permissions since this project is to read other people's public repositories' information.\n\n### 2. run built index.js to use GitHub v4 GraphQL api to fetch data\n\n1. Install TypeScript compilers. Ref: https://code.visualstudio.com/docs/languages/typescript\n2. In project root folder, type `tsc` to get built JavaScript (index.ts-\u003eindex.js) in build folder. Or you can use VS Code to build it. (Tasks-\u003eRun Build task)\n3. execute `index.js`. Or you can use VS Code Debug to launch it. \n\nAfter a while, you will get `facebook-react.json` etc. \n\n### 3. Use Python geocoder package to identify each Stargazer's country\n\n**Enable paid version of Google API**\n\n[geocoder](https://github.com/DenisCarriere/geocoder) can use many [providers](https://github.com/DenisCarriere/geocoder#providers) and Google should be the best one. However there is a free quota to use Google API, [2500](https://developers.google.com/maps/documentation/geocoding/usage-limits) requests/day. Since our taget number exceeds this one. So I choose to enable the paid version of Google API. Finally I paid $68 for rough 140,000 requests (= stargazers), 1 request for 1 stargazer.\n\n**Get the Google API key**\n\nref: https://developers.google.com/maps/documentation/geocoding/get-api-key\n\nFill it in `.env` file, e.g.\n\n```\nGOOGLE_GEOCODE_API_KEY=\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\"\n```\n\n**Execute the following Python script**\n\n```python\nfrom analysis import Analysis\ncc = Analysis()\ncc.append_countries()  \n```\n\nIt will take many hours. Then you will get `facebook-react-country.json` etc.\n\n### 4. Drow the bar charts. \n\nRun the following script, and it will show the chart result in a new browser tab.\n\n```python\nfrom analysis import Analysis\ncc = Analysis()\ncc.read_render(if_draw=True)   \n```\n\n## Why GitHub v3 API is not used\n\nSince the response of the following v3 API used to get stargazers does not include location field. It only return the list of the stargazer account. We need to query each stargazer to get the location field. v4 GraphQL can let develoeprs to specifiy which fileds we need and get all the information in 1 request. \n\n```\nhttps://api.github.com/\nGET /repos/:owner/:repo/stargazers\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgrimmerk%2Freact-angular-vue-comparison","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgrimmerk%2Freact-angular-vue-comparison","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgrimmerk%2Freact-angular-vue-comparison/lists"}